我正在尝试使用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
答案 0 :(得分:1)
;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
此代码对您的程序没有任何帮助。