当前位置: 首页 > 知识库问答 >
问题:

为什么mov-dx,0修复了这个除法例程?

郗俊能
2023-03-14

一个简单的循环,用于找到最大除数,即根的整数,在本例中,在345三角形中,除数为5

mov ax,3                        
mul ax                          
push ax                         
mov ax,4                        
mul ax                          
pop bx                          
add ax,bx                       
push ax    ;save 25 decimal for repeated loops                        
mov bx,1                        
mov bp,sp                       

agin                            
mov dx,0      ;fixed problem                  
mov ax,[bp]   ;25 decimal                  
inc bx        ;starts at 2                  
div bx                          
cmp bx,ax                       
jb agin                         

out

然而,当程序从2变为3时,奇怪的事情发生了,我得到了hex555D而不是8(8*3)

将mov-dx,0放入修复状态并恢复正常

我不知道为什么,旗帜没有改变

有人知道为什么吗?这是签名/未签名的问题吗?

共有1个答案

秦诚
2023-03-14

DIV指令将数字DX: AX除以操作数。

DX是大写字母。AX是较低的单词。因此,如果要将AX除以BX,则需要将DX归零。

 类似资料:
  • 我正在处理一个赋值,以获取用户提供的整数并确定它是否是素数。我编写的程序运行良好,我只是不完全明白为什么我需要在每个周期将edx设置为0。

  • 它将把牌阵的一半分配给玩家和计算机(玩家得到前半部分,计算机得到后半部分)。现在这是先洗牌,所以是的,这似乎是公平的。 我得到的出界错误是这一行:

  • 我一直看到有人声称MOV指令可以在x86中免费,因为寄存器重命名。 对我来说,我无法在一个测试用例中验证这一点。我尝试的每个测试用例都会揭穿它。 例如,这是我正在使用Visual C编译的代码: 这将为循环生成以下汇编代码(可以随意生成;显然不需要Visual C): 现在,我多次运行该程序,在删除MOV指令时,我观察到相当一致的2%差异: 那是什么呢?为什么电影不是“免费的”?这个循环对于x86

  • 我需要将12小时的时间转换为24小时的格式。 我现在已经把12小时的时间硬编码了,以使事情更简单。 我的逻辑:输入sting 07:05:45PM提取最后2个字符。如果AM check为前两个字符,则为12。。如果是,则将其设置为00,否则按原样输出,如果PM检查前两位数字是否为12。。如果是,请保持原样,如果不是,则在前2位加上12 总线错误:10是我运行代码得到的

  • 在这个打印从1到10000000的所有数字、Haskell版本和C版本的简单程序中,为什么Haskell版本如此缓慢,以及哪些命令有助于学习如何提高Haskell程序的性能? 下面是一份报告,包含重现我激动人心的事件所需的所有细节,制作报告时会打印出来源,包括Makefile的来源: