.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




Posted by sosal sosal

댓글을 달아 주세요

  1. 2012.06.08 11:47

    안녕하세요 잘보고 갑니다. 그런데 어셈블리어에서 인터럽트를 이해하는데 도움이 될만 한 자료가 있으면 받을 수 있을까요 ? cok2529@naver.com 보내주시면 감사하겠습니다.

  2. 2015.04.19 16:04

    비밀댓글입니다

    • 2015.04.19 16:44 신고

      질문은 다음과 같습니다.

      - 어셈블리 공부하다가 4CH와 4C00H의 차이점이 뭔지가 궁금해 졌는데 혹시 답해주실 수 있으시면
      ~~@naver.com으로 답변 부탇드려요

      mov ax,4c00H
      ax->4c00H

      mov ax,4cH
      ax->004cH