汇编——指令系统和寻址方式

用编码表示CPU的一个基本操作,称为一条指令。全部指令集称为指令系统。

助记符:传送指令:MOV  加法指令:ADD等

用助记符表示的指令称为汇编格式指令。

机器码:A0 00 20   MOV    AL , var1

操作码:指明CPU要执行什么样的操作。是一条指令必不可少的部分,用助记符表示。

按功能分为六类:数据传送 算术运算 逻辑运算 串操作 控制转移 处理机控制

-》操作数来源:

1.立即操作数:MOV AL,9

2.寄存器操作数:MOV AL,9

3.存储器操作数/内存操作数,指令中给出该内存单元的地址:

MOV AL,[2000H]

-》操作数个数:

1.无操作数(不需要操作数的指令,或操作数隐含在指令中。),eg:HLT,NOP,ALL

2.单操作数:指令中给出一个操作数。

1)有些操作只需要一个操作数:INC AL;  (AL)<-(AL)+1

2) 有些操作将另一个操作数隐含在指令中:MUL BL;(AX)<-(AL)*(BL)

3.双操作数:指令中给出两个操作数。 ADD AL BL;(AL)<-(AL)+(BL)

一个是目的操作数,一个是操作数。操作结果通常放在目的操作数中。

4.三操作数:指令 目的操作数 源操作数 立即数。操作后结果通常放在目的操作数中。(操作源操作数和立即数)

指令格式 操作码+寻址方式 操作数

》》寻址方式

1.立即数寻址(操作数在指令中给出)

*只能用于源操作数。  *源操作数和目的操作数字长一致。

MOV AL,5  适用于给寄存器赋初值。

2.寄存器寻址(操作数在指定的寄存器中)

MOV AL,BH(源和目的的字长一致,CS不能用MOV指令改变)。运算速度快

´MOV  CS, AX(错误!!!

3.存储器寻志

EA(有效地址)=基址+(变址*比例因子)+位移量

位移量:存放在指令中的一个8位、16位or32位的数,为地址。

基址:基础寄存器(数组or字符串首地址)。

变址:变址寄存器(指向数组中某个元素或字符串中某个字符)。

比例因子:386+,值可为1,2,4,8,与变址相乘用于访问元素长度为2、4、8字节的数组


寻址


段选择


存储器寻址中,储存单元的 逻辑地址段地址 与 段内偏移地址 共同组成,

当操作数的地址不在当前默认段,须加上段跨越前缀。

比如:mov ax,[0000]      程序默认使用的是ds:0000

使用了跨越段前缀就使用你指定的段寄存器

如:mov  ax,es:[0000]     程序就会使用es:0000


有三种情况不允许使用段跨越前缀:

1、串处理指令的目的串必须用ES

2、PUSH指令的目的和POP指令的源必须用SS段

3、指令必须存放在CS段中

段寄存器


3.直接寻址方式

注意给出的地址需要加上段地址。同时注意给出地址的方式有多种,比如下图中的value。


直接寻址

隐含的段为数据段 DS 除非用段跨越前缀改变:   MOV  AX, ES :[2000H]

*  使用变量时,要注意变量的属性

VALUE  DB  10 (下面要将字节变量转化为字变量)

MOV  AX,  WORD PTR  VALUE

*  适于处理单个变量


-》4.寄存器间接寻址方式:

1)EA在基址寄存器(BX/BP)或变址寄存器(SI/DI)中。

MOV  AX, [BX]                PA = 16d * (DS) + (BX)

MOV  AX, ES:[BX]          PA = 16d * (ES) + (BX)

MOV  AX, [BP]                PA = 16d * (SS) + (BP)

2) 不允许使用AX,CX,DX存放EA.

*  SRC 和 DST的字长一致 (即指示什么可以视前面而定)

MOV  DL, [BX]      ; [BX]指示一个字节单元

MOV  DX, [BX]      ; [BX]指示一个字单元

*  适于数组、字符串、表格的处理


寄存器相对寻址


以下几种方式感觉均为简单相加:


基址变址寻址方式


相对基址变址寻址方式


基址变址寻址


相对基址变址寻址

你可能感兴趣的:(汇编——指令系统和寻址方式)