与汇编程序的一般混淆

时间:2010-04-10 10:39:24

标签: assembly

所以我看了一下x86汇编语言;所有的命令都很清楚,但是:我没有看到任何可以触发计算机内容的东西,如:访问RAM而不仅仅是CPU寄存器,从HDD读取等等。

  • 如何使用汇编程序超越CPU中的计算?

4 个答案:

答案 0 :(得分:5)

在x86汇编中,MOV指令用于从RAM获取数据并将其放入CPU的一个寄存器中,您可以在其中对其进行操作。 MOV指令也可以将数据写回RAM。要使用计算机上的设备,这是另一个故事。

设备使用所谓的中断,这是在设备需要您(CPU)注意时触发的事件。在你的代码中,你注册你的函数来处理它在触发时的中断。要从设备获取数据,您可以使用INOUT指令,这些指令通过数据总线移动数据。这样,您可以为设备提供说明,例如:从硬盘扇区X到Y 获取数据。然后硬盘旋转,获取一些数据并触发中断。您为该中断注册的代码必须处理它,获取数据并将其写入适当的RAM位置。大多数CPU和设备也支持DMA(Direct Memory Access),在这种情况下,您只需在RAM中指定设备必须写入数据的位置,然后在不中断CPU的情况下执行此操作。只有在设备完成后,它才会产生中断,并且汇编代码可以相应地做出响应。

答案 1 :(得分:2)

通常,您可以读取/写入内存映射设备,或使用特殊I / O指令读取/写入I / O端口。内存映射设备是在CPU和实际硬件之间共享的内存 - 访问它会使硬件做一些事情。

答案 2 :(得分:1)

您可以使用MOV等指令访问RAM。访问磁盘等的API取决于您使用的操作系统 - 在Linux上,查看System call界面。在Windows上,查看this tutorial - 只需跳过介绍性内容。

另一件事是call C libraries from your assembly code

您可能感兴趣的项目是使用16位ASM编写的教育操作系统。它可以进行文件系统访问,而且还需要更多 - MikeOS,但要注意的是,由于各种原因,大多数事情都不适用于在现代操作系统下运行的程序。

答案 3 :(得分:0)

您为内存映射IO或x86的特殊IO空间(movin)编写访问RAM(out和其他具有内存操作数的代码)。

艺术正在知道写什么或从什么地址和什么时候读取。