汇编代码添加两个整数

时间:2014-02-28 07:27:03

标签: cpu-architecture

我无法理解下面的汇编代码,它用于使用寄存器添加两个整数。这不是一个非常麻烦的问题,只是我缺乏学习语法的好参考。如果你可以逐行提供我的见解。我将非常感激。

MOV R1, #100
MOV R2, #100
MOV (R1), #50
ADD R2,(R1)

我得到的前两行将在给定的寄存器中存储数字100,我只是没有达到在接下来的两行中使用括号的目的。 这不是家庭作业,只是一个澄清背后理论的问题。

问题是执行指令后R1,R2的值是什么。

1 个答案:

答案 0 :(得分:-1)

我在另一个网站上找到了以下解释,这对我理解括号的使用有很大帮助。我相信这对其他人来说也是非常明确的,所以我将在下面发布:


让我们分析一下这个程序:

MOV AX,47104 MOV DS,AX MOV [3998],36 INT 32

...第一条指令MOV AX,47104告诉计算机将数字47104复制到位置AX。下一条指令MOV DS,AX告诉计算机将AX中的数字复制到位置DS。下一条指令MOV [3998],36告诉计算机将数字36放入存储单元3998.最后,INT 32通过返回操作系统退出程序。

在我们继续之前,我想解释一下这个程序是如何工作的。 CPU内部有许多位置,称为寄存器,可以存储一个数字。有些寄存器,例如AX,是通用的,不做任何特别的事情。其他寄存器(如DS)控制CPU的工作方式。

DS恰好是一个段寄存器,用于选择CPU可以写入的内存区域。在我们的程序中,我们将数字47104放入DS,告诉CPU访问视频卡上的内存。

我们的程序接下来要做的是将数字36放入视频卡内存的3998位置。由于36是美元符号的代码,而3998是屏幕右下角的内存位置,因此几微秒后屏幕上会出现一个美元符号。

最后,我们的程序告诉CPU执行所谓的中断。中断用于停止一个程序并在其位置执行另一个程序。在我们的例子中,我们需要中断32,它结束我们的程序并返回到MS-DOS,或者用于启动我们程序的任何其他程序。


我们可以从这个例子中看到,使用括号导致将值输入到内存位置,而不是输入到寄存器中。最近,视频卡读取该值以在屏幕上显示符号。

作者致信:http://www.swansontec.com/sprogram.html