음...2년전쯤에 짠거긴하지만...
도움될 분들이 있을까 해서 ㅎㄷㄷ
PAGE 60,80
TITLE GUGUDAN
STACK SEGMENT PARA STACK 'stack';########################STACK START
STACK ENDS;###############################################STACK ENDS
CODE SEGMENT PARA 'code';#################################CODE START
ASSUME DS:DATA,CS:CODE,SS:STACK
;----------------------------MAIN-----------------------------------
MAIN PROC FAR
ASSUME DS:DATA,CS:CODE,SS:STACK
;----------------------------MAIN-----------------------------------
MAIN PROC FAR
DATASEGMENT_USE: ; 데이타 세그먼트의 사용--DATASEGMENT_USE IN
MOV AX,DATA
MOV DS,AX
MOV AX,DATA
MOV DS,AX
STACT_PROG: ; 스텍 프롤로그 과정------STACT_PROG IN MAIN
PUSH BP
MOV SP,BP
SUB SP,20
DAN_SU_SETTING: ; 수의 입력-----------DAN_SU_SETTING IN MAIN
MOV AH,01h
INT 21h
CMP AL,'A' ; A이면 종료
JE ENDCODE
MOV DAN,AL ; 입력받은 수를 단에 저장
MOV BL,31h
CALL DOWN ; 개행하는 프로시져 호출
MOV CX,9 ; 카운터 9로 초기화
GUGUDAN:;--------------------------------------------GUGUDAN IN MAIN
MOV DL,DAN ; 단을 출력
MOV AH,02h
INT 21h
PUSH BP
MOV SP,BP
SUB SP,20
DAN_SU_SETTING: ; 수의 입력-----------DAN_SU_SETTING IN MAIN
MOV AH,01h
INT 21h
CMP AL,'A' ; A이면 종료
JE ENDCODE
MOV DAN,AL ; 입력받은 수를 단에 저장
MOV BL,31h
CALL DOWN ; 개행하는 프로시져 호출
MOV CX,9 ; 카운터 9로 초기화
GUGUDAN:;--------------------------------------------GUGUDAN IN MAIN
MOV DL,DAN ; 단을 출력
MOV AH,02h
INT 21h
CALL SPACE ; 개행 프로시져 호출
MOV DL,'*' ; 별을 출력
MOV AH,02h
INT 21h
MOV AH,02h
INT 21h
CALL SPACE
MOV DL,BL ; 수를 출력
MOV AH,02h
INT 21h
MOV DL,BL ; 수를 출력
MOV AH,02h
INT 21h
CALL SPACE
MOV DL,'=' ; =을 출력
MOV AH,02h
INT 21h
CALL SPACE
CALL REMUL ; 결과값 프로시져 호출
CALL DOWN
ADD BL,1 ; 수를 1 증가
LOOP GUGUDAN ; 카운터 만큼 루프
JMP DAN_SU_SETTING
MOV DL,'=' ; =을 출력
MOV AH,02h
INT 21h
CALL SPACE
CALL REMUL ; 결과값 프로시져 호출
CALL DOWN
ADD BL,1 ; 수를 1 증가
LOOP GUGUDAN ; 카운터 만큼 루프
JMP DAN_SU_SETTING
ENDCODE:;--------------------------------------------ENDCODE IN MAIN
MOV AH,4Ch
INT 21h
MOV AH,4Ch
INT 21h
MAIN ENDP
;------------------------------MAIN END----------------------------
;-------------------------------SPACE------------------------------
SPACE PROC NEAR ; 한칸띄우는 프로시져
MOV DL,' '
MOV AH,02h
INT 21h
RET
SPACE ENDP
;----------------------------SPACE END-----------------------------
;------------------------------REMUL-------------------------------
REMUL PROC NEAR
MOV DX,0000h ; 초기화
PUSH DX ; 마지막 pop를 알기위해 저장
MOV DL,DAN ; 단을 DL에 저장
MOV AL,BL ; 수를 AL에 저장
SUB DL,30h ; 정수화
SUB AL,30h ; 정수화
MUL DL ; 곱하기
;------------------------------MAIN END----------------------------
;-------------------------------SPACE------------------------------
SPACE PROC NEAR ; 한칸띄우는 프로시져
MOV DL,' '
MOV AH,02h
INT 21h
RET
SPACE ENDP
;----------------------------SPACE END-----------------------------
;------------------------------REMUL-------------------------------
REMUL PROC NEAR
MOV DX,0000h ; 초기화
PUSH DX ; 마지막 pop를 알기위해 저장
MOV DL,DAN ; 단을 DL에 저장
MOV AL,BL ; 수를 AL에 저장
SUB DL,30h ; 정수화
SUB AL,30h ; 정수화
MUL DL ; 곱하기
ITOA: ;-----------------------------------------------ITOA IN REMUL
DIV DIVSU ; 10으로 AL을 나눔
MOV DL,AH ; 나머지를 DL로 이동
ADD DL,30h ; 정수형을 아스키화시킴
MOV DH,00h ; 상위 8비트 초기화
MOV AH,00h ; 상위 8비트 초기화
PUSH DX ; 스텍에 저장
CMP AL,00h ; 비교하여 더이상 나눌것이 있냐?
JE PRINT_SU ; 없으면 출력문으로
JMP ITOA ; 있으면 다시 ITOA 레이블로
PRINT_SU:;-----------------------------------------PRINT_SU IN REMUL
POP DX; ; 저장된것을 가져옴
CMP DL,00h ; 비교,더이상 출력할것이 있냐?
JE ENDCODE ; 없으면 종료
MOV AH,02h ; 있으면 출력
INT 21h
JMP PRINT_SU
DIV DIVSU ; 10으로 AL을 나눔
MOV DL,AH ; 나머지를 DL로 이동
ADD DL,30h ; 정수형을 아스키화시킴
MOV DH,00h ; 상위 8비트 초기화
MOV AH,00h ; 상위 8비트 초기화
PUSH DX ; 스텍에 저장
CMP AL,00h ; 비교하여 더이상 나눌것이 있냐?
JE PRINT_SU ; 없으면 출력문으로
JMP ITOA ; 있으면 다시 ITOA 레이블로
PRINT_SU:;-----------------------------------------PRINT_SU IN REMUL
POP DX; ; 저장된것을 가져옴
CMP DL,00h ; 비교,더이상 출력할것이 있냐?
JE ENDCODE ; 없으면 종료
MOV AH,02h ; 있으면 출력
INT 21h
JMP PRINT_SU
ENDCODE: ;---------------------------------------ENDCODE IN REMUL
RET
REMUL ENDP
;------------------------------REMUL END---------------------------
;--------------------------------DOWN------------------------------
DOWN PROC NEAR ; 줄바꿈 프로시져
MOV DL,0Ah
MOV AH,02h
INT 21h
RET
REMUL ENDP
;------------------------------REMUL END---------------------------
;--------------------------------DOWN------------------------------
DOWN PROC NEAR ; 줄바꿈 프로시져
MOV DL,0Ah
MOV AH,02h
INT 21h
MOV DL,0Dh
MOV AH,02h
INT 21h
RET
DOWN ENDP
;-------------------------------DOWN END---------------------------
CODE ENDS;################################################CODE ENDS
MOV AH,02h
INT 21h
RET
DOWN ENDP
;-------------------------------DOWN END---------------------------
CODE ENDS;################################################CODE ENDS
DATA SEGMENT PARA 'data';################################DATA START
DAN DB 1 DUP(?) ; 단을 저장
DIVSU DB 10 ; 나누기위한 10 저장
DIVSU DB 10 ; 나누기위한 10 저장
DATA ENDS;################################################DATA ENDS
END
END