MASM x86 添加两个整数

Posted

技术标签:

【中文标题】MASM x86 添加两个整数【英文标题】:MASM x86 Adding two ints 【发布时间】:2014-04-08 01:43:56 【问题描述】:

我正在编写一个简单的程序,它从用户那里获取 3 个整数并进行以下数学运算:

前 2 个数字的总和 第二个和第三个数字的区别 三个数字的乘积 商(整数)和第一个和第三个数字的余数

应该有输出给用户显示计算。例如,如果用户输入 10、9 和 8,它应该在第一次计算时显示:

10 + 9 = 19

我现在正在尝试求和。我能够计算它,但我似乎无意中覆盖了 number_1 和 number_2 以等于我添加它们后的总和,所以我的输出是:

19 + 19 = 19

谁能帮我解决我在这里做错的事情?这是我做组装的第一周,所以如果答案非常明显或其他什么,我很抱歉......

; Sum of first two numbers
mov     eax, number_1
mov     ebx, number_2
add     eax, ebx
mov     sum, eax

; Print results
mov     edx, OFFSET number_1
call    WriteDec
mov     edx, OFFSET op_plus
call    WriteString
mov     edx, OFFSET number_2
call    WriteDec
mov     edx, OFFSET op_equ
call    WriteString
mov     edx, OFFSET sum
call    WriteDec

编辑:问题似乎在于教科书作者的 WriteDec 例程,该例程位于我们教授让我们包含和使用的库中。

【问题讨论】:

你在哪里声明number_1_copynumber_2_copy 我的错误,我尝试了一些东西并忘记删除该部分。它应该只是“number_1”和“number_2”。已编辑帖子。 您可以发布您的WriteDec 例程吗?看起来这可能会发出EAX 中的值,而不是EDX 指向的值。只是猜测。 你是对的,Mike W. 在调用 WriteDec 之前添加一行 mov EAX, sum 给了我正确的输出。该例程是由我的教科书的作者编写的,我实际上并没有看到它,因为它在一个单独的库中。我会和教授谈谈为什么会这样。 【参考方案1】:

由于库的 WriteDec 例程似乎只从 EAX 中提取,因此在每次尝试写入数字之前都需要额外的一行。

mov eax, (variable-name)
move edx, OFFSET (variable-name)

这已经解决了问题。

【讨论】:

以上是关于MASM x86 添加两个整数的主要内容,如果未能解决你的问题,请参考以下文章

masm x86汇编 资源混合编译

masm x86汇编 资源混合编译

运行循环时 MASM x86 访问冲突

使用 TYPE 指令汇编 MASM x86

尝试添加两个整数但向量错误

程序集 x86:如何计算 32 位长整数中的设置位数