这里有任何汇编专业人士吗?经历了几个小时..无法弄清楚为什么我会溢出和东西。任何想法为什么会崩溃?
我的变数:
a DB 2
b DB 1
c DW 4
x DB -1, 2, 3
y DW kiek dup(0AAh)
我的功能
f3:
MOV bx, c
MOV ax, 2 ; ax = 2
IMUL bx ; ax = 2c
JO kl1 ; mul too big to store
MOV dx,ax ; dx = 2c
MOV al, a ; al = a
CBW
SUB dx, ax ; dx = 2c - a
MOV bx,dx ; bx = 2c - a
MOV cl, x[si]
CBW
MOV al,a ; al = a
IMUL cx ; al = a*x
CBW
JO kl1 ; mul too big to store
MOV dx, c ; dx = c
ADD ax,dx ; ax = a*x+c
MOV cx,ax ; cx = a*x+c
MOV dx,bx ; ax = 2c-a
MOV bx, cx
CMP bx, 0
JE kl2 ; divided by 0
MOV ax, dx
IDIV bx
JMP re
对不起,如果这是一个愚蠢的错误,就再也无法处理了,谢谢!
一切顺利,我在寄存器A中得到6,在寄存器B得到2,当它尝试IDIV时,它说: 划分错误 - 溢出。 手动处理此错误, 在中断向量表中更改INT 0的地址。
它显示了这一行(我甚至没有在我的代码上):
BIOS DI
INT 00h
IRET ; this is where i get the error