NASMマクロを記述します。divideには2つの引数があり、任意のアドレッシングモードで符号なし整数を指定します。マクロは、最初の引数の上限を2番目の引数で割った値を計算し、その結果をレジスタedxに配置します。2番目の引数が0(実行時にテストされる)の場合、結果は0になり、「ゼロ除算」というメッセージがstdoutに出力されます。
どちらがどれであるかをどのように判断できるので、それぞれのケースを処理できますか?(;アドレスモードは、レジスタ、メモリ、およびイミディエートです。)
編集:これは私が書いた最後のコードです:ラベルなしでこのコードを書く方法は?(位置独立コード):
%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