Programing/Assembley 16bit

Assembly 04. 변수 Swap 프로그램

sosal 2010. 5. 10. 19:49
반응형

1.레지스터를 이용한 Swap 프로그램
2.Stack을 이용한 Swap 프로그램

CHAR1 = 'a' 라는 변수와
CHAR2 = 'b' 라는 변수를 생성하고,

CHAR1,CHAR2를 차례대로 실행하는 OUTPUT 프로시저를 만들었습니다.

1.레지스터를 이용한 Swap 프로그램

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

CHAR1       DW         'a'     ;변수 1
CHAR2       DW         'b'     ;변수 2
; -----------------------------------------------------------------------
                .CODE                              ;코드 세그먼트의 시작입니다.
.386
MAIN        PROC       FAR
                MOV        AX,@data          ;@data는 데이타 세그먼트
                MOV        DS,AX               ;DS 레지스터에 @data 주소 삽입
                MOV        ES,AX               ;ES 레지스터에 @data 주소 삽입

                CALL        OUTPUT           ;CHAR1, CHAR2 차례대로 출력

             MOV      AX,CHAR1
             MOV      BX,CHAR2

             MOV      CHAR1,BX
             MOV      CHAR2,AX
           ;CHAR1, CHAR2 차례대로 출력

                CALL        OUTPUT           ;CHAR1, CHAR2 차례대로 출력

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

MAIN        ENDP                               ;END OF PROCEDURE
; -----------------------------------------------------------------------
; 이곳에 원하는 새로운 프로시저(함수) 삽입 가능
; 사실 프로시저에 대한 설명, 스택에 대한 설명도 하지 않았지만
; 이해하시지 못한다면 그냥 출력루틴이라고 생각하시면 됩니다!.

OUTPUT    PROC      NEAR
                MOV       AH,40H              ;출력을 위한 40H 인터럽트 속성 설정
                MOV       BX,01                ;표준 출력을 위한 화면 파일 핸들
                MOV       CX,1                 ;1글자 출력

                PUSHA
                LEA         DX,CHAR1         ;출력을 원하는 변수의 주소값 가져오기
                INT          21H                  ;21H 인터럽트 발생 (문자열 출력)
                POPA
                LEA         DX,CHAR2         ;출력을 원하는 변수의 주소값 가져오기
                INT          21H                  ;21H 인터럽트 발생 (문자열 출력)
                RET
OUTPUT   ENDP
; -----------------------------------------------------------------------
                END        MAIN                 ;END OF PROGRAM



 




2.Stack을 이용한 Swap 프로그램

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

CHAR1       DW         'a'     ;변수 1
CHAR2       DW         'b'     ;변수 2
; -----------------------------------------------------------------------
                .CODE                              ;코드 세그먼트의 시작입니다.
.386
MAIN        PROC       FAR
                MOV        AX,@data          ;@data는 데이타 세그먼트
                MOV        DS,AX               ;DS 레지스터에 @data 주소 삽입
                MOV        ES,AX               ;ES 레지스터에 @data 주소 삽입

                CALL        OUTPUT           ;CHAR1, CHAR2 차례대로 출력

             PUSH     CHAR1
             PUSH     CHAR2
             POP   
    CHAR1
             POP    
   CHAR2              ;Stack을 이용한 변수 교환

                CALL        OUTPUT           ;CHAR1, CHAR2 차례대로 출력

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

MAIN        ENDP                               ;END OF PROCEDURE
; -----------------------------------------------------------------------
; 이곳에 원하는 새로운 프로시저(함수) 삽입 가능
; 사실 프로시저에 대한 설명, 스택에 대한 설명도 하지 않았지만
; 이해하시지 못한다면 그냥 출력루틴이라고 생각하시면 됩니다!.

OUTPUT    PROC      NEAR
                MOV       AH,40H              ;출력을 위한 40H 인터럽트 속성 설정
                MOV       BX,01                ;표준 출력을 위한 화면 파일 핸들
                MOV       CX,1                 ;1글자 출력

                PUSHA
                LEA         DX,CHAR1         ;출력을 원하는 변수의 주소값 가져오기
                INT          21H                  ;21H 인터럽트 발생 (문자열 출력)
                POPA
                LEA         DX,CHAR2         ;출력을 원하는 변수의 주소값 가져오기
                INT          21H                  ;21H 인터럽트 발생 (문자열 출력)
                RET
OUTPUT   ENDP
; -----------------------------------------------------------------------
                END        MAIN                 ;END OF PROGRAM