CMP AL,'A'
JE ENDCODE
CMP AL,'+'
JE BASEPOINTER
CMP AL,'-'
JE BASEPOINTER
CMP AL,'/'
JE BASEPOINTER
CMP AL,'*'
JE BASEPOINTER
CMP AL,'='
JE BASEPOINTER2 ;연산자 찾기
CMP AL,0Dh
JE RESULT
PUSH AX ;스텍이 저장
INC CX ;몇자리 숫자인지 판단하기위함
JMP INPUT
RESULT:
MOV DX,[BP-4] ;연산자를 DX로 이동
CMP DX,'+'
JE ADDS
ADDS:;더하기
MOV AX,VALUE_A
MOV DX,VALUE_B
MOV AH,00h
MOV DH,00h
ADD AL,DL
MOV DX,0000h
PUSH DX
ITOA: ;이함수는
MOV CL,10 ; 10을 넣고
DIV CL ;AL을 10으로 나누는데 나눈 나머지는 AH에 저장이 된다.
;몫은 AL에 저장
MOV DL,AH ;나머지를 넣고
ADD DL,30h ;아스키화 시키고
MOV DH,00h
MOV AH,00h ;나머지값 저장소 초기화
PUSH DX ;스텍에 저장
CMP AL,00H;몫이 없으면
JE PRINT_A
JMP ITOA
PRINT_A:
MOV DL,0Ah
MOV AH,02h
INT 21h
MOV DL,0Dh
MOV AH,02h
INT 21h;;개행한뒤
PRINT_AA:
POP DX;아까 나머지를 저장한것을 하나씩 빼온다.
CMP DL,00h;나오는게 없으면
JE ENDCODE;종료
MOV AH,02h
INT 21h;있으면 출력
JMP PRINT_AA
BASEPOINTER:
MOV [BP-4],AL ;찾은 연산자는 BP에 저장
JMP STACK_POP1
BASEPOINTER2:
MOV [BP-8],AL ;=는 다음BP에 저장
JMP STACK_POP2
STACK_POP2:
CMP CX,2 ;두자리 숫자이면
JE DOUBLE_VALUE_B
POP AX ;한자리 숫자이면
MOV AH,00h;
AND AL,0Fh;정수화 시키고
MOV VALUE_B,AX ;데이타 세그먼트에 저장
MOV CX,0 ;자릿수 초기화
JMP INPUT
DOUBLE_VALUE_B:
POP AX ;두자리 숫자이면 일의 자리를 불러오고
MOV DX,AX ;저장
POP AX ;십의 자리를 불러오고
MOV AH,00h
MOV DH,00h
AND AL,0Fh ;정수화시킴
AND DL,0Fh ;정수화시킴
MOV CH,00h
MOV CL,10 ;10을 넣고
MUL CL ;10의 자리 숫자와 10을 곱함
ADD AL,DL ;그리고 1의 자리 숫자와 더함
MOV VALUE_B,AX ;정수화가 된 값을 저장
MOV CX,0 ;자릿수 초기화
JMP INPUT
STACK_POP1:
CMP CX,2 ;두자리 숫자이면
JE DOUBLE_VALUE_A
POP AX ;한자리 숫자이면
MOV AH,00h;
AND AL,0Fh
MOV VALUE_A,AX ;데이타 세그먼트에 저장
MOV CX,0 ;자릿수 초기화
JMP INPUT
DOUBLE_VALUE_A:
POP AX
MOV DX,AX
POP AX
MOV AH,00h
MOV DH,00h
AND AL,0Fh
AND DL,0Fh
MOV CH,00h
MOV CL,0Ah
MUL CL