第四章8086指令系统_第1页
第四章8086指令系统_第2页
第四章8086指令系统_第3页
第四章8086指令系统_第4页
第四章8086指令系统_第5页
已阅读5页,还剩362页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章

8086指令系统02二月2023中北大学《微机原理及接口技术》2主要内容指令系统的一般概念对操作数的寻址方式六大类指令的操作原理

操作码的格式及功能指令对操作数的要求指令对标志位的响应02二月2023中北大学《微机原理及接口技术》3第4章8086指令系统主要内容:4.18086的寻址方式4.28086的指令系统学时分配:8学时第一节

8086的寻址方式movax,12hcalldisplayJmp1234h02二月2023中北大学《微机原理及接口技术》54.18086的寻址方式主要内容:4.1.1寻址方式概述4.1.2寻址方式02二月2023中北大学《微机原理及接口技术》64.1.1寻址方式概述寻址方式:寻找操作数的方法目的:

寻找要执行的下一条指令的地址

寻找操作数的地址(一般指源操作数)02二月2023中北大学《微机原理及接口技术》7

1.指令和指令系统指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的。02二月2023中北大学《微机原理及接口技术》8指令有两种书写格式:机器指令和符号指令。机器指令——指令的二进制数代码形式硬件只能识别机器指令,用机器指令书写的程序可以直接运行符号指令——用规定的助记符和规定的书写格式书写的指令与机器指令一一对应,需要翻译成机器指令才能运行

1011000000000001MOVAL,1

1.指令和指令系统02二月2023中北大学《微机原理及接口技术》9程序是为解决某一问题而编写在一起的指令序列机器语言程序:由机器指令书写的程序汇编语言程序:由符号指令书写的程序高级语言程序:由高级语言书写的程序

1.指令和指令系统高级语言的基础是语句,而不是处理器的指令系统,汇编语言程序和高级语言程序必须先翻译成机器语言程序才能执行。这一翻译过程对汇编语言程序叫做汇编(assemble),对高级语言程序叫做编译(compilation)或解释(interpretation)02二月2023中北大学《微机原理及接口技术》10指令中应包含的信息:运算数据的来源(源操作数)运算结果保存到何处(目的操作数)执行的操作(操作码)例如:Z=X+Y目的操作数源操作数1操作源操作数2想一想:指令应该包括几个部分?2.指令格式02二月2023中北大学《微机原理及接口技术》11操作码操作数,操作数执行何种操作目的操作数源操作数参加操作的数据或数据存放的地址2.指令格式02二月2023中北大学《微机原理及接口技术》12指令举例:ADDAX,[SI+6]MOVAX,BX操作码操作数INC[BX]HLT02二月2023中北大学《微机原理及接口技术》132.指令格式指令的长度与操作码及操作数的多少和类型有关零操作数指令:操作码

单操作数指令:操作码操作数双操作数指令:操作码操作数1,操作数2源/目的操作数源/目的操作数源操作数注:两个操作数时,操作数类型要一致。如都是8位或都是16位。02二月2023中北大学《微机原理及接口技术》14部分8086/8088常用指令指令类型助记符数据传送数据传送MOV,PUSH/POP,XCHG等地址传送LEA,LDS,LES输入输出IN,OUT算术运算加法ADD,ADC,INC减法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV逻辑AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作MOVS,CMPS,SCAS,LODS,STOS控制转移JMP,JXX,LOOP,CALL/RET,INT/IRET02二月2023中北大学《微机原理及接口技术》153.指令中的操作数立即数:表征参加操作的数据本身存储器操作数:表征数据存放的地址寄存器操作数:表征数据存放在哪个寄存器中隐含操作数:表征数据隐含存放在某个寄存器中02二月2023中北大学《微机原理及接口技术》161)立即数操作数(常数)源操作数就是参加操作的数据本身,它们可以是8位或16位。例:MOVAX,1234HMOVBL,22H立即数可以是无符号或带符号数,其值应在允许范围内02二月2023中北大学《微机原理及接口技术》17取值范围如下表:立即数只能用作源操作数,如8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128~127)8000H-7FFFH(-32768~32767)MOV AX,0FA00H ;正确MOV 8000H,DX ;错误1)立即数操作数(常数)02二月2023中北大学《微机原理及接口技术》182)寄存器操作数表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOVAX,BXMOVDL,CH想一想:以下指令正确否?

MOVAX,BLMOVDL,CX02二月2023中北大学《微机原理及接口技术》19

放在8个通用寄存器或4个段寄存器中的操作数2)寄存器操作数16位

AX

AH

AL

16位BXBHBL16位CXCHCL16位DXDHDL02二月2023中北大学《微机原理及接口技术》20只能存放字操作数段寄存器存放当前操作数的段基地址不允许将立即数传送到段寄存器SIDIBPSPCSDSESSS2)寄存器操作数02二月2023中北大学《微机原理及接口技术》213)存储器操作数表示当前参加运算的数存放在存储器的某一个或某两个单元中表示形式:[]地址值或寄存器如:[1234H]表示操作数在地址为1234H的存储器单元中

[BX]表示操作数在以BX的内容为地址的存储器单元中指令例:MOVAX,[1234H]MOV[BX],SI02二月2023中北大学《微机原理及接口技术》22存储器操作数字节字双字124类型存储单元个数一般不允许两个操作数同时为存储器操作数3)存储器操作数02二月2023中北大学《微机原理及接口技术》23存储单元的物理地址=段基地址+偏移地址

若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。

存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。3)存储器操作数02二月2023中北大学《微机原理及接口技术》24例如,若(BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令的结果是一样的:

MOVAL,[2A00H] MOVAL,[BX+0A00H] MOVAL,[BX][SI] MOVAL,[DI]3)存储器操作数02二月2023中北大学《微机原理及接口技术》254.指令字长及执行速度指令字长:由操作码的长度、操作数地址长度、操作数个数决定;指令的字长影响指令的执行速度对不同的操作数,指令执行的时间不同:存储器立即数寄存器快!02二月2023中北大学《微机原理及接口技术》26一条指令的执行时间=∑取指令取操作数执行指令传送结果单位用时钟周期数表示结论:

1)尽量使用寄存器作为操作数

2)若有可能,用移位代替乘除法

3)尽量使用简单的寻址方式4.指令字长及执行速度02二月2023中北大学《微机原理及接口技术》275.指令按功能分为六大类(92种)1)数据传送类;2)算术运算类;3)逻辑运算和移位;4)串操作;5)控制转移类;6)处理器控制02二月2023中北大学《微机原理及接口技术》28类型:寻找操作数所在地址(与数据有关的寻址方式)寻找程序转移的目标地址(与转移地址有关的寻址方式)4.1.2寻址方式02二月2023中北大学《微机原理及接口技术》29在8086指令系统中,说明操作数所在地址的寻址方式可分为8种:

①立即寻址⑤寄存器相对寻址

②直接寻址⑥基址-变址寻址

③寄存器寻址⑦相对的基址-变址寻址

④寄存器间接寻址⑧隐含寻址一、与数据有关的寻址方式02二月2023中北大学《微机原理及接口技术》301.立即寻址操作数(为一常数)直接由指令给出,(此操作数称为立即数),立即寻址只能用于源操作数例:MOVAX,1234HMOV1234H,AX;错误!12H34HAHALMOV代码段┇

02二月2023中北大学《微机原理及接口技术》31立即数操作码低8位高8位存储器MOV操作码02H31HAHAL代码段代码段立即寻址指令在存储器中的存放形式AX指令操作例:MOVAX,3102H;AX3102H执行后,(AH)=31H,(AL)=02H1.立即寻址02二月2023中北大学《微机原理及接口技术》322.直接寻址指令中直接给出操作数的16位偏移地址(也称有效地址)例:MOVAX,[1200H]22H11H1200H偏移地址┇

数据段AHAL02二月2023中北大学《微机原理及接口技术》33

偏移地址也可用符号地址来表示,如ADR、VAR、WQT

例:

MOVAX,[2A00H]MOVDX,ES:[2A00H]MOVSI,TABLE_PTR2.直接寻址02二月2023中北大学《微机原理及接口技术》342.直接寻址直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。(段超越前缀)例:MOVAX,ES:[1200H]02二月2023中北大学《微机原理及接口技术》35指令操作例:MOVAX,[3100H]AL[3100H],AH[3101H]如果(DS)=6000H,[63010H]=CDH,[63011H]=ABH则操作数的物理地址为:60000H+3100H=63100H指令执行后:(AX)=ABCDHMOV操作码00H31HAHAL63100HCDHABH存储器代码段数据段..63101H2.直接寻址02二月2023中北大学《微机原理及接口技术》36

操作数放在CPU某个寄存器中源操作数与目的操作数字长要相同寄存器寻址与段地址无关例:MOVAX,BXMOV[3F00H],AXMOVCL,AL

错误例:

×MOVAX,BL;字长不同

×MOVES:AX,DX;寄存器与段无关3.寄存器寻址02二月2023中北大学《微机原理及接口技术》37AXSI2233H2233H指令操作例:MOVSI,AX;SI(AX)

指令执行前:(AX)=2233H

指令执行后:(AX)=2233H,(SI)=2233H3.寄存器寻址02二月2023中北大学《微机原理及接口技术》384.寄存器间接寻址参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。例:MOVAX,[BX]02二月2023中北大学《微机原理及接口技术》394.寄存器间接寻址由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:

BX,SI,DI默认在数据段

BP默认在堆栈段02二月2023中北大学《微机原理及接口技术》40只有SI、DI、BX和BP可作间址寄存器例:MOVAX,[BX]MOVCL,CS:[DI]

错误例:

×MOVAX,[DX]×

MOVCL,[AX]4.寄存器间接寻址02二月2023中北大学《微机原理及接口技术》414.寄存器间接寻址例:

设(BX)=1200H

则执行MOVAX,[BX]后22H11H1200H偏移地址AHAL┇

1122数据段代码段MOV02二月2023中北大学《微机原理及接口技术》424.寄存器间接寻址寄存器间接寻址基址寻址(间址寄存器为基址寄存器BX,BP)变址寻址(间址寄存器为变址寄存器SI,DI)02二月2023中北大学《微机原理及接口技术》43指令操作例:MOVAX,[SI]若(DS)=6000H,

(SI)=1200H,(61200H)=44H,(61201H)=33H则指令执行后,(AX)=3344H。44H33H60001200DSSI6000061200

61200HAX存储器数据段

+)120044H33H02二月2023中北大学《微机原理及接口技术》445.寄存器相对寻址操作数的偏移地址=寄存器的内容+8/16位的位移量EA=

(BX)(BP)(SI)(DI)+

8位16位位移量

02二月2023中北大学《微机原理及接口技术》455.寄存器相对寻址

寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之)。

MOVAX,[BX+8]MOVCX,TABLE[SI]MOVAX,[BX+DATA]MOVAX,[BP+1000H];默认段寄存器为SS02二月2023中北大学《微机原理及接口技术》465.寄存器相对寻址例:MOVAX,[BX+DATA]若:(DS)=6000H,(BX)=1000H,DATA=2A00H,(63A00H)=66H(63A01H)=55H则:物理地址=60000H+1000H+2A00H=63A00H指令执行后:(AX)=5566H02二月2023中北大学《微机原理及接口技术》47操作码00偏移量低2A偏移量高DS6000BX1000+DATA2A0063A0063A00HAHALAX代码段数据段.........66H55HMOVAX,DATA[BX]02二月2023中北大学《微机原理及接口技术》486.基址加变址寻址操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址由选择的基址寄存器决定例:MOVAX,[SI+BX]EA=

(BX)(BP)+(SI)(DI)同一组内的寄存器不能同时出现。02二月2023中北大学《微机原理及接口技术》49例:

MOVAX,[BX][SI]MOVAX,[BX+SI]MOVAX,DS:[BP][DI]错误例:

×

MOVAX,[BX][BP]

×

MOVAX,[DI][SI]6.基址加变址寻址02二月2023中北大学《微机原理及接口技术》50

83000操作码DS8000BX2000

+SI100083000HAHALAX代码段数据段.........YYXX指令操作例:MOVAX,[BX][SI]假定:(DS)=8000H,(BX)=2000H,SI=1000H则物理地址=80000H+2000H+1000H=83000H指令执行后:(AL)=[83000H](AH)=[83001H]02二月2023中北大学《微机原理及接口技术》517.基址、变址、相对寻址操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量。操作数的段地址由选择的基址寄存器决定例:MOVAX,[BP+SI+DATA]EA=

(BX)(BP)+(SI)(DI)+8位16位位移量

02二月2023中北大学《微机原理及接口技术》527.基址、变址、相对寻址MOVAX,BASE[SI][BX]MOVAX,[BX+BASE][SI]MOVAX,[BX+SI+BASE]MOVAX,[BX]BASE[SI]MOVAX,[BX+SI]BASE

例:02二月2023中北大学《微机原理及接口技术》53指令操作例:MOVAX,DATA[DI][BX]若(DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H则指令执行后(AH)=[83021H],(AL)=[83020H]8320083200HAHALAX+DATA

0200操作码代码段数据段.........YYXXDS

8000BX

2000

DI

100002二月2023中北大学《微机原理及接口技术》54使用相对的基址-变址寻址方式可以很方便地访问二维数组基址寄存器数组首地址变址寄存器数组元素行址位移量数组元素列址(偏移地址)二维数组例:内存图示(按行存储)(行位移地址)(行内元素下标)183252409A=02二月2023中北大学《微机原理及接口技术》55位移量可用符号表示在寄存器相对寻址或相对基址变址寻址方式中,位移量可用符号表示:MOVAX,[SI+COUNT];COUNT事先定义有数值MOVAX,[BX+SI+WNUM];WNUM事先定义有数值02二月2023中北大学《微机原理及接口技术》56同一寻址方式有多种表示形式MOVAX,[BX][SI]

MOVAX,[BX+SI]MOVAX,COUNT[SI]

MOVAX,[SI+COUNT]MOVAX,WNUM[BX][SI]MOV

AX,WNUM[BX+SI]

MOVAX,[BX+SI+WNUM]COUNT和WNUM是事先定义的标识符(数值)02二月2023中北大学《微机原理及接口技术》578.隐含寻址指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中例:MULBL

指令的执行:AL×BLAX指令隐含了被乘数AL及乘积AX类似的指令还有:DIV、CBW、MOVS等02二月2023中北大学《微机原理及接口技术》58寻址方式可分为立即寻址直接寻址寄存器相对寻址寄存器寻址基址-变址寻址基址-变址相对寻址寄存器间接寻址小结02二月2023中北大学《微机原理及接口技术》59

寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:

寻址方式指令操作数形式

寄存器间接只有一个寄存器(BX/BP/SI/DI之一)

寄存器相对一个寄存器加上位移量基址—变址两个不同类别的寄存器相对基址-变址两个不同类别的寄存器加上位移量小结02二月2023中北大学《微机原理及接口技术》60立即数寻址与直接寻址区分

MOVAX,3100H

MOVAX,[3100H]

将立即数送入AX将3100H单元的内容送入AX02二月2023中北大学《微机原理及接口技术》61寄存器寻址与寄存器间接寻址区分

MOVAX,BX

MOVAX,[BX]

将BX的内容送AX

将BX指示地址中内容送AX02二月2023中北大学《微机原理及接口技术》62二、与转移地址有关的寻址方式

1.段内直接寻址2.段内间接方式3.段间直接寻址4.段间间接方式

02二月2023中北大学《微机原理及接口技术》631.段内直接寻址段内直接寻址方式也称为相对寻址方式,转移的目标地址是当前IP内容和一个8位或16位的位移量之和,这个位移量才是指令代码的一部分,所以叫相对寻址。如图所示02二月2023中北大学《微机原理及接口技术》64

段内直接寻址方式既可用在条件转移指令,也可用无条件转移指令或调用指令中。例:JMPNEARPTRPROGIA;

JMPSHORTPROGIAPROGIA为转向的符号地址,在机器指令中,用位移量来表示。位移量为16位,则在前加操作符NEARPTR位移量为8位,则在符号地址前加SHORT

1.段内直接寻址02二月2023中北大学《微机原理及接口技术》652.段内间接方式这种方式也是在段内,其转移的目标地址是寄存器或存储单元的内容,即以寄存器或存储器单元内容来更新IP的内容,所以是绝对偏移量,注意和段内直接方式的相对偏移量的区别。若目标地址为存储单元内容,则该存储单元本身可由上述与存储器操作数有关的任何寻址方式寻址,只是它里面的内容为新的IP值。如图所示。02二月2023中北大学《微机原理及接口技术》66

段内间接寻址方式可适用于无条件转移指令和调用指令中。例:JMPBX;

JMPWORDPTR[BP+TABLE]

WORDPTR为操作符,用以指出其后的寻址方式所取得的转向地址是一个字的有效地址,即段内转移。

2.段内间接寻址02二月2023中北大学《微机原理及接口技术》673.段间直接寻址这种方式用于段间转移,目标地址的段基值(CS)和偏移地址(IP)都是指令码的组成部分,用来更新当前CS和IP。如图所示。02二月2023中北大学《微机原理及接口技术》68

例:JMPFARPTRNEXTR;

FARPTR表示段间转移操作符;NEXTR为转向符号地址;

3.段间直接寻址02二月2023中北大学《微机原理及接口技术》694.段间间接方式这种方式用于段间转移,当前CS和IP由存储器中连续的两个字更新,低位地址的字更新IP,高位地址的字更新CS,存放新IP和CS的存储单元地址由前述存储器操作数的寻址方式决定。例:JMPDWORDPTR[INTER+BX]

;取DS段中偏移为[INTER+BX]处的双字作为新的CS和IP。第二节

8086的指令系统movax,12hcalldisplayJmp1234h02二月2023中北大学《微机原理及接口技术》71从功能上包括六大类:数据传送指令算术运算指令逻辑运算和移位指令串操作指令程序控制指令处理器控制指令4.28086指令系统02二月2023中北大学《微机原理及接口技术》72

mem

存储器操作数

acc

累加器操作数

dest

目标操作数

src

源操作数

disp

8位或16位偏移量,可用符号地址表示

DATA

8位或16位数据

port

输入输出端口

()

表示寄存器的内容

[]

表示存储器的内容或偏移地址指令介绍中采用符号的含义02二月2023中北大学《微机原理及接口技术》73主要内容:4.2.1数据传送指令4.2.2算术运算指令4.2.3逻辑运算和移位指令4.2.4串操作指令4.2.5程序控制指令4.2.6处理器控制指令4.28086指令系统02二月2023中北大学《微机原理及接口技术》74

可实现

存储器寄存器I/O4.2.1数据传送指令02二月2023中北大学《微机原理及接口技术》754.2.1数据传送指令通用传送指令累加器专用传送指令(输入输出指令)地址传送指令标志传送指令02二月2023中北大学《微机原理及接口技术》76最基本的传送指令(MOV)堆栈操作指令(PUSH,POP)数据交换指令(XCHG)换码指令(XLAT)字位扩展指令(CBW/CWD)特点:所有通用传送指令都不影响标志位1.通用数据传送指令02二月2023中北大学《微机原理及接口技术》77通用数据传送指令格式表1.通用数据传送指令02二月2023中北大学《微机原理及接口技术》781)最基本的传送指令一般数据传送指令MOV格式:MOVdest,src操作:srcdest例:MOVAL,BLMOV[DI],AXMOVCX,[1000H]MOVBL,4002二月2023中北大学《微机原理及接口技术》79例:

MOVWORD

PTR[SI],01H;

WORDPTR字长度标记

BYTEPTR字节长度标记

DWORDPTR双字长度标记(伪指令)1)最基本的传送指令02二月2023中北大学《微机原理及接口技术》80

传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。具体来说可实现:①MOVmem/reg1,mem/reg2

指令中两操作数中至少有一个为寄存器例:MOV CL,DLMOV AX,BX MOV [SI],CX MOV CL,[BX+5]1)最基本的传送指令02二月2023中北大学《微机原理及接口技术》81②MOVreg,data;立即数送寄存器③MOVmem,data;立即数送存储单元④MOVacc,mem;存储单元送累加器⑤MOVmem,acc;累加器送存储单元⑥MOVsegreg,mem/reg;

存储单元/寄存器送段寄存器⑦MOVmem/reg,segreg;

段寄存器送存储单元/寄存器1)最基本的传送指令02二月2023中北大学《微机原理及接口技术》82MOV指令使用规则:IP不能作目的寄存器;不允许mem2←mem1(存储器);不允许segreg←segreg(段寄存器);立即数不允许作为目的操作数;不允许segreg←立即数;源操作数与目的操作数类型要一致;IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。1)最基本的传送指令02二月2023中北大学《微机原理及接口技术》83几种不允许传送的解决办法: 用寄存器如AX作桥梁。存储器←存储器: MOVAX,MEM1 MOVMEM2,AX段寄存器←段寄存器: MOVAX,DS MOVES,AX段寄存器←立即数: MOVAX,DATA MOVDS,AX02二月2023中北大学《微机原理及接口技术》841)最基本的传送指令判断下列指令的正确性:MOVAL,BXMOVAX,[SI]05HMOV[BX][BP],BXMOVDS,1000HMOVDX,09HMOV[1200H],[SI]02二月2023中北大学《微机原理及接口技术》852)堆栈操作指令掌握:有关堆栈的概念(栈顶、栈首、栈底)堆栈指令的操作原理(执行过程、执行结果)02二月2023中北大学《微机原理及接口技术》86堆栈操作的原则先进后出以字为单位02二月2023中北大学《微机原理及接口技术》87什么是堆栈?按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入/弹出操作。为什么要设置堆栈?为什么要按“后进先出”方式工作?2)堆栈操作指令02二月2023中北大学《微机原理及接口技术》88由SS指示堆栈段的段基址;堆栈指针SP始终指向堆栈的顶部;SP的初值规定了所用堆栈区的大小;堆栈的最高地址叫栈底。SPSS堆栈段进栈方向退栈方向栈底栈顶02二月2023中北大学《微机原理及接口技术》89子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图(a)主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序IP(下)主程序IPIP(下)继续执行主程序转子程序1返回主程序IP’执行子程序2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(b)压栈1弹出1压栈2弹出202二月2023中北大学《微机原理及接口技术》90压栈指令PUSH格式:PUSH SRC(src为16位操作数)指令执行过程:(SP)(SP)-2

(SP)-1操作数高字节(SP)-2操作数低字节02二月2023中北大学《微机原理及接口技术》91

PUSHAX ;将AX内容压栈执行操作:(SP)←(SP)-2

[(SP)-1]←高字节(AH)[(SP)-2]←低字节(AL)PUSHreg

PUSHAXPUSHmem/reg

;PUSH[BX]PUSHsegreg

PUSHDS压栈指令PUSH02二月2023中北大学《微机原理及接口技术》92设(AX)=1020HPUSHAX指令执行示意图10(AH)20(AL)存储区(SS段)进栈方向PUSH后低地址高地址低地址存储区(SS段)PUSH前(AX)=1020H(SP)-2(SP)高地址(SP)-1(SP)02二月2023中北大学《微机原理及接口技术》93压栈指令PUSH设AX=1020H,SP=1200H执行PUSHAX指令后堆栈区的状态:1200H┇

堆栈段SP-2=11FEH10H20H1200H┇

堆栈段12H34HAX入栈后入栈前SP02二月2023中北大学《微机原理及接口技术》94出栈指令POP格式:POPdest指令执行过程:

(SP)操作数低字节(SP)+1操作数高字节(SP)←(SP)+202二月2023中北大学《微机原理及接口技术》95执行POPAX堆栈区的状态:10H20H11FEH┇

堆栈段代码段PUSH

10H20H

AX

SP+2出栈指令POP02二月2023中北大学《微机原理及接口技术》96例:POP BX ;将栈顶内容弹至BX

执行操作:(BL)←[SP](BH)←[(SP)+1](SP)←(SP)+2出栈指令POP02二月2023中北大学《微机原理及接口技术》97POPBX的执行示意图(SP)出栈方向存储区(SS段)POP后(BX)=1020H低地址高地址低地址存储区(SS段)POP前2010(SP)(SP)+1(SP)+2高地址BX201002二月2023中北大学《微机原理及接口技术》98

堆栈操作总是按字进行;不能从栈顶弹出一个字给CS;堆栈指针为SS:SP,SP永远指向栈顶;

SP自动进行增减量(-2,+2)操作数可以是寄存器或存储器两单元,但不能是立即数;

PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反堆栈操作指令说明02二月2023中北大学《微机原理及接口技术》99堆栈操作指令例PUSHAXPUSHBXPUSHWORDPTR[BX]POPWORDPTR[BX]POPBXPOPAX02二月2023中北大学《微机原理及接口技术》100格式:XCHG

reg,mem/reg功能:交换源操作数与目的操作数的内容。要求:两操作数中必须至少有一个在寄存器中;操作数不能为段寄存器和立即数;源和目地操作数类型要一致。(3)交换指令XCHG举例:

XCHGAX,BX

XCHG

[2000],CL02二月2023中北大学《微机原理及接口技术》101例:交换指令XCHGAL,CL;字节交换XCHGBX,SI;字交换XCHGAX,[BX+SI]

;寄存器和存储器之间交换数据(3)交换指令XCHG02二月2023中北大学《微机原理及接口技术》102下列指令是非法的XCHGAX,6234H

;寄存器与立即数之间不能交换XCHGBUF1,BUF2

;存储器单元与存储器单元之间不能交换XCHGADDR,4234H

;存储器单元与立即数之间不能交换XCHGCS,DAT[BX]

;不能与CS(或IP)寄存器进行交换(3)交换指令XCHG02二月2023中北大学《微机原理及接口技术》103格式:

XLAT说明:又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。BX+AL得到要查找元素的偏移地址操作:[BX+AL]AL(4)换码指令XLAT02二月2023中北大学《微机原理及接口技术》104303132...394142...4546...42000H+042000H+11‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’十六进制数ASCII码表存储器例:内存数据段有一张16进制数的ASCII码表,设其首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。(4)换码指令XLAT02二月2023中北大学《微机原理及接口技术》105则可用如下几条指令实现:

MOVBX,2000H

;(BX)←表首地址

MOVAL,0BH

;(AL)←序号

XLAT

;查表转换 ;AL←[(BX)+(AL)]执行后得到:(AL)=42H=’B’注意:转换表长度最大为256个表项(1字节)(4)换码指令XLAT02二月2023中北大学《微机原理及接口技术》106将符号数的符号位扩展到高位;指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX无符号数的扩展规则为在高位补0字节到字的扩展字到双字的扩展(5)字位扩展指令02二月2023中北大学《微机原理及接口技术》107字节到字的扩展指令格式:

CBW操作:将AL内容扩展到AH规则:若最高位=1,则执行后AH=FFH

若最高位=0,则执行后AH=00H02二月2023中北大学《微机原理及接口技术》108字到双字的扩展指令格式:

CWD操作:将AX内容扩展到DX规则:若最高位=1,则执行后DX=FFFFH

若最高位=0,则执行后DX=0000H02二月2023中北大学《微机原理及接口技术》109(5)字位扩展指令用途:用于有符号数的除法。例如:(AL)=A7H,则执行CBW后,AX的内容为FFA7H。

MOVAL,44HCBWMOVAX,0AFDEHCWD执行结果?02二月2023中北大学《微机原理及接口技术》1102.输入输出指令(累加器专用传送)专门面向I/O端口操作的指令掌握:指令的格式及操作指令的两种寻址方式指令对操作数的要求只限于用累加器AL或AX来传送信息。功能:(累加器)←→I/O端口02二月2023中北大学《微机原理及接口技术》111指令格式:输入指令INacc,PORT输出指令OUTPORT,acc端口地址累加器2.输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》112输入输出指令按其寻址方式可以分为两大类:一类是直接寻址的输入输出指令;另一类是间接寻址的输入输出指令。直接寻址直接给出8位端口地址,可寻址256个端口间接寻址

16位端口地址由DX指定,可寻址64K个端口2.输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》113(1)输入指令IN格式:INAL,port;port端口号00H~FFH功能:把来自端口port的一个字节送入AL寄存器格式:INAX,port;功能:把来自端口port和port+1两个端口的数据构成一个字送入AX寄存器,port端口的数据送入AL,port+1端口的数据送入AH。2.

输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》114例:

INAL,80H;(AL)←(80H端口)

INAX,70H;(AL)←(70H端口)(AH)←(71H端口)

2.

输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》115(2)输出指令OUT格式:OUTport,AL;port端口号00H~255H功能:把AL寄存器中的一个字节送入端口port格式:OUTport,AX;功能:把AX寄存器中的一个字送入port和port+1AL的数据送入port端口,

AH的数据送入port+1端口。2.

输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》116例:

OUT44H,AL;

(AL)(44H端口)

;将AL中的1个字节输出到44H端口

OUT80H,AX;

(AL)(80H端口)

(AH)(81H端口)

;将AX中的内容输出到80H、81H两端口,AL中的内容输出到80H,AH中的内容输出到81H2.

输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》117

在间接寻址的IN/OUT指令执行前,在DX寄存器中事先用传送指令设置好I/O端口号。

IN

AL,DX;从DX所指的端口中读取1个字节

IN

AX,DX;从DX和DX+1所指出的两个端口中读取1个字,(AL)←((DX));(AH)←((DX+1)OUTDX,AL;将AL的字节输出到DX所指端口

OUTDX,AX;(AL)((DX));

(AH)((DX+1)2.

输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》118

在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如:

MOVDX,220H

INAL,DX;将220H端口内容读入AL例1:把端口30H的内容经过AL送到存储器单元DAT中,程序片断为:

INAL,30H

MOVDAT,AL2.

输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》119例2:从端口2000H送一个字到AL寄存器中,程序片断为:

MOVDX,2000HINAX,DX例3:将AX中的数据通过端口地址3000H送出的程序片断为:

MOVDX,3000HOUTDX,AX2.

输入输出指令(累加器专用传送)02二月2023中北大学《微机原理及接口技术》1203.地址传送指令取偏移地址指令LEALDS指令LES指令02二月2023中北大学《微机原理及接口技术》121目标地址传送指令格式表3.地址传送指令02二月2023中北大学《微机原理及接口技术》122用途:用于传送操作数的地址格式:LEA

reg,mem

;将指定内存单元的偏移地址送到指定寄存器要求:

1)

源操作数必须是一个存储器操作数;

2)目的操作数必须是一个16位的通用寄存器。1)取有效地址指令LEA02二月2023中北大学《微机原理及接口技术》123例:LEA BX,[SI+10H]

设:(SI)=1000H

则执行该指令后,(BX)=1010H注意以下指令差别:

LEABX,[2000H]

;将存储单元的偏移地址取到BX

MOVBX,[2000H];将存储单元中的内容取到BX1)取有效地址指令LEA02二月2023中北大学《微机原理及接口技术》124BX4030低地址存储区高地址BX4030 h…………002042000H42001H(DS)=4000H执行LEA指令时执行MOV指令时1)取有效地址指令LEA02二月2023中北大学《微机原理及接口技术》125下面两条指令等效:

LEABX,BUFFERMOVBX,OFFSETBUFFER

其中,OFFSETBUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存储器单元的偏移地址。1)取有效地址指令LEA02二月2023中北大学《微机原理及接口技术》126LEA指令比较下列指令:LEASI,DATA1MOVSI,DATA1MOVBX,[BX]LEABX,[BX]符号地址02二月2023中北大学《微机原理及接口技术》127┇

DATA112H34H1100H88H77HBX=1100HLEA指令02二月2023中北大学《微机原理及接口技术》128LEA指令在程序中的应用将数据段中首地址为MEM1的50个字节的数据传送到同一逻辑段首地址为MEM2的区域存放。编写相应的程序段。02二月2023中北大学《微机原理及接口技术》129LEA指令在程序中的应用

开始取源地址取目标地址送数据块长度到CL传送一个字节修改地址指针修改计数值计数值=0?结束NY02二月2023中北大学《微机原理及接口技术》130LEA指令在程序中的应用

LEASI,MEM1LEADI,MEM2

MOVCL,50NEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCLJNZNEXTHLT02二月2023中北大学《微机原理及接口技术》1312)取远地址指针指令LDSreg,srcLESreg,src指令中源操作数是存储器某4个连续单元的偏移地址,目标操作数是间址寄存器。02二月2023中北大学《微机原理及接口技术》132LDSREG,SRC操作:reg[src]

DS[src+2]指令功能: 将地址指针(共4个字节)装入DS和另一个间址寄存器(BX/BP/SI/DI)2)取远地址指针指令02二月2023中北大学《微机原理及接口技术》133例:

LDSDI,[2130H];设(DS)=3000H低地址存储区高地址4030…………32130H0050DI4030DS005002二月2023中北大学《微机原理及接口技术》134LDS指令例例:

LDSDI,[1200H]MOVAX,[DI]指令执行后:02二月2023中北大学《微机原理及接口技术》135LDS指令例DS=6000HDI=1234HAX=2233H┇

12H34H00H60H1200H数据段1┇

DSDI数据段233H22H61234H02二月2023中北大学《微机原理及接口技术》136LESREG,SRC操作:reg[src]

ES[src+2]指令功能: 将地址指针(共4个字节)装入ES和另一个间址寄存器(BX/BP/SI/DI)LDS和LES指令为切换数据段提供了方便。2)取远地址指针指令02二月2023中北大学《微机原理及接口技术》137LES指令例LESDI,[1200H]MOVAX,[DI]┇

12H34H00H60H1200H数据段┇

ESDI附加段33H22H61234H02二月2023中北大学《微机原理及接口技术》1384.标志位传送指令LAHF(读取标志指令)SAHF(设置标志指令)PUSHF(对标志寄存器的推入堆栈指令)POPF(对标志寄存器的弹出堆栈指令)隐含操作数AH隐含操作数FLAGS02二月2023中北大学《微机原理及接口技术》139LAHF

;将FLAGS的低8位装入AHSAHF;执行与LAHF相反的操作CFPFAFZFCF….AHFLAGSD15D0D7D04.标志位传送指令02二月2023中北大学《微机原理及接口技术》140OFDFIFTFSFZFAFPFCFAHLAHF指令的功能FLAGS(1)读标志指令LAHFLAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:4.标志位传送指令02二月2023中北大学《微机原理及接口技术》141(2)设置标志指令SAHF

SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。OFDFIFTFSFZFAFPFCFAHSAHF指令的功能FLAG4.标志位传送指令02二月2023中北大学《微机原理及接口技术》142PUSHF,POPF

针对FLAGS的堆栈操作指令将标志寄存器压栈或从堆栈弹出

PUSHF和POPF指令用于保护和恢复标志寄存器内容,也即一般用于在子程序和中断处理程序的首尾,起保存主程序标志和恢复主程序标志的作用。4.标志位传送指令02二月2023中北大学《微机原理及接口技术》143

(3)把标志寄存器推入栈顶指令PUSHF执行的操作:(SP)-1←标志寄存器高8位

(SP)-2←标志寄存器低8位

(SP)←(SP)-24.标志位传送指令02二月2023中北大学《微机原理及接口技术》144

(4)从栈顶弹出标志寄存器指令POPF

执行的操作:标志寄存器低8位←(SP)

标志寄存器高8位←(SP)+1 (SP)←(SP)+24.标志位传送指令02二月2023中北大学《微机原理及接口技术》145例如:

PUSH AXPUSH CX

PUSHF

;保护标志寄存器内容

;这段程序要用到AX,CX以及标志位

POPF ;恢复标志寄存器内容

POP CXPOP AX...数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。02二月2023中北大学《微机原理及接口技术》146二、算术运算类指令加法运算指令减法运算指令乘法指令除法指令BCD码运算指令算术运算指令的执行大多对状态标志位会产生影响02二月2023中北大学《微机原理及接口技术》1471.加法指令不带进位的加法指令ADD带进位位的加法指令ADC增量指令(加1指令)INC加法指令对操作数的要求与MOV指令相同02二月2023中北大学《微机原理及接口技术》1481)不带进位的加法指令ADD指令格式:

ADDOPRD1,OPRD2操作:

OPRD1OPRD1+OPRD2ADD指令的执行对全部6个状态标志位都产生影响02二月2023中北大学《微机原理及接口技术》149

格式:ADD acc,data

ADD mem/reg,data

ADDmem/reg1,mem/reg2

实例:

ADD AL,30H

ADD SI,[BX+20H]

ADD CX,SI

ADD [DI],200H1)不带进位的加法指令ADD指令02二月2023中北大学《微机原理及接口技术》150

例:已知(BX)=E75FH,指令ADDBX,8046H

执行后,状态标志各是多少?

E75FH=11100111010111118046H=10000000010001101

1

1

1

1

10110011110100101结果:CF=1,ZF=0,PF=1,

AF=1,OF=1,SF=0PF:低8位中1的个数是否为偶数!1)不带进位的加法指令ADD指令02二月2023中北大学《微机原理及接口技术》1512)带进位位的加法指令ADC指令指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样指令的操作:

OPRD1OPRD1+OPRD2+CF

ADC指令多用于多字节数相加运算02二月2023中北大学《微机原理及接口技术》152

ADC指令在形式上和功能上与ADD类似,只是相加时还要包括进位标志CF的内容,例如:

ADCAL,68H;AL←(AL)+68H+(CF) ADCAX,CX;AX←(AX)+(CX)+(CF)ADCBX,[DI]

;BX←(BX)+[DI+1][DI]+(CF)2)带进位位的加法指令ADC指令02二月2023中北大学《微机原理及接口技术》153

例:有两个4字节的无符号数相加:

2C56F8ACH+309E47BEH=?设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区。(见下页图)

因CPU只能进行8位或16位的加法运算,为此可将两数分成低字和高字分别相加。2)带进位位的加法指令ADC指令02二月2023中北大学《微机原理及接口技术》15456H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被加数加数数据段多字节加法示意图.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论