어셈블리어 질문

글쓴이: 익명 사용자 / 작성시간: 월, 2020/11/30 - 5:03오후
TITLE CAL PAGE 60,132 CURSOR MACRO VALUE1,VALUE2 MOV AH,02 MOV BH,00 MOV DH,VALUE1 MOV DL,VALUE2 INT 10H ENDM ;---------------------------------------- PRINTMSG MACRO MESSAGE MOV AH,09 MOV DX,OFFSET MESSAGE INT 21H ENDM ;---------------------------------------- INPUTOPR MACRO BUFFER MOV AH,0AH MOV DX,OFFSET BUFFER INT 21H ENDM ;---------------------------------------- INCWORD MACRO BUF_COUNT,BUF_AREA LOCAL JMP1 MOV BX,OFFSET BUF_AREA CMP BUF_COUNT,2 JE JMP1 MOV AH,[BX] MOV [BX],BYTE PTR'0' MOV [BX]+1,AH MOV [BX]+2,BYTE PTR'$' JMP1: MOV BUF_COUNT,2 ENDM CONVERT_HEX MACRO INDEX MOV AH,BYTE PTR<ol> </ol> MOV AL,AH AND AH,0FH MOV CL,4 SHR AL,CL MOV BL,AH MOV BH,10 MUL BH ADD AL,BL ENDM STSEG SEGMENT DB 64 DUP(?) STSEG ENDS ;----------------------------------------- DTSEG SEGMENT MESSAGE1 DB 'INPUT A:$' MESSAGE3 DB 'INPUT B:$' MESSAGE4 DB 'THE ANSWER IS$' NEGATIVE DB '-$' ;----------------------------------------- DATA_BUF1 LABEL BYTE MAX_SIZE1 DB 3 BUF_COUNT1 DB ? BUF_AREA1 DB 3 DUP(0) DATA_BUF2 LABEL BYTE MAX_SIZE2 DB 3 BUF_COUNT2 DB ? BUF_AREA2 DB 3 DUP(0) DATA_BCD1 DB 1 DUP(?) DATA_BCD2 DB 1 DUP(?) RESULT_BCD DB 5 DUP(?) RESULT_ASC DB 10 DUP(?) OPER DB 00H DTSEG ENDS ;-------------------------------------------- CDSEG SEGMENT MAIN PROC FAR ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG MOV AX,DTSEG MOV DS,AX MOV AX,0600H MOV BH,07 MOV CX,0000 MOV DX,184FH INT 10H CURSOR 10,15 PRINTMSG MESSAGE1 INPUTOPR DATA_BUF1 INCWORD BUF_COUNT1,BUF_AREA1 CURSOR 11,15 PRINTMSG MESSAGE3 INPUTOPR DATA_BUF2 INCWORD BUF_COUNT2,BUF_AREA2 MOV BX,OFFSET BUF_AREA1 MOV DI,OFFSET DATA_BCD1 CALL CONV_BCD MOV BX,OFFSET BUF_AREA2 MOV DI,OFFSET DATA_BCD2 CALL CONV_BCD ;--------------------------------------------- SELECT1: CALL BCD_ADD MOV SI,OFFSET RESULT_BCD MOV DI,OFFSET RESULT_ASC MOV CX,02 CALL CONV_ASC JMP PRINTGO SELECT2: CALL BCD_SUB MOV SI,OFFSET RESULT_BCD MOV DI,OFFSET RESULT_ASC MOV CX,01 CALL CONV_ASC JMP PRINTGO SELECT3: CALL ASC_MUL JMP PRINTGO SELECT4: CALL ASC_DIV CURSOR 15,15 JMP PRINTGO PRINTGO: PRINTMSG RESULT_ASC CURSOR 30,00 MOV AH,4CH INT 21H MAIN ENDP ;------------------------------------------- ASC_DIV PROC MOV BX,OFFSET DATA_BCD1 MOV DI,OFFSET DATA_BCD2 MOV SI,OFFSET RESULT_ASC CONVERT_HEX DI MOV DX,AX MOV BX,OFFSET DATA_BCD1 CONVERT_HEX BX SUB AH,AH DIV DL MOV SI,OFFSET RESULT_ASC MOV DL,AH MOV CX,02 BACK2: MOV BL,10 SUB AH,AH DIV BL MOV [SI]+1,AH DEC SI LOOP BACK2 MOV SI,OFFSET RESULT_ASC+2 MOV AL,DL MOV CX,02 BACK3: MOV BL,10 SUB AH,AH DIV BL MOV [SI]+1,AH DEC SI LOOP BACK3 MOV SI,OFFSET RESULT_ASC OR WORD PTR[SI],3030H INC SI INC SI OR WORD PTR[SI],3030H INC SI INC SI MOV [SI],BYTE PTR'$' RET ASC_DIV ENDP ASC_MUL PROC MOV BX,OFFSET DATA_BCD1 MOV DI,OFFSET DATA_BCD2 MOV SI,OFFSET RESULT_ASC CONVERT_HEX BX MOV DL,AL CONVERT_HEX DI MUL DL MOV CX,04 BACK1: SUB DX,DX MOV BX,000AH DIV BX MOV [SI]+3,DL DEC SI LOOP BACK1 MOV SI,OFFSET RESULT_ASC OR WORD PTR[SI],3030H INC SI INC SI OR WORD PTR[SI],3030H INC SI INC SI MOV [SI],BYTE PTR'$' RET ASC_MUL ENDP ;-------------------------------------- BCD_ADD PROC MOV BX,OFFSET DATA_BCD1 MOV DI,OFFSET DATA_BCD2 MOV SI,OFFSET RESULT_BCD CLC MOV AL,[BX] ADC AL,[DI] DAA MOV [SI]+1,AL ADC BYTE PTR[SI],00 RET BCD_ADD ENDP ;-------------------------------------- BCD_SUB PROC MOV BX,OFFSET DATA_BCD1 MOV DI,OFFSET DATA_BCD2 MOV SI,OFFSET RESULT_BCD CLC MOV AL,[BX] SBB AL,[DI] DAS MOV [SI],AL MOV AL,[BX] CMP AL,[DI] JAE JMP4 CURSOR 14,29 PRINTMSG NEGATIVE MOV DH,99H SUB DH,[SI] MOV DH,99H SUB DH,[SI] MOV [SI],DH INC BYTE PTR[SI] JMP4: RET BCD_SUB ENDP ;------------------------------------- CONV_BCD PROC AGAIN1: MOV AX,[BX] XCHG AH,AL AND AX,0F0FH MOV CL,4 SHL AH,CL OR AL,AH MOV [DI],AL RET CONV_BCD ENDP ;------------------------------------- CONV_ASC PROC AGAIN2: MOV AL,[SI] MOV AH,AL AND AX,0F00FH PUSH CX MOV CL,04 SHR AH,CL OR AX,3030H XCHG AH,AL MOV [DI],AX INC SI ADD DI,2 POP CX LOOP AGAIN2 MOV [DI],BYTE PTR'$' RET CONV_ASC ENDP ;------------------------------------- CDSEG ENDS END MAIN
안녕하세요 어셈블리언어 엄청난 초보자입니다...
이 코드는 어셈블리어를 이용한 calc코드인데요..
두 수를 입력받아, 그 두 수를 +한 값, -한 값, *한 값, /한 값, /했을 때 나오는 나머지 값을 출력하고
싶습니다.. 그런데 +값만 출력되고 출력되는 장소도 입력받은 두 수 아래로 나오게 하고싶은데..
그게 안되네요.. 도와주세요
Forums:
댓글 달기