微机汇编知识点总结
(2011-09-27 11:50:43)
标签:
微机汇编知识点总结教育 |
|
处理器内部寄存器
一、总线接口部件
① 4个段地址寄存器(CS、DS、ES、SS)
DS
ES
这些段寄存器的内容与有效的地址一起,用于确定内存的物理地址。通常用CS、DS、ES以及SS用于确定代码段、数据段、附加段以及堆栈段的基地址。
② 16位的指令指针寄存器IP(Instruction Pointer)
指令指针寄存器IP,指示代码段中指令的偏移地址。
它与代码段寄存器CS联用,确定下一条指令的物理地址。
计算机通过CS : IP寄存器来控制指令序列的执行流程。
IP寄存器是一个专用寄存器。
③ 20位的地址加法器
④
二、执行部件
① 4个16位通用寄存器,即AX、BX、CX、DX;
它们还可以分成高8位和低8位两个独立的寄存器:
AH
AL
对其中某8位的操作,并不影响另外对应8位的数据
每个寄存器又有它们各自的专用目的:
1.
2.
3.
4.
② 4个专用寄存器,即
Ø
SP,BP指针寄存器用于寻址内存堆栈内的数据。
SP为堆栈指针寄存器(Stack Pointer),指示栈顶的偏移地址。
SP不能再用于其他目的,具有专用目的。
BP为基址指针寄存器(Base Pointer),表示数据在堆栈段中的基地址。
SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址。
Ø
变址寄存器常用于存储器寻址时提供地址,串操作类指令中,SI和DI具有特别的功能
③ 标志寄存器FR(Flag register)标志(Flag)用于反映指令执行结果或控制指令执行形式,8086处理器的各种标志形成了一个16位的标志寄存器FLAGS
标志的分类:分为状态标志和控制标志
6个状态标志:用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它的状态。共有6个状态标志位:CF
3个控制标志:可由程序根据需要用指令设置,用于控制处理器执行指令的方式
DF
1)
2)
若算术运算时D3位(低半字节)有进位或借位,则AF=1;否则AF=0这个标志主要由处理器内部使用,用于十进制算术运算调整指令中,用户一般不必关心。
3)
4)
有符号数据用最高有效位表示数据的符号所以,最高有效位就是符号标志的状态
5)
当运算结果的低8位(最低字节)中“1”的个数为偶数时,PF = 1;否则PF =
0
6)
溢出的判断: 只有当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出,因为,此时的运算结果显然不正确。其他情况下,则不会产生溢出
溢出和进位的区别: 溢出标志OF和进位标志CF是两个意义不同的标志。进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确。溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。
溢出和进位的对比:
例1:49H + 6DH=B6H
无符号数运算:
有符号数运算:
例2:BBH + 6AH=(1)25H
无符号数运算:
有符号数运算:
7)
设置DF=0,存储器地址自动增加;
8)
用于控制外部可屏蔽中断是否可以被处理器响应:
设置IF=1,则允许中断;
9)
设置TF=0,处理器正常工作;
处理器在每条指令执行结束时,便产生一个编号为1的内部中断,利用单步中断可对程序进行逐条指令的调试,这种逐条指令调试程序的方法就是单步调试
④
8086的引脚信号
(1)最小模式( MN/MX接+5V)
① AD15~AD0,地址/数据总线
② A19/S6~A16/S3,地址/状态总线
③ BHE/ S7,高8位数据允许/状态线
④ MN/MX,最小/最大模式控制信号,输入
⑤ RD,读信号
⑥ WR,写信号
⑦ M/IO,存储器/输入输出控制信号
⑧ALE,地址锁存允许信号
⑨READY(Ready),准备就绪信号
⑩INTR,可屏蔽中断请求信号
⑪INTA,中断响应信号
⑫NMI,非屏蔽中断请求信号
⑬RESET,系统复位信号
⑭DEN,数据允许信号
⑮DT/R,数据发送/接收控制信号
⑯HOLD,总线保持请求信号输入
⑰HLDA,总线保持响应信号
⑱TEST,测试信号
⑲CLK,时钟输入信号
⑳VCC(+5V),GND
(2)最大模式( MN/MX接地)
①QS1/QS0,指令队列状态信号。
②S2、S1、S0 ,总线周期状态信号。
③LOCK ,总线封锁信号。
④RQ/GT1和RQ/GT0 ,总线请求信号输入/总线请求信号允许输出。
物理地址和逻辑地址
对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH。分段后在用户编程时,采用逻辑地址(即段首地址加段内偏移地址),其形式为:段基地址 : 段内偏移地址
寻址方式
与数据有关的寻址方式:以 MOV 指令为例
立即寻址
寄存器寻址
直接寻址
寄存器间接寻址
寄存器相对寻址
基址变址寻址
相对基址变址寻址
(1)
指令格式: MOV
只能用于SRC字段(源操作数字段):MOV
SRC 和 DST 的字长必须一致MOV
(2)
例: MOV
字节寄存器只有
SRC 和 DST 的字长必须一致: MOV
CS 不能用 MOV
指令改变
(3)
注意:隐含的段为数据段 DS
可使用段跨越前缀 |
例:MOV
存放段基地址的段寄存器有如下三种可能:
1)
2)
3)
若以SI/DI/BX间接寻址,则段基地址在数据段寄存器DS中(左图)
若以寄存器BP间接寻址,则段基地址在堆栈段寄存器SS中(右图)
(5)
例: MOV MOV 其中COUNT为16位位移量的符号地址 |
例:MOV
若使用的基址寄存器是BX,则默认段寄存器为DS;
若使用的基址寄存器是BP,则默认段寄存器为SS;
同样可以使用段超越,如:MOV AX,ES:[BX][SI]
(7) 相对基址变址寻址:段偏移地址是由一个基址寄存器(BX/BP)、一个变址寄存器(SI/DI)的内容和一个8位/16位位移量相加得到
例MOV AX, MASK [BX] [SI]
段 寄 存 器 的 使 用 规 定
8086的指令系统
一、数据传送指令
1、通用数据传送指令:MOV;
2、累加器专用传送指令: IN;OUT;XLAT 这组指令只限于累加器AX,AL。
3、地址传送指令:LEA
;
4、标志寄存器传送指令:
5、类型转换指令:CBW;
01.通用数据传送指令
传送指令:
执行操作:
注意: DST、SRC 不能同时为段寄存器
DST、SRC 不能同时为存储器寻址
进栈指令:
执行操作:
出栈指令:
执行操作:
堆栈:‘先进后出’的存储区,段地址存放在SS中,
注意:
不能用立即寻址方式
交换指令:
执行操作:
注意: 不影响标志位
02.累加器专用传送指令(只限于使用累加器AX或AL)
输入指令
长格式:
执行操作:(AL)
短格式:
执行操作:(AL)
输出指令
长格式:
执行操作:( PORT )
短格式:
执行操作:( (DX) )
注意:
例1:
例2:
例3:
例4:
换码指令:XLAT
执行操作:(AL)
例:MOV
注意:
03.地址传送指令
有效地址送寄存器指令(Load Effective
Address):
执行操作:
指针送寄存器和DS指令(Load DS with pointer):LDS
执行操作:
指针送寄存器和ES指令(Load ES with pointer):LES
执行操作:
04.标志寄存器传送指令(影响标准位)
标志送AH指令:
执行操作:
AH送标志寄存器指令:
执行操作:
标志进栈指令:
执行操作:
标志出栈指令:
执行操作:
05.类型转换指令
CBW
执行操作: 若(AL)的最高有效位为0,则(AH)= 00H
CWD
执行操作:若(AX)的最高有效位为0,则(DX)= 0000H
若(AX)的最高有效位为1,则(DX)= FFFFH
例:(AX) = BA45H
注意:
*无操作数指令
二、算术指令
1、加法指令:ADD;
2、减法指令:SUB;
3、乘法指令:MUL;
4、除法指令:DIV;
1、加法指令(注意:除INC指令不影响CF标志外,均对条件标志位有影响)
加法指令:
执行操作:
带进位加法指令:
执行操作:
加1指令:
执行操作:
加法指令对条件标志位的影响
CF位表示无符号数相加时的进位(溢出)。
例:
假设: (DX) =
0002H
分析下列指令序列的执行结果:
ADD
ADC
2、减法指令(注意:
减法指令:
执行操作:
带借位减法指令: SBB
执行操作:
减1指令:
执行操作:
求补指令:
执行操作:
比较指令:
执行操作:
减法指令对条件标志位(CF/OF/ZF/SF)的影响:
CF 位表示 无符号数
减法的借位(溢出)
例3.48:SUB [SI+14H],0136H
假设指令执行前,(DS)=3000H,(SI)=0040H,
03.乘法指令
无符号数乘法指令:
带符号数乘法指令:
执行操作:字节操作数
注意:
*
04.除法指令
无符号数除法指令:
带符号数除法指令:
执行操作: 字节操作
例3.56:设X , Y , Z , V 均为16位带符号数,分别存放于相应的单元中,
试编制程序计算:( V - ( X*Y + Z – 540 )
MOV
IMUL
MOV
MOV
MOV
CWD
ADD
ADC
SUB
SBB
MOV
CWD
SUB
SBB
IDIV
三、逻辑指令
1、逻辑运算指令:AND; OR; NOT; XOR; TEST
逻辑非指令:NOT
执行操作:
逻辑与指令:AND
执行操作:
逻辑或指令:OR
执行操作:
异或指令:
执行操作:
测试指令:
执行操作:
只做与操作,不保存结果
2、移位指令:SHL; SAL; SHR; SAR; ROL; ROR; RCL;RCR;
一般移位指令
逻辑左移(SHift logical Left ):SHL
逻辑右移(SHift logical Right):SHR
算术左移(Shift Arithmetic Left):SAL
算术右移(Shift Arithmetic Right):SAR
循环移位指令
循环左移(ROtate Left):ROL
循环右移(ROtate Right):ROR
带进位循环左移(Rotate Left through Carry):RCL
带进位循环右移:RCR
移位指令需要注意的地方:
OPR可用除立即数以外的任何寻址方式
CNT=1,SHL
CNT>1,MOV
SHL
条件标志位:
CNT=1时,最高有效位的值发生变化
移位指令:
循环移位指令:
四、串操作指令
串操作指令通常需要与串重复前缀联合使用,串重复前缀有:
REP;
串重复前缀REP (通常与MOVS、STOS、LODS等联用) 重复串操作,直到计数器(CX)=0为止
1、串传送指令 MOVS
格式:
MOVSB
MOVSW
例:MOVS
执行操作:
字操作: (SI)←(SI)±2,
方向标志
REP MOVS:将数据段中的整串数据传送到附加段中。源串(数据段)→ 目的串(附加段)
执行 REP MOVS 之前,应先做好:
(1) 源串首地址(末地址)→ SI
(2) 目的串首地址(末地址)→ DI
(3) 串长度 → CX
(4) 建立方向标志( 使用CLD 使 DF=0 或 STD 使 DF=1 )
2、存入串指令 STOS
格式:STOS
STOSB
STOSW
执行操作:
例:把附加段中mess2的 10 个字节缓冲区置为 20H
3、从串取指令 LODS
格式:LODS
执行操作:
注意:
串比较指令CMPS和串扫描指令SCAS通常与
串重复前缀REPE/REPZ/REPNE/REPNZ联用。
串重复前缀REPE/REPZ ,重复串操作,直到
计数器(CX)=0或标志位ZF=0为止。
4、串比较指令 CMPS
格式:
执行操作: (1)
根据比较结果置条件标志位:相等
ZF=1
5、串扫描指令 SCAS
格式:
SCAS
执行操作:
串比较和串扫描指令常用于: 从字符串中查找,字符比较两个字符串
五、控制转移指令
1、无条件转移指令
作用:转移到指令的地址去执行从该地址开始的指令。分段内和段间转移两种。前者只需改变 IP,而后者不仅要改变IP,还要改变CS。
段内直接短转移:JMP
执行操作:(IP) ← (IP) + 8位位移量
段内直接近转移:JMP
执行操作:(IP) ← (IP) + 16位位移量
段内间接转移:
执行操作:
段间直接远转移:JMP
执行操作:(IP) ← OPR
的段内偏移地址
段间间接转移:
执行操作:
2、条件转移指令
作用:当条件满足时,跳转到相应位置执行指令。共有30条条件转移指令,可分为四类:
(1)
格式
JZ(JE)
JS
JO
JP
JC
(2)
*
(3)
*
(4)
3、循环指令
循环指令:LOOP
为零或相等时循环指令:LOOPZ/LOOPE
不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR 循环判断条件:ZF=0 且 (CX) ¹ 0
4、子程序调用和返回指令
汇编语言中采用子程序结构,它相当于高级语言中的过程(如C的函数/C++的类)。将某些具有独立功能的部分程序编为独立的子模块,称为子程序。
子程序调用包括段内调用和段间调用两种。
段内直接近调用:CALL
执行操作: (SP) ← (SP) –
2
段内间接近调用:CALL
执行操作: (SP) ← (SP) -
2
段间直接远调用:CALL
执行操作:(SP) ← (SP) –
2
段间间接远调用:CALL
执行操作: (SP) ← (SP) –
2
( (SP)+1,(SP) ) ←
(IP)
子程序返回指令RET
段内近返回:RET
执行操作: (IP) ← ( (SP)+1,(SP) )
段间远返回:RET
执行操作: (IP) ← ( (SP)+1,(SP)
)
5、中断与中断返回指令
中断:当系统运行或程序运行遇到某些特殊情况,要求计算机能自动执行一组程序来处理(例如等待用户输入/显示到外设等),这就是中断。中断包括外部中断和内部中断两种。
中断操作,计算机同样需要保存现场,即IP、CS等。IBP-PC的中断是采用中断向量形式的。
中断向量:中断例行程序的入口地址(包括IP和CS)。中断向量存放于中断向量表中。
中断指令:
执行操作: (SP) ← (SP) –
2
(IP) ←
(TYPE*4)
注意:*
*
从中断返回指令:IRET
执行操作:(IP) ← ( (SP)+1,(SP) )
注意:IRET 指令执行完,标志位由堆栈中取出的值确定
六、处理机控制与杂项操作指令
1、标志处理指令CLC;STC;CMC; CLD; STD; CLI;
STI
•
•
•
•
•
•
•
注意:
2、其他处理机控制与杂项操作指令NOP;
NOP
HLT
WAIT
ESC
LOCK
注意: