编写一个 NASM 宏:divide,它有 2 个参数,指定任何寻址模式下的无符号整数。宏计算其第一个参数的上限,除以第二个参数,并将结果放入寄存器 edx。如果第二个参数为 0(要在运行时测试),则结果应为 0,并且应将消息“除以零”打印到标准输出。
这是我写的代码。如何编写没有标签的代码?(位置独立于代码)
%macro divide 2
section .rodata
LC1: DB "divide by zero ", 10, 0
section .text
mov eax, %1
mov ebx, %2
cmp ebx, 0 ; divide by zero
jne rest1
push LC1
call printf
add esp,4
mov edx, 0
jmp end1
rest1:
mov edx, 0
div ebx
add eax, edx
mov edx , eax ; the result should be in edx
end1:
%endmacro