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

8월 19일 어셈블리 기본1.

송시혁 2013. 8. 19. 16:18





.386
.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dxExitCode:DWORD

INCLUDE io.h     ;io.h를 include 대문자로 사용해야함.

cr    EQU    0dh ;엔터, 왼쪽 아래끝으로 이동하는것. 
Lf    EQU    0ah ;줄바꿈기능.

.STACK 4096 ;STACK영역, 4096은 4바이트. 

.DATA  ;;;;;;;;;;전역변수 ,데이터 영역. 
       
label1      BYTE      "The value is "  ;;;;;;   label1은 변수이름, BYTE는 1byte, word는 4byte형.     
   
                                            ;;;;;;   " "안에 있는 수 만큼 메모리 할당.    

iNumber   BYTE      11    DUP  (?)  ;;;;;마찬가지로 1바이트형 변수 iNumber선언. 11byte를  뒤에 (?)를 아무거나 
                                               ;;;;;;iNumber에 복사한다.      
             BYTE      cr,    Lf,     0    ;;;;;변수이름은 없으나, 3바이트의 메모리를 사용한다.
                                               ;;;;;0을 밑에 code영역을 보면 알겠지만, 
                                               ;;;;;0을 만날때까지 실행된다.     

;;;;;;;여기까지 전역변수 DATA  영역
        

.CODE ;;코드영역
_smart:
        mov      eax, 100        ;;;오늘 배운것중에 핵심부분. 명령어 mov operland eax와 100 여기서는 100을 eax에 대입.
        dtoa     iNumber, eax   ;;;정수를 아스키코드로 바꾸는 명령어 eax가 가지고 있는 값100을 iNumber에 대입.
        output   label1            ;;;laber1을 출력    

        INVOKE   ExitProcess, 0 ;;;종료
        
PUBLIC  _smart ;;;실행파일 이름.



아래는 실행결과.

빨간색 100을 제외한 네모친 부분이 전역변수 iNumnber에 공간이다. 

100까지 포함하여 11개까지 차지한 것. 


이 실행결과는 아래 코드를 추가하여 실행한 모습이다.

label1     BYTE      "The value is "        
iNumber  BYTE      11    DUP  (?)
        BYTE      "ssongsi       "  이부분을 추가한 것.
            BYTE      cr,    Lf,     0