본문 바로가기
코스웨어/13년 스마트컨트롤러

어셈블리어 과제 (Conditional Jump)

by 알 수 없는 사용자 2013. 9. 4.
728x90
반응형

 

☞ C언어 if , else 문을 어셈블리어 jmp로 코딩

 Visual studio 2010 Disassembly

 ASM 코딩

#include <stdio.h>

 

int main()
{

 

00411350  push        ebp 
00411351  mov         ebp,esp 
00411353  sub         esp,0CCh 
00411359  push        ebx 
0041135A  push        esi 
0041135B  push        edi 
0041135C  lea         edi,[ebp-0CCh] 
00411362  mov         ecx,33h 
00411367  mov         eax,0CCCCCCCCh 
0041136C  rep stos    dword ptr es:[edi] 
 int a = 100;
0041136E  mov         dword ptr [a],64h  
 
 ++a;
00411375  mov         eax,dword ptr [a] 
00411378  add         eax,1 
0041137B  mov         dword ptr [a],eax 

 if(a < 0 )
0041137E  jns         main+3Bh (41138Bh)   
; SF = 1 아니면  41138B 로 점프

{
      --a;

 

00411380  mov         eax,dword ptr [a] 
00411383  sub         eax,1 
00411386  mov         dword ptr [a],eax 
00411389  jmp         main+4Ch (41139Ch)  

 }
 else if(a == 0)
0041138B  cmp         dword ptr [a],0 

; a 와 0 이 같다면 ZF = 1 될것이고

0041138F  jne         main+43h (411393h)

; 같지 않으면 ( ZF = 0)  411393 로 점프
 {

00411391  jmp         main+4Ch (41139Ch)

41139C 로 점프 

 }
 else
 {

 

  ++a; 
00411393  mov         eax,dword ptr [a] 
00411396  add         eax,1 
00411399  mov         dword ptr [a],eax  

 }

 a = a+100;
0041139C  mov         eax,dword ptr [a] 
0041139F  add         eax,64h 
004113A2  mov         dword ptr [a],eax 

 return 0;
004113A5  xor         eax,eax 

}

 

 
.386
.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dxExitCode:DWORD

INCLUDE io.h
cr EQU 0dh
Lf EQU 0ah

.STACK 4096


.DATA
prompt1    BYTE   "input value : ", 0
prompt2    BYTE   "input balance : ", 0
value       BYTE   10 DUP (?)
balance   BYTE   10 DUP (?)

result1     BYTE   "Result  :  (balance + value) < 0", cr,Lf,cr,Lf, 0
result2     BYTE   "Result  :  (balance + value) = 0", cr,Lf,cr,Lf, 0
result3     BYTE   "Result  :  (balance + value) > 0", cr,Lf,cr,Lf, 0

 

.CODE
_start:

 

  output prompt1
  input value, 10
  atod value
  mov  ebx, eax
  
  output prompt2
  input balance, 10
  atod balance

  add   eax, ebx   ;balance + value 
  
  jns elseifZero  ; SF = 1이 아니면 elseifZero로 점프
  
  output result1   ; (balance + value) < 0 이라면 수행
  
  jmp endBalanceCheck  ; endBalanceCheck 로 점프 

 

elseifZero:           jnz elsePos   ; ZF = 1이  아니면  elsePos 로 점프

  

                         output result2   ; (balance + value) = 0 이라면 수행

 

                          jmp endBalanceCheck  ; endBalanceCheck 로 점프 
  
elsePos:             output result3   ; (balance + value) > 0 이라면 수행

 

endBalanceCheck:

                         INVOKE ExitProcess, 0

 

PUBLIC _start
END
 

 

 

 

____________________________________________________________________________________________

 

728x90