如何将寄存器的最低有效位加载到变量中?在macho64上获得“64位不支持32位绝对地址”

时间:2017-12-19 12:04:54

标签: assembly nasm 32bit-64bit mach-o

我想在nasm / macho-64上用汇编程序显示最低有效数字:

%define SYSCALL_WRITE 0x2000004
%define SYSCALL_EXIT  0x2000001

SECTION .data
   digit db 0,10 

SECTION .text
   global _start

_start:

   add rax, 48
   mov [digit], al

   mov rax, SYSCALL_WRITE
   mov rdi, 1
   mov rsi, digit
   mov rdx, 2  ;length (of 48)
   syscall

   mov rax, SYSCALL_EXIT
   mov rdi, 0
   syscall

这里使用al,因为它包含rax的最低位字节。我从类似的问题中发现,64位汇编没有[]语法。然后我尝试使用

lea digit, al

lea [digit], al

但两者都给了我“操作码和操作的无效组合”错误。我还尝试了mov rax而不是add rax。我应该怎么做才能将rax的最低有效位加载/移动到我的digit变量中?

谢谢。

0 个答案:

没有答案