【问题标题】:Simple assembly program arithmetic error简单的汇编程序算术错误
【发布时间】:2014-11-12 12:55:12
【问题描述】:

我尝试编写一个程序,将 16 位数字“broj”的数字相加,并将结果存储在名为“rez”的位置。

这是我的代码:

SECTION .data

broj DW 25326

SECTION .bss

rez RESW 1

SECTION .text
global _start
_start:

MOV CX, 10
MOV AX,[broj]
skok: 
DIV CX --> result in AX, remainder in DX
ADD [rez],DX
MOV BX,AX -->move the result of the last division
JNZ skok

MOV EAX,1
MOV EBX,0
int 80h

这产生了一个“算术错误”,但是,我的汇编调试技能非常有限。 我在 Mint 下使用了 kdbg。

【问题讨论】:

    标签: nasm


    【解决方案1】:

    DIV CX 会将DX:AX 中的32 位值除以CX。所以你需要在DIV(例如XOR DX,DX)之前清除DX,以避免得到大于16位的商。

    【讨论】:

    • 我应该更仔细地阅读指令集! :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多