x86汇编编程,正确使用movzx和movsx变量

时间:2018-03-05 17:14:39

标签: visual-studio assembly x86 cpu-registers

我正在为汇编编程课做家庭作业。这是作业

  

使用汇编语言实现以下表达式:

     
      
  • 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位立即存储

0 个答案:

没有答案