我试图找到一个 1896 数组的 crusor 的位置(成为 2D 中的整个控制台,79 * 24)。为此,我将位置除以 79。
MOV AX, [Y-16H]
DEC AX
MOV BX, 79
DIV BX
MOV Z, DL
ADD Z, DH
MOV DL, Z
MOV Z, AL
ADD Z, AH
MOV DH, Z
我收到溢出错误。你能告诉我我做错了什么吗?也许建议一个解决方案?
我试图找到一个 1896 数组的 crusor 的位置(成为 2D 中的整个控制台,79 * 24)。为此,我将位置除以 79。
MOV AX, [Y-16H]
DEC AX
MOV BX, 79
DIV BX
MOV Z, DL
ADD Z, DH
MOV DL, Z
MOV Z, AL
ADD Z, AH
MOV DH, Z
我收到溢出错误。你能告诉我我做错了什么吗?也许建议一个解决方案?
DIV BX
DX
将由(high word) 和AX
(low word)组成的 32 位数字除以BX
. 因此,您需要在除法之前清除DX
(例如)以避免溢出。XOR DX,DX
顺便问一下,你确定你不想除以 80 吗?我从来没有听说过 79 列的控制台,虽然我不是这方面的专家
正如迈克尔所说,您需要在除法之前清除 DX 寄存器。
也就是说,如果您对速度感兴趣(汇编编码的通常原因),使用乘法和右移将除以 79 转换为等效运算要快得多:(x * 53093) >> 22
.
这是有效的,因为1/79th
大约等于53093 / (2**22)
。