intel汇编笔记

另一篇汇编学习笔记AT&T Assembly on Linux  (linux下)

mov ax,bx     bx到ax


读数据过程:cpu通过地址线发送地址a,控制线向存储器发送读命令,存储器对地址a进行读,通过数据线返回。

写数据过程:与读同理。

上述是cpu执行数据读写命令的过程,我们只需让cpu执行mov ax,[3],cpu便会自动执行上述过程。


 对于汇编程序员来说,CPU中主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改写各种寄存器中的值来实现对CPU的控制。 


 绝大部分机器指令都是进行数据处理的指令,指令大致分为3类,读取、写入、运算。

在机器指令这一层,并不关心数据的值是多少,只关心在指令执行前数据位置。

指令执行前,数据可能的位置有:CPU内部、内存、端口。

三种表达方式:立即数、寄存器、段地址+偏移地址。


 8086CPU寻址,为了以16位结构,达到20位寻址能力,采用 物理地址 = 段地址X16+偏移地址方式。



 



 程序获得所需空间方法有两种,一是加载程序的时候为程序分配,再就是程序执行时向系统申请。


 and指令,逻辑与指令:mov al,01100011B   and al,01011001B

 or指令,逻辑或指令


 ASCII


 [bx + idata]指明内存单元方式与C语言对比:

多种寻址方式:


 只要在[..]中使用寄存器bp,段地址就在ss中。


寻址方式: 


 操作符X ptr可以指明要操作内存长度。word ptr或byte ptr。

例如 mov word ptr ds:[0], 1


 div指令

mul乘法指令


 dup操作符


 转移指令分类:


 操作符offset:


 jcxz指令:

if((cx) == 0) { jmp short 标号}


 call和ret

由此可见call和ret是相对应的,一个是将目前ip压栈并跳转,一个是出栈并跳转。


用于比较的条件转移指令:


 对端口的读写不能用mov,push,pop等内存读写指令。端口的读写指令只有两条:in和out,分别用于从端口读数据和往端口写数据。


 dword ptr []

dword   双字 就是四个字节
ptr     pointer缩写 即指针
[]里的数据是一个地址值,这个地址指向一个双字型数据
比如mov eax, dword ptr [12345678]  把内存地址12345678中的双字型(32位)数据赋给eax


待续。

原文地址:https://www.cnblogs.com/rixiang/p/7047912.html