我正在为汇编编程课做家庭作业。这是作业
使用汇编语言实现以下表达式:
- BX = -val1 + 20 - (val2 + val3)
- 假设val1,val2和val3是8位整数变量
- 初始化val1为5,val2为8,val3为-4
- 只有在需要时,才允许使用16位寄存器来保存中间结果。
- 在需要时使用movzx,movsx或neg指令。
- 使用调试程序验证您的答案。
这是我的代码:
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
.data
val1 sbyte 0 ;intialize val1
val2 sbyte 0 ;intialize val2
val3 sbyte 0 ;intialize val3
result sword 0 ;intialize result
.code
main proc
mov val1,5 ;val1 = 5
mov val2,8 ;val2 = 8
mov val3,-4 ;val3 = -4
mov ax,0
mov bx,0
mov cx,0
mov dx,0
movzx dx,val1 ;dx = val1
neg dx ;dx = -val1
add dx,20 ;dx = -val1 + 20
movzx ax,val2 ;ax = val2
neg ax ;ax = -val2
movzx cx,val3 ;cx = val3
add ax,cx ;ax = -val2 + val3
add dx,ax ;dx = -val1 + 20 -val2 + val3
mov result,dx ;result = dx
mov bx,dx ;bx = result, = -val1 + 20 -val2 + val3
invoke ExitProcess,0
main endp
end main
但是当我使用调试器检查寄存器并看到bx的值时它没有返回我想要的正确整数值,我相信我应该在代码中的某处使用movsx命令,但我确定如何因为变量我声明是8位,我们只允许使用16位立即存储