编写一个 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