首先我在OS X(x86-64集)上,我使用nasm。
我正在关注asm的教程,我正在编写一个函数来反转字符串。
我的问题是我不能把字节放在我的resb缓冲区中。
我有Mach-O 64-bit format does not support 32-bit absolute addresses
错误。我做了一些研究,尝试过很多东西(比如lea,或者首先进入寄存器)似乎无法解决我的问题。
下面是我的代码,我的问题是:mov [output + rdi], eax
(我正在尝试将输入db缓冲区的反向字符串写入输出resb 12缓冲区)reverseStr
label
section .data
nl db 0xa
input db "Hello world!"
section .bss
output resb 12
section .text
global start
global _main
start:
jmp _main
ret
_main:
push rbp
mov rbp, rsp
mov rsi, input
xor rcx, rcx
cld
mov rdi, $ + 15
call calculateStrLength
xor rax, rax
xor rdi, rdi
jmp reverseStr
calculateStrLength:
cmp byte [rsi], 0
je exit
lodsb
push rax
inc rcx
jmp calculateStrLength
reverseStr:
cmp rcx, 0
;je printResult
pop rax
mov [output + rdi], eax
dec rcx
inc rdi
jmp reverseStr