2012-10-12 8 views
-1
.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 
+0

이 웹 사이트에서 어셈블리 언어 참조 (http://www.woodmann.com/crackz/Tutorials/Drme2.htm)를 확인할 수 있습니다. 그것은 당신이 가지고있는 몇 가지 질문에 답해야합니다. – ForceMagic

+0

여기에 추가하려는 두 변수는 무엇입니까? –

답변

0
.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 

에 SDWORD하고 CPU 사용 설명서의 사본을 얻을 movsx 같은 익숙 지침이 정확히 무엇을하는지 읽을 것을 잊지 마세요.

+0

과제를 다시 읽으십시오. 그저 실수로 읽은 가치가 없습니다. SDWORD 값은 세 개뿐입니다. 어쨌든 감사합니다. – user1740117