다 하셨다면,, ㅈㅅ합니다만 어셈좀 알려주세용.
DSEG SEGMENT
INPUT1 DB 0, 0 ; 첫번째 입력
INPUT2 DB 0, 0 ; 두번째 입력
YEONSANJA DB ? ; 연산자
OUTPUT DB 0, 0, 0 ; 출력
TEMP DB 0, 0; 임시
DSEG ENDS
SSEG SEGMENT STACK
DW 100H DUP(?)
SSEG ENDS
CSEG SEGMENT 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
START:
MOV AX, DSEG
MOV DS, AX ; 형식적 데이터segment 주소지정
MOV AH, 1
INT 21H ; 입력
MOV BX, OFFSET YEONSANJA
MOV [BX], AL
;----------------------------------------
MOV AH, 1
INT 21H ; 입력2 10의자리수
MOV BX, OFFSET INPUT1
MOV [BX], AL
;--------------------
MOV AH, 1
INT 21H
MOV [BX+1], AL ;입력2 1의자리수
;---------------------------------------
MOV AH, 1
INT 21H; 입력3 10의자리수
MOV BX, OFFSET INPUT2
MOV [BX], AL
;--------------------
MOV AH, 1
INT 21H; 입력3 1의자리수
MOV [BX+1], AL
;--------------------------------------------------
;여기부터 처음 인풋1의 16*1의자리 의처리
;--------------------------------------------------
MOV CL, 0FH ;16진수니까 곱하기 16해주려고 넣어줌
MOV BX, OFFSET INPUT1
MOV AL, [BX] ;INPUT1의 10의자리를 불러옴
CMP AL, '10' ;혹시 10이상이니?
JAE EXPHEX1 ;10이상이면 점프, 아니면 계속 순차실행
SUB AL, '0'
;우리가 넣은 수는 아스키코드로 저장되어서
;아스키코드표를 참조하여 0(48)을 빼줘서 원래수를 찾음
MUL CL ; 16의1승의 자리로 가기위해 16곱해줌
MOV DH, AL
RETURN1:MOV AL, [BX+1]
CMP AL, '10'
JA EXPHEX2
SUB AL, '0' ;16의 0승의 자리수는 빼주기만하고
ADD DH, AL ;넣어줌<완전한 수가 되었음>
;인풋2의 16*1의자리 의처리
;------------------------------------------------
RETURN2:
MOV CL, 0FH ;16진수니까 곱하기 16해주려고 넣어줌
MOV BX, OFFSET INPUT2
MOV AL, [BX]
CMP AL, '10'
JAE EXPHEX3
SUB AL, '0'
;우리가 넣은 수는 아스키코드로 저장되어서
;아스키코드표를 참조하여 0(48)을 빼줘서 원래수를 찾음
MUL CL ; 16의1승의 자리로 가기위해 16곱해줌
MOV DH, AL
RETURN3:MOV AL, [BX+1]
CMP AL, '10'
JAE EXPHEX4
SUB AL, '0' ;16의 0승의 자리수는 빼주기만하고
ADD DL, AL ;넣어줌<완전한 수가 되었음>
RETURN4:
;연산자를 구분하기
CMP YEONSANJA, '+'
JE PLUS
CMP YEONSANJA, '-'
JE MINUS
CMP YEONSANJA, '*'
JE MULTI
CMP YEONSANJA, '/'
JE DIVIDE
CMP YEONSANJA, '%'
JE NAMOJI
;우리는 데이터를 DH, DL에 넣어두었고
;연산자는 주소<레이블>를 불러와서 비교를 해준다.
;--------------------두수의 처리 점프문의 레이블--------------------
EXPHEX1:
SUB AL, '7' ; 10이상의 수는 아스키코드 7을 빼줌
MUL CL ; 16의1승의 자리로 가기위해 16곱해줌
MOV DH, AL
JMP RETURN1
EXPHEX2:
SUB AL, '7' ; 10이상의 수는 아스키코드 7을 빼줌
ADD DH, AL
JMP RETURN2
EXPHEX3:
SUB AL, '7' ; 10이상의 수는 아스키코드 7을 빼줌
MUL CL ; 16의1승의 자리로 가기위해 16곱해줌
MOV DL, AL
JMP RETURN3
EXPHEX4:
SUB AL, '7' ; 10이상의 수는 아스키코드 7을 빼줌
ADD DL, AL
JMP RETURN4
;-------------------------------------------------------------------
PLUS :
MOV AL, DH
MOV DH, 0
MOV AH, 0
ADD AX, DX
JMP GOGO
MINUS:
MOV AL, DH
MOV DH, 0
MOV AH, 0
SUB AX, DX
JMP GOGO
MULTI:
MOV AL, DH
MOV DH, O
MOV AH, 0
MUL DX
JMP GOGO
DIVIDE:
MOV AX, DH
MOV DH, 0
DIV DX
JMP GOGO
NAMOJI:
MOV AL,DH
MOV DH, 0
MOV AH, 0
MOV EX, AX
DIV DX
MUL DX
SUB EX, AX
MOV AX, EX
JMP GOGO
GOGO:
MOV BX, OFFSET OUTPUT
MOV DX, 0H
MOV CX, 0FH
DIV CX
JMP PRINT
PRINT:
MOV BX, OFFSET OUTPUT1
MOV DL, [BX+3]
MOV AH, 2
INT 21H
MOV DL, [BX+2]
MOV AH, 2
INT 21H
MOV DL, [BX+1]
MOV AH, 2
INT 21H
MOV DL, [BX]
MOV AH, 2
INT 21H
JMP EXIT
EXIT:
MOV DL, 0AH
MOV AH,2
INT 21H
MOV DL, 0DH
MOV AH,2
INT 21H
MOV AX, 4C00H
INT 21H
CSEG ENDS
END START
잘려고 누음 졸림
히잉(애교를부린다)
어직 프로시져 짜는거 안배웠나보네
근데 질문이 뭔지도 모르겠음 잔다 내일 보세