我正在尝试使用emu8086.inc库打印除法的剩余部分,但余下的部分在运行程序时显示ascii值。我应该写什么来准确打印剩余部分?
.MODEL SMALL
.STACK 100h
.DATA
.CODE
MAIN PROC
INCLUDE 'emu8086.inc'
DEFINE_SCAN_NUM ;DEFINE NUMBER FOR SCAN
DEFINE_PRINT_NUM ;DFINE NUMBER TO PRINT
DEFINE_PRINT_NUM_UNS ;DEFINE UNSIGNED NUMBER TO PRINT
CALL SCAN_NUM ;FIRST INPUT
MOV AX,CX ;SHIFT THE DATA TO AX
PUTC 0AH ;NEW LINE
PUTC 0DH
;SECOND INPUT
CALL SCAN_NUM
;AX/CX = AX
IDIV CX
;NEW LINE
PRINTN ''
CALL PRINT_NUM ;PRINT QUOTIENT
MOV AH,2
MOV DL,AL
INT 21H
;SECOND INPUT CALL SCAN_NUM ;AX/CX = AX IDIV CX
评论错了! IDIV CX
将由DX:AX
对CX
进行签名划分。
你仍然需要设置DX
。
CWD
是一个指令,将AX
注册表签署到DX:AX
。如果AX
为正,则DX
将为0,如果AX
为负,则DX
将为-1。这一步是IDIV CX
指令正常工作的必要条件!它将返回AX
中的商和DX
中的余数。
;SECOND INPUT
CALL SCAN_NUM ;CX has the second input
CWD ;AX has the first input, sign extending it to DX:AX
IDIV CX ;DX:AX / CX
CALL PRINT_NUM ;PRINT QUOTIENT
这确实打印了AX
的商。该部门的其余部分在DX
。只需将其移动到AX
并调用相同的打印宏程序来打印带符号的数字。
CALL PRINT_NUM ;PRINT QUOTIENT
mov ax, dx
CALL PRINT_NUM ;PRINT REMAINDER
MOV AH,2 MOV DL,AL INT 21H
此代码在您的程序中没有任何用处。