彙編——輸入兩個0~99的數字然後以十六進位制和二進位制顯示他們的乘積
阿新 • • 發佈:2021-01-03
使用的是AH的01H,儲存的單個字元
DATAS SEGMENT ;此處輸入資料段程式碼 STR1 DB 0AH,'INPUT NUMBER(0~99):',0DH,0AH,'$' STR2 DB 0AH,'INPUT AN INVALID NUMBER,INPUT AGAIN!',0DH,0AH,'$' COUNT DB 0B PRODUCT DB 1D DATAS ENDS STACKS SEGMENT ;此處輸入堆疊段程式碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此處輸入程式碼段程式碼 INPUT: ;顯示提示 MOV AH,09H MOV DX,OFFSET STR1 INT 21H ;輸入,存到AL MOV AH,01H INT 21H ;將輸入的第一個數放到BH MOV BH,AL ;輸入第二個數 MOV AH,01H INT 21H ;第二個數放到BL MOV BL,AL ;判斷 JUDGE: ;判斷是不是數字 CMP BH,30H JB NOPE CMP BH,39H JA NOPE CMP BL,0DH JE CHAN ;跳轉處理回車鍵即單個數字 CMP BL,30H JB NOPE CMP BL,39H JA NOPE CONTI: ;count++ INC COUNT MOV CL,10D SUB BH,48D SUB BL,48D MOV AL,BH MUL CL ADD AL,BL ;相乘,MUL立即數是不被允許的,且八位直接和AL相乘 MUL PRODUCT MOV PRODUCT,AL COMP: ;比較count CMP COUNT,10B ;count等於2跳出 JE EXIT ;否則繼續輸入 JMP INPUT CHAN: INC COUNT SUB BH,48D MOV AL,BH ;直接加BH MUL PRODUCT MOV PRODUCT,AL JMP COMP ;非法字元 NOPE: LEA DX,STR2 MOV AH,09H INT 21H JMP INPUT EXIT: ;把product給AL,將ax給bx MOV AL,PRODUCT MOV BX,AX ;換行 MOV AH,02H MOV DL,0AH INT 21H CALL RESULT16 MOV DL,0AH MOV AH,02H INT 21H CALL RESULT2 MOV AH,4CH INT 21H RESULT16 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;迴圈4次 MOV CX,4 NEXT: PUSH CX MOV CL,4 MOV DL,BH ;右移4次 SHR DL,CL ;清除標誌位 OR DL,30H CMP DL,39H JBE PRINT ADD DL,7 PRINT: MOV AH,02H INT 21H SHL BX,CL POP CX LOOP NEXT POP DX POP CX POP BX POP AX RET RESULT16 ENDP RESULT2 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,16 NEXT: PUSH CX MOV CL,7 MOV DL,BH SHR DL,CL AND DL,01H OR DL,30H MOV AH,02H INT 21H SHL BX,1 POP CX LOOP NEXT POP DX POP CX POP BX POP AX RET RESULT2 ENDP CODES ENDS END START