所以我看了一下x86汇编语言;所有的命令都很清楚,但是:我没有看到任何可以触发计算机内容的东西,如:访问RAM而不仅仅是CPU寄存器,从HDD读取等等。
答案 0 :(得分:5)
在x86汇编中,MOV
指令用于从RAM获取数据并将其放入CPU的一个寄存器中,您可以在其中对其进行操作。 MOV
指令也可以将数据写回RAM。要使用计算机上的设备,这是另一个故事。
设备使用所谓的中断,这是在设备需要您(CPU)注意时触发的事件。在你的代码中,你注册你的函数来处理它在触发时的中断。要从设备获取数据,您可以使用IN
和OUT
指令,这些指令通过数据总线移动数据。这样,您可以为设备提供说明,例如:从硬盘扇区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空间(mov
,in
)编写访问RAM(out
和其他具有内存操作数的代码)。
艺术正在知道写什么或从什么地址和什么时候读取。