Programing/Assembley 16bit

Assembly 02. 어셈블리 기본 구조 및 변수

sosal 2010. 5. 10. 17:54
반응형

.SMALL 모델로 프로그래밍 합니다.

" ; " 로 주석문을 사용합니다.
       
PAGE 60,132
TITLE A04ASM2 (EXE) MOVE AND ADD OPERATION
; -------------------------------------------------------------------------
         .MODEL SMALL
         .STACK 64
         .DATA    ;DEFINE DATA
;이곳에 변수를 선언합니다.
;ex) DIGIT    DB        값
;ex) ARR      DB        21 DUP(' ') ;배열 선언 등등
; -----------------------------------------------------------------------

                .CODE                              ;코드 세그먼트의 시작입니다.
MAIN        PROC       FAR
                MOV        AX,@data          ;@data는 데이타 세그먼트
                MOV        DS,AX               ;DS 레지스터에 @data 주소 삽입
                MOV        ES,AX               ;ES 레지스터에 @data 주소 삽입

                MOV        AX,4C00H          ;프로그램 종료를 위한 INT 21H 인터럽트 속성 설정
                INT          21H                   ;21H 인터럽트 발생 (프로그램 종료)

MAIN        ENDP                               ;END OF PROCEDURE
; -----------------------------------------------------------------------
; 이곳에 원하는 새로운 프로시저(함수) 삽입 가능
; -----------------------------------------------------------------------

                END        MAIN                 ;END OF PROGRAM



변수 정의법

정의          일반적 지시어        MASM 6.0 지시어
BYTE        DB                      BYTE
워드          DW                      WORD
이중워드    DD                      DWORD
3중워드     DF                      FWORD
4중워드     DQ                     QWORD
10바이트    DT                      TBYTE

변수이름   지시어      DATA
ex)
DIGIT1       DW           13     ; 10진수 숫자 13을 DIGIT1이란 변수에 WORD 크기로 삽입
DIGIT2       DB            1EH   ; 16진수 숫자 1E를 DIGIT2란 변수에 BYTE 크기로 삽입
ARR          DB            21 DUP(' '); 21개의 " " 문자열 ARRNAME 배열 변수 생성
NAME       DB            'Hello world','$' ; Hello world라는 문자열 삽입과 , $ 추가

$의 의미 : C언어에서 NULL과 같은 의미입니다. 변수의 끝을 의미합니다.




예제)
Sosal을 출력하는 프로그램입니다.
출력 인터럽트 루틴은 다음에 자세하게 다루겠습니다.




PAGE 60,132
TITLE A04ASM2 (EXE) MOVE AND ADD OPERATION
; -------------------------------------------------------------------------
         .MODEL SMALL
         .STACK 64
         .DATA    ;DEFINE DATA

ARRAY         DB        'Sosal','$'
; -----------------------------------------------------------------------
                .CODE                              ;코드 세그먼트의 시작입니다.
MAIN        PROC       FAR
                MOV        AX,@data          ;@data는 데이타 세그먼트
                MOV        DS,AX               ;DS 레지스터에 @data 주소 삽입
                MOV        ES,AX               ;ES 레지스터에 @data 주소 삽입

                MOV        AH,09H              ;출력을 위한 21H 인터럽트 속성 설정
                LEA         DX,ARRAY         ;출력을 원하는 변수의 주소값 가져오기
                INT          21H                   ;21H 인터럽트 발생 (문자열 출력)

                MOV        AX,4C00H          ;프로그램 종료를 위한 INT 21H 인터럽트 속성 설정
                INT          21H                   ;21H 인터럽트 발생 (프로그램 종료)

MAIN        ENDP                               ;END OF PROCEDURE
; -----------------------------------------------------------------------
; 이곳에 원하는 새로운 프로시저(함수) 삽입 가능
; -----------------------------------------------------------------------
                END        MAIN                 ;END OF PROGRAM