Assembly 向程序集x86中的SDWORD添加剑值

Assembly 向程序集x86中的SDWORD添加剑值,assembly,x86,Assembly,X86,另外,别忘了拿一份CPU手册,阅读一些不熟悉的指令,如movsx的具体操作。您可能想查看此网站的汇编语言参考:。这应该回答了你的一些问题。你想在这里添加哪两个变量?重读作业,没有剑值,毕竟我只是看错了;只有三个SDWORD值。很高兴知道,谢谢 .data val1 SWORD 8 ;declare signed 16-bit word and initalize with val2 SDWORD 15 ;declare 32-bit signed double-word and

另外,别忘了拿一份CPU手册,阅读一些不熟悉的指令,如
movsx
的具体操作。

您可能想查看此网站的汇编语言参考:。这应该回答了你的一些问题。你想在这里添加哪两个变量?重读作业,没有剑值,毕竟我只是看错了;只有三个SDWORD值。很高兴知道,谢谢
.data
 val1 SWORD 8     ;declare signed 16-bit word and initalize with 
 val2 SDWORD 15  ;declare  32-bit signed double-word and initalize with -15
 val3 SDWORD 20   ;initalize SDWORD w/ 20

.code
main PROC

                     ;EAX = -val2 + 7 – val3 + val1

 mov eax,0
 mov eax,val2        ;mov val2 to 32 bit register, eax = 
 neg eax
 add eax,7           ;add 7 register eax =   
 sub eax,val3        ;sub val3 from eax = 
 mov ax,val1
 movsx eax,ax                   ;I dont know if this is the same thing as adding?
 call DumpRegs
.data
 val1 SWORD 8     ; declare signed 16-bit word and initalize with 8
 val2 SDWORD 15   ; declare 32-bit signed double-word and initalize with 15
 val3 SDWORD 20   ; initalize SDWORD w/ 20

.code
main PROC
                     ; eax = -val2 + 7 – val3 + val1

; mov eax, 0         ; unnecessary mov

 mov eax, val2       ; eax = val2
 neg eax             ; eax = -val2
 add eax, 7          ; eax = -val2 + 7
 sub eax, val3       ; eax = -val2 + 7 - val3

; mov ax, val1       ; if you do this, you will lose what you've computed in eax so far
; movsx eax, ax      ; this loads eax with sign-extended ax

; do this instead:
 movsx ebx, val1     ; ebx = val1, correctly sign-extended from 16 to 32 bits
 add eax, ebx        ; eax = -val2 + 7 - val3 + val1

 call DumpRegs