用编码表示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]指示一个字单元
* 适于数组、字符串、表格的处理
以下几种方式感觉均为简单相加: