回 帖 发 新 帖 刷新版面

主题:麻烦大家帮我看看那错了

我根据    r=m%n;
            while(r!=0){m=n;n=r;r=m%n}
 来求两个数的最大公因子:   
.model small
.stack
.data
 a db 10
 b db 15

.code
.startup
 mov al,0
 mov bl,0
 cmp a,b

 jl L1           ;如果a>b则,跳向L1
 mov al,a        ;a>b,开始计算最大公因子
 mov bl,b
 div bl
Lop1:             ;计算,用到循环
 mov al,bl
 mov bl,dl
 div bl
 mov dl,ah
 mov cx,ah
 loop Lop1         ;(a>b)计算完毕  
 jmp L2 
         ;如果计算完毕,无条件转向L2
L1:              ;b>a,  开始计算最大公因子
 mov al,b
 mov bl,a
 div bl
Lop2:             ;计算,用到循环
 mov al,bl
 mov bl,dl
 div bl
 mov dl,ah
 mov cx,ah
 loop Lop2         ;(b>a)计算完毕

L2:
 mov ah,2
 int 21h
.exit 0
end
      错误提示:n1.asm(11): error a2070: invalid instruction  oprands
               n1.asm(22): error a2070: invalid instruction  oprands
               n1.asm(35): error a2070: invalid instruction  oprands
麻烦懂的人给我找找错,谢谢!!

回复列表 (共3个回复)

沙发

哈哈,
   错误解决了, 但是 结果不对,  提示:divide overflow
肯定是除法运算有问题, 但是我不懂,  麻烦高手们 帮提示下嘛
  谢谢!!~!!

板凳

原因是除法的商大于al,为了避免商大于al,虽然是八位除法,你也应该把它扩展到16位除法,用xor dx, dx把dx清零,把被除数扩展到dx,除数用其它寄存器,例如si、di等,然后div si,就可以避免这个问题了。

3 楼

楼上大哥,
   我学汇编不久,  你说方法我怎么改都不成功哦,有好多错.
 能不能给帮我修改下嘛

我来回复

您尚未登录,请登录后再回复。点此登录或注册