nasm x86_64:尝试添加换行符时出错

问题描述 投票:0回答:0

cpuid
的结果存储在未分配的内存空间
buff
numb
中后,我想为它们各自附加一个
newline
字符。所以,我让未分配的空间比必要的长 1 个字节。

整个代码是:

section .bss

    buff resb 13
    numb resb 5

section .text
global _start

_start:

    mov eax, 0
    cpuid

    mov dword [numb], eax
    mov dword [buff+0], ebx
    mov dword [buff+4], edx
    mov dword [buff+8], ecx
                           
    mov byte [numb+4], newl
    mov byte [buff+12], newl

    mov rax, 1
    mov rdi, 1
    mov rsi, buff
    mov rdx, 13
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, numb
    mov rdx, 5
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

section .data:
    newl: db 0x0A

我尝试追加一个换行符遵循与前几行相同的语法:

mov byte [numb+4], newl
mov byte [buff+12], newl

但是链接器产生这个错误:

$ nasm -f elf64 test_cpuid.s
$ ld -o test_cpuid test_cpuid.o
test_cpuid.o: in function `_start':
test_cpuid.s:(.text+0x2a): relocation truncated to fit: R_X86_64_8 against `.data:'
test_cpuid.s:(.text+0x32): relocation truncated to fit: R_X86_64_8 against `.data:'

如何解决这个问题?也许我使用了错误的语法?

assembly x86-64 nasm
© www.soinside.com 2019 - 2024. All rights reserved.