如何使用库emu8086.inc打印除法的剩余部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用库emu8086.inc打印除法的剩余部分相关的知识,希望对你有一定的参考价值。

我正在尝试使用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:AXCX进行签名划分。 你仍然需要设置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

此代码在您的程序中没有任何用处。

以上是关于如何使用库emu8086.inc打印除法的剩余部分的主要内容,如果未能解决你的问题,请参考以下文章

两个数组的和,每个数组 n 个字节

如何在 C 语言中使用带有 REGS 结构的 int86 函数读取和显示文件数据,用于 8086

emu8086的软件简介

无法解析剩余部分:来自 'sobj.id==obj.id' 的 '==obj.id'

严格使用乘法和除法在Java中将二进制数转换为十进制数

如何将画布部分从 Ghostscript 打印结果裁剪为 PNG