어셈블리(assembly)/어셈블리 실습

8월 14일 어셈블리(대충 흐름만 보기)

송시혁 2013. 8. 16. 08:53

.386
.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dxExitCode:DWORD

INCLUDE io.h

cr    EQU    0dh
Lf    EQU    0ah

.STACK 4096

.DATA  ;;;;;;;;;;전역변수
number1    DWORD    ? ;dword는 4바이트
number2    DWORD    ?
prompt1    BYTE      "Enter first      number :     "0 ;BYTE는 1바이트
prompt2    BYTE      "Enter second number :     "0    ;
string     BYTE      40    DUP  (?)           ; 변수 string 40개를 ()안의 내용을 복사.  여기서는 키보드로 
                                                       ; 입력받기 위해 ()안에 '?'를 사용함.

label1     BYTE      cr,   Lf,      "The Sum is "    ;     
sum        BYTE      11    DUP  (?)         ;DUP는 왼쪽에 11개만큼 ()안의 있는 것을 복사. 즉, 코드를 복사한다.   
           BYTE      cr,    Lf,     0         ;
        
.CODE
_smart:
        output   prompt1;화면에 prompt1에 대한 내용을 화면에 출력.
        input    string, 40  ;옆에 키보드로 입력받는다. 40개까지 가능.
        atod     string    ;아스키코드를 숫자로 바꾸는 함수. 위에 입력한 아스키코드를 숫자로전환.
        mov      number1, eax  ;number1에 eax를 대입.
        
        output   prompt2  ;화면에 prompt2에 내용을 출력.
        input    string, 40  ;키보드로 입력받는다. 40개까지 가능.
        atod     string    ;
        mov      number2, eax  ;number1에 eax를 대입.
        
        mov     eax, number1  ;eax=number1
        add      eax, number2  ;eax=eax+number2
        dtoa     sum, eax  ;출력하기 전에 정수를 아스키코드로 변환한다. 
        output   label1    ;
        
        INVOKE   ExitProcess, 0
        
PUBLIC  _smart