디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[|] emu8086 구구단 역순 출력은 어떻게 해야 됨?

ㅇㅇ(222.105) 2022.11.10 20:31:13
조회 85 추천 0 댓글 1
														

.MODEL SMALL

.CODE

ORG 100h


PROG:

    CALL MAIN        ;MAIN 프로시저 불러오기

    HLT              ;MAIN 프로시저가 끝나면 프로그램을 중단시킨다.


BLANK1 DB 'X$'       ;구구단 출력시에 x 출력을 담당하는 데이터영역입니다.

BLANK2 DB '=$'       ;구구단 출력시에 = 출력을 담당하는 데이터영역입니다. 

CRLF DB 0Dh,0Ah,'$'  ;캐리지리턴, 라인피드 (줄바꿈)를 담당하는 데이터영역입니다.

    

    

MAIN PROC NEAR       ;메인 프로시저 시작.


MOV AL,2             ;구구단의 시작은 2 x

MOV BL,1             ;1 이니까 사용할 레지스터에 데이터를 수록합니다.


MOV CX,0             ;구구단 출력에 앞서서 cx레지스터를 청소합니다.


TOP:


PUSH AX              ;AX값을 잠시 스택에 저장합니다. (복사되어 스택에 저장되므로 레지스터값은 변함없음.)


                     ; (X * Y =) 출력하기.


MOV AH,02            ;한 문자 출력하는 기능번호 AH에 수록.


MOV DL,AL            ;DL레지스터에 AL레지스터 값을 전달합니다. (이 값은 구구단 X * Y 중 X에 해당합니다.)

ADD DL,30h           ;30h를 더해서 아스키코드화 합니다. (2 = 32h)

INT 21h              ;실행 (X가 출력됨.)


LEA DX,BLANK1        ;BLANK1 데이터영역 주소를 DX레지스터에 저장합니다. (X * Y 중에서 *에 해당함.)

MOV AH,09            ;문자열을 출력하는 기능번호 AH에 수록.

INT 21h              ;실행 (X(*) 출력됨.)


MOV AH,02            ;다시 한 문자를 출력해야 하므로 AH 레지스터에 2 수록.


MOV DL,BL            ;DL레지스터에 BL레지스터값을 전달합니다. (이 값은 구구단 X * Y중 Y에 해당합니다.)

ADD DL,30h           ;30h를 더해서 아스키코드화 합니다. (1 = 31h)

INT 21h              ;실행 (Y이 출력됨.)


LEA DX,BLANK2        ;DX 레지스터에 BLANK2데이터영역의 주소를 저장합니다.

MOV AH,09            ;문자열을 출력하는 기능번호 수록

INT 21h              ;실행 ( = 가 출력됨.)


POP AX               ;저장해 두었던 값을 스택에서 AX레지스터로 가져옵니다.

PUSH AX              ;진수변환 하면서 AX레지스터를 사용해야 하므로 다시한번 스택에 AX레지스터값을 저장합니다.


MUL BL               ; AL레지스터를 BL레지스터에 있는 값으로 곱셈(X*Y)합니다. 결과는 AX레지스터에 리턴됩니다.

INC BL               ; BL레지스터값을 늘립니다. (X*Y중에서 Y값 늘림.)


PUSH BX              ; 진수변환때 BX레지스터를 사용해야 하므로, BX레지스터값을(Y값을) 스택에 저장합니다.

MOV CX,0             ; 진수변환 앞서 청소하기



                     ;16진수 10진수로 변환한다음 스택에 저장하고 스택에 저장한걸 꺼내어 출력하기.


PUSHDECA:

    MOV DX,0         ;진수변환 앞서 DX값 청소

    MOV BX,10        ;10진수 변환은 10으로 나누어 나머지를 나열하는것이므로 10 수록.

    

    DIV BX           ;AX레지스터를 BX레지스터값으로 나눕니다. 

    PUSH DX          ;DX레지스터값(나머지)를 스택에 저장합니다.

    INC CX           ;CX값을 1 증가시킵니다. (출력할때 자릿수 세는걸로 쓰는용도임.)

    CMP AX,0         ;AX레지스터(몫)이 0인가?

    JNE PUSHDECA     ;아니라면 진수변환 계속.

    

POPDECA:

    POP DX           ;스택에서 DX레지스터로 데이터를 가져옵니다. (결과적으로 나머지가 역순으로 꺼내어짐.)

    ADD DX,30h       ;DX레지스터에 30h를 더하여 아스키코드화함.

    MOV AH,02        ;한 글자를 출력하는 기능번호 준비

    INT 21h          ;실행

    

    DEC CX           ;CX값을 1 감소시킵니다.

    CMP CX,0         ;CX값이 0인가? (모든 자릿수가 출력되었는지?)

    JNE POPDECA      ;아니라면 출력을 계속한다.


                     ;여기서 X*Y=XY 가 완전히 출력되었음.

    

    MOV DL,' '        ;DL에 공백(아스키코드로 20h) 수록.

    MOV AH,02         ;한 글자를 출력하는 기능번호 준비

    INT 21h           ;실행

        

POP BX                ;스택에 보전해두었던 데이터(Y)를 BX에 그대로 가져옴.



CMP BL,10             ;BX가 10인가?

JE SEC                ;10이라면 SEC로 보냄.(구구단은 9까지이므로 여기서 끊음.)


POP AX                ;스택에 보전해두었던 데이터(X)를 AX에 그대로 가져옴.

JMP TOP               ;구구단 출력을 계속한다.


SEC:

    POP AX            ;스택에 보전해두었던 데이터(X)를 AX에 그대로 가져옴.

    MOV BL,1          ;BL(Y값)을 1로 초기화한다. 

    INC AL            ;AL(X값)에 1을 더한다.

    CMP AL,10         ;그런데 AL이 10인가?

    JE ENND           ;AL이 10이라면 끝으로 보냄.

    

    PUSH AX           ;AX값(X값)을 스택에 보존. 줄바꿀때 AX레지스터 사용해야함.


    LEA DX,CRLF       ;줄바꿈실행

    MOV AH,9

    INT 21h


    POP AX            ;AX값(X값) 다시 가져옴.

    

    JMP TOP

    

ENND:

RET                   ;MAIN PROC에서 벗어나서 메인루틴으로 복귀한다.


MAIN ENDP

END PROG


이걸 역순으로 출력 하고 싶은데 다 뒤집어야 되나?

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2864 설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
5936 | 리플렛 무한 reconnecting 츠쿠요미에 걸러버렸는데 ㅇㅇ갤로그로 이동합니다. 22.11.28 47 0
5935 | 도움좀 가능할까요? [7] ㅇㅇ(122.34) 22.11.28 123 0
5934 | 반복문 배열 문제인데 알려주실분 ㅠ [1] ㅇㅇ(121.160) 22.11.28 115 0
5933 | 코드섞는 것 좀 도와주십쇼....부탁드립니다..ㅠ [11] ㅇㅇ(58.77) 22.11.27 132 0
5932 | modern c 이거 어떰? [3] ㅇㅇ(14.38) 22.11.26 210 0
5931 | 코린이 제발 도와주세요 [18] ㅇㅇ(115.138) 22.11.25 291 1
5930 | 이거 무슨 차이때문에 작동이 안되는건가요? [3] ㅇㅇ(59.15) 22.11.23 131 0
5929 | 함수배우기 [3] 배우는문어갤로그로 이동합니다. 22.11.22 115 0
5928 | GODO C-K-D갤로그로 이동합니다. 22.11.22 57 0
5927 | 왜 안될까요.... [3] ㅇㅇ(211.251) 22.11.20 110 0
5926 | 질문)진자 미쳐버리겠어요 [7] ㅇㅇ(1.234) 22.11.20 165 0
5925 | Win32 mfc winform [7] 혼공족(220.88) 22.11.20 173 0
5924 | C++ 제발 ㅠㅠ 프린이입니다 [8] ㅇㅇ(121.163) 22.11.20 243 1
5921 | 프로그래밍 어떻게 공부하셨나요 [6] ㅇㅇ(49.175) 22.11.15 312 0
5919 | c) 아니 이거 외않되??????? [5] ㅇㅇ(118.128) 22.11.14 302 0
5918 | ㅈ같은 C# [1] ㅇㅇ갤로그로 이동합니다. 22.11.14 133 0
5917 | c++ 린이가 const int& 질문있습니다 행님들 [2] ㅇㅇ(183.107) 22.11.14 168 0
5915 | C++ bool형은 왜 true/false라고 적는 법을 만들었을까 [8] ㅇㅇ(223.39) 22.11.12 205 0
5914 | 금수저라 가족 부양해야한다 이런거는 없는 사람인데 [6] ㅇㅇ(118.235) 22.11.12 214 0
5913 | 왕초보...c에서 while문 탈출 질문... [5] ㅇㅇ(110.34) 22.11.11 232 0
5912 | 매크로 잘 아는 사람 있음? (gcc) [2] ㅇㅇ(118.42) 22.11.10 137 0
| emu8086 구구단 역순 출력은 어떻게 해야 됨? [1] ㅇㅇ(222.105) 22.11.10 85 0
5910 정보 경남 IT EXPO IT기업 개발자 온/오프라인 현장 면접자 모집 안내 KJC(222.232) 22.11.10 77 0
5909 | rand() 질문 [5] oo(175.121) 22.11.09 156 0
5908 | 어셈블리어도 질문 가능?? 구구단인데 헬프좀 [2] ㅇㅇ(222.105) 22.11.09 190 0
5907 | 2차원 포인터 배열 문제질문점.. [2] ㅇㅇ(211.198) 22.11.09 99 0
5906 | do while문 for문으로 바꾸는법좀 [2] ㅇㅇ(223.39) 22.11.08 124 0
5905 | 이거 왜 실행이 안돼? [2] ㅇㅇ(59.16) 22.11.07 110 0
5904 | 비쥬얼 오류 [5] ㅇㅇ(223.38) 22.11.06 125 0
5903 | vscode c언어 개발환경 구축관련 질문 [1] ㅇㅇ(180.68) 22.11.06 132 0
5900 | 컴파일 오류 [1] 오렌지(211.204) 22.11.03 123 0
5899 | 이거 왜안됨 [4] dd(175.198) 22.11.03 134 0
5898 | 커널용어 좀 도와주세요 [5] ㅇㅇ(223.62) 22.11.03 162 0
5896 | 코딩 공부하는데 cpu 중요한가요?? [26] ㅇㅇ(116.37) 22.11.02 360 0
5894 정보 경남 IT EXPO 온/오프라인 IT기업 채용면접 참여자 모집 안내 KJC(222.232) 22.11.02 45 0
5893 | if문 안에다 do while문 가능함? [4] ㅇㅇ(175.199) 22.10.30 156 0
5890 | C언어 버블정렬 질문이요... [4] ㅇㅇ(112.169) 22.10.27 202 0
5889 | C++공부중인데요 [4] ㅇㅇ(106.101) 22.10.26 262 0
5887 | 아나 6ㅣ발 메모리 두번해제한줄 모르고 ^ㅣ발 2시간동안 고민했따 [2] ㅇㅇ(1.247) 22.10.25 136 0
5886 | C++ 프로그래밍 문제 질문좀... [6] ㅇㅇ(49.142) 22.10.25 228 0
5884 | C++) 이중 포인터로 변수값 제어하기 질문 [18] ㅇㅇ(49.142) 22.10.22 214 1
5881 | while 반복문 도와주세요 급해요 ㅜㅜ [4] ㅇㅇ(39.7) 22.10.20 185 0
5879 | 이거 중간에 왜 변질됨? [9] ㅇㅇ(121.174) 22.10.18 332 1
5876 | 컨트롤키나 shift키 입력 받을려면 getasynckey뿐인가요? [1] ㅇㅇ(121.133) 22.10.17 103 0
5875 | c언어 질문 있어요 도와주세요 [10] ㅇㅇ(61.103) 22.10.16 276 0
5873 | 주딱 오랜만애 왓다애요 ㅇㅅㅇ [13] 고양이발갤로그로 이동합니다. 22.10.15 279 2
5872 | c언어 뉴비 질문있어요 [6] ㅇㅇ(203.228) 22.10.15 231 1
5871 | KO 파일 어케 봄? [1] ccdeefdre(119.197) 22.10.14 69 0
5870 | 혹시 c랑 c++ 코드 분석할만한 오픈소스 있음? [4] ㅇㅇ갤로그로 이동합니다. 22.10.14 189 0
5869 | 이런갤도있네 [5] ㅇㅇ(118.42) 22.10.14 142 3
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2