我正在尝试使用程序集实现梯形区域的公式,但遇到了将“ax”寄存器传递给结果变量。我做错了哪里?请有人指点我。或者是计算问题?正如我在分裂后理解的那样,我可以传递给bl不同的值,当“ax”将保持“5”的结果然后我可以进行乘法并将ax传递给结果,这将是“15”
section .data
a : dw 3
b : dw 7
h : dw 3
n : dw 2
result: dw 0
section .text
global main
main:
mov ax,[a]
add ax,[b]
mov bl,[n]
div bl
mov bl,[h]
mul bl
mov result,ax
mov eax,1
mov ebx,0
int 80h
要编译并运行它我使用以下脚本:
nasm -f elf -l $1.lst $1.asm
gcc -m32 -o $1 $1.o
答案 0 :(得分:3)
正如我在分裂后理解的那样,我可以传递给不同的值,当" ax"将留下" 5"
的结果
这不完全正确!在您的示例中,AX
等于5,因为前一个除法导致余数为零。所以你可以说:当" al" 将留下" 5" 的结果。
a : dw 3 b : dw 7 h : dw 3 n : dw 2
请将冒号附加到标签名称。或者根本不要写它们(数据定义不需要它们)。
mov bl,[n] div bl mov bl,[h]
由于NASM并不太关心尺寸,因此您可以将这些字大小的变量分配给字节大小的寄存器。有时候这很有用,但你需要注意它!
mov result,ax
这当然是真正的问题。要让NASM在结果变量中写AX
,您必须使用括号 [] 。
mov [result], ax