Assembly 04. 변수 Swap 프로그램
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