음...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
DATASEGMENT_USE:  ;   데이타 세그먼트의 사용--DATASEGMENT_USE IN
 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
 CALL SPACE    ;   개행 프로시져 호출
 MOV DL,'*'    ;   별을 출력
 MOV AH,02h
 INT 21h
 CALL SPACE
 
 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
ENDCODE:;--------------------------------------------ENDCODE IN MAIN
 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      ;   곱하기
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
ENDCODE:  ;---------------------------------------ENDCODE IN REMUL
 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
DATA SEGMENT PARA 'data';################################DATA START
DAN DB 1 DUP(?)   ;   단을 저장
DIVSU DB 10     ;   나누기위한 10 저장
DATA ENDS;################################################DATA ENDS
 END
Posted by Nvdark
,