




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.3 指令信息的表示,2.3.1、指令格式 2.3.2、常用寻址方式 2.3.3、指令类型,一台计算机能够直接识别并执行的程序是机器语言程序。,返回,机器语言程序是由机器指令序列组成的。,机器指令是产生各种控制信息的基础。 一条机器指令是一组有意义的二进制代码,它指示机器硬件完成哪种基本操作。,指令,指令系统 一台计算机的所有指令的集合构成该机的指令系统。 指令系统为软件设计者提供最低层次的程序设计语言,也是硬件设计者的最基本的设计依据。,返回,2.3.1 指令格式 1、指令中的基本信息,返回,(1)、操作码 (2)、操作数的地址 (3)、操作结果的地址 (4)、下一条指令的地址,(1)、操
2、作码 用来指示该指令所要完成的操作;,返回,每一条指令都有一个含义确定的操作码;,CPU通过识别操作码来控制完成不同的操作;,MOV AX,CX ;MOV表示一次传送。,(2)、操作数的地址 给出操作数存放处的地址,如主存单元地址或寄存器地址;,返回,CPU通过该地址可以获得所需的操作数。,(3)、操作结果的地址 对操作数进行处理所产生的结果存放在该地址中。,返回,(4)、下一条指令的地址 PC中存放指令地址,每取出一条指令PC自动增值指向下一条指令地址。,操作码 地址码,指令格式:,1、操作码 指示该指令操作的性质及功能;,返回,2、地址码 用来描述该指令的操作对象。由它给出操作数地址或直接
3、给出操作数,并给出操作结果存放地址。,2、地址码结构 涉及的主要问题:,一条指令指明几个地址; 每个地址采用什么方式给出; 例: INCCX MOV AX,2000H,指令格式按地址码部分的地址个数不同,可分为以下几种:,1)三地址指令(大、中型机) 格式:,OP,A1,A3,A2,A1:操作数 1 的地址 A2 :操作数 2 的地址 A3 :结果的存放地址 (A1)OP(A2 )(A3) PC + n PC,主存单元地址/寄存器地址,2)二地址指令(中、小、微型机) 格式:,OP,A1,A2,A1:目的地址 A2 :源地址 (A1)OP(A2 )(A1) PC + n PC,主存单元地址/寄
4、存器地址,3)一地址指令(微型机) 格式:,OP,A,OP A A PC + n PC 指令只需要一个目的操作数; 指令需要两个操作数,目的操作数是隐含指定的;,主存单元地址/寄存器地址,4)零地址指令(微型机) 格式:,OP, 指令不需要任何操作数; 指令需要操作数是隐含指定的;,3、操作码结构,返回,用来指示机器应执行什么性质的操作;,每一条指令都有一个含义确定的操作码;,不同指令的操作码用不同的编码表示;,操作码的位数确定了存在类型的多少,操作码的位数n,指令系统中的指令条数( 2n)。,MOV AX,CX ; ADD AL,BL;,指令长度固定时,操作码和地址码的位数相互制约。 指令操
5、作码结构设计方法有:,1)固定长度的操作码 2)可变长度的操作码,1)固定长度的操作码 操作码的长度固定,且集中放在指令的第一个字段中,指令的其余部分全部用于地址码。,2)可变长度的操作码 扩展操作码:即操作码和地址码位数不固定,操作码位数可以有几种不同的选择;对地址码少的指令允许操作码长一些,对地址码多的指令允许操作码短一些。,例:设机器指令的长度为 16 位,包括基本操作码4 位和 3 个地址字段,每个地址字段长 4 位,格式为:,OP,A1,A3,A2,0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 ,16条三地址指令,固定长度的操作码举例,例:设机器指令的长度为 16
6、位,包括基本操作码4 位 和 3 个地址字段,每个地址字段长 4 位,格式为:,OP,A1,A3,A2,0 0 0 0 0 0 0 1 1 1 1 0 ,15条三地址指令,1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 ,15条二地址指令,1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 ,15条一地址指令,1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1
7、1 1 1 1 1 1 1 1 1 1 1,16条零地址指令,15+15+15+16=61条指令,0 0 0 0 0 0 0 1 1 1 0 1 ,14条三地址指令,1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 ,16条二地址指令,15条二地址指令,1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
8、0 ,15条一地址指令,1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1,16条零地址指令,14+16+15+15+16=76条指令,使用操作码扩展技术的一个重要原则: 使用频度高的指令分配短的操作码; 使用频度低的指令分配长的操作码;,3)单功能型或复合型操作码 单功能型操作码:为了能快速地识别并执行操作码,让操作码只表示种操作含义。 复合型操作码:为了使一条指令能表示更多的操作信息,将操作码分为几部分,它们 的组合是嚓含义更加丰富。,4、指令长度,指
9、令设计上的两种相反的趋势:,指令长度通常为字节的整数倍。,指令长度与机器字长无关 ;,指令长度主要与操作码的长度、操作数地址的长度及操作数地址个数有关。,(1)变字长指令 一种计算机的指令系统中不同指令可以有不同的字长。,将操作码放在指令字的第一个字节,当CPU读出后立即判定是一、二还是零地址指令,后面还应度曲几个字节的指令代码。,主流PC系列机和传统的大、中、小型机仍采用。,(2)固定字长指令 RISC:,二、寻址方式 指令中如何提供操作数地址或操作数的方法,称为寻址方式。即规定如何对地址字段作出解释以找到所需的操作数。 操作数:指令中; CPU 内部寄存器中; I/O接口中; 主存单元(包
10、括堆栈)中;,返回,当操作数存放在主存单元时,若指令中的地址码不能直接用来访问主存,这样的地址成为形式地址; 形式地址有效地址 有效地址:可直接访问主存的地址。 每种机器的指令系统有一套自己的寻址方式。,返回,常用的寻址方式:,1、立即寻址寻址方式 2、寄存器寻址方式 3、直接寻址方式 4、间接寻址方式 5、寄存器间接寻址方式 6、变址寻址方式 7、基址寻址方式 ;8、基址变址寻址方式 9、相对寻址方式 ;10、页面寻址方式 11、堆栈寻址方式,立即寻址寻址方式 存储器寻址方式: 寄存器寻址方式,直接寻址方式 间接寻址方式 寄存器间接寻址方式 变址寻址方式 基址寻址方式 基址变址寻址方式 相对
11、寻址方式 页面寻址方式 堆栈寻址方式,1、 立即寻址,指令中直接给出操作数,即让操作数占据一个地址码部分,取指令的同时,取出了操作数。,OP,操作数,2、 直接寻址,指令的地址码给出操作数所在主存单元的地址;即有效地址EA。 按有效地址访问一次主存便获得操作数。 S =(A),OP,A,S,A,IR,主存,3、 寄存器寻址,指令中地址码部分给出某一通用寄存器地址,操作数在指令CPU内部寄存器中。 S=(Ri),OP,Ri,S,Ri,IR,4、 间接寻址,指令地址码部分中给出存放操作数地址的主存单元地址。(操作数地址的地址) S=(A1),OP,A1,S,A2,IR,主存,A1,A2,5、 寄存
12、器间接寻址,操作数在存储器中; 指令中给出寄存器地址; 寄存器内容作为操作数所在单元的有效地址; S=(Ri),OP,Ri,A,Ri,IR,S,A,6、 变址寻址,操作数在存储器中。 指令中指定一个寄存器作为变址寄存器,并在指令地址码部分给出一个形式地址。 S=(Rx)+D) 指令中的形式地址作为基准量;变址寄存器作为修改量;,OP,D,N,Rx,IR,S,D+N,OP d,A,加法器,Rx,7、基址寻址,EA 等于某基址寄存器内容和指令中的形式地址之和。 操作数在存储器中。 基址寄存器提供基准量;指令中的形式地址作为位移量;,8、相对寻址,PC提供基准量;指令中的形式地址作为位移量;二者相加
13、后为操作数的有效地址。 S=(PC)+d ),OP,d,A,PC,IR,S,A+d,OP d,A,d,9、页面寻址,PC的高位内容与指令中的形式地址相拼接形成操作数的有效地址。 S=(PC)H,d ),OP,d=F0,A010,PC,IR,S,A0F0,OP d=F0,A010,10、堆栈寻址,三、指令类型,1、数据传送类指令 2、算术运算类指令 3、输入输出类指令 4、逻辑运算类类指令 5、移位操作类指令 6、程序控制转移类指令,返回,第三节 8086 / 8088指令系统举例 指令操作码:变长格式 指令长度:1 6 BYTE,操作码,寻址方式字节,存储器操作数的地址或操作数,返回,1、立即
14、寻址寻址方式 2、存储器寻址方式: 3、寄存器寻址方式 4、串操作寻址方式 5、I/O端口寻址方式,直接寻址方式 寄存器间接寻址方式 变址寻址方式 基址变址寻址方式,一、8086/8088的寻址方式,返回,1、 立即寻址,指令中直接给出操作数 n ,取指令的同时,取出了操作数。 立即数可以是8位或16位常数。(补码) 操作数与操作码一起存放在代码段中。,指令操 作码,【例】 MOV AX, 10 源操作数为立即寻址方式,立即数为10, 存放在操作码单元的下一单元。 执行:10AX 执行后:(AX)=000AH,例 :MOV AL , 5 ;源操作数为立即寻址 执行后,(AL)= 05H ;8位
15、数据05H存入AL寄存器。 例 :MOV AX,3064H ;源操作数为立即寻址 执行后,(AX)=3064H ;16位数据3064H存入AX 寄存器。,2、 寄存器寻址,操作数在指令CPU内部寄存器中,由指令给出该寄存器地址。,指令中直接使用寄存器名,可以是8位或16位通用寄存器。 16位寄存器:AX、BX、CX、DX、 SI、DI、SP、BP; AX、BX、CX、DX可分成两个8位使用,例: MOV AX,CX ;(AX) (CX) ADD AL ,10 ;(AL) (AL)+10,下列程序段执行后,(AX)=?, (BX)=? MOV AX,1234H MOV BX,5678H ADD
16、AX,BX,执行:1234HAX 5678HBX (AX)+(BX)AX 执行后: (AX)=68ACH,(BX)=5678H,在源程序中存放操作数的主存单元的地址用逻辑地址表示: 段基值:偏移地址 段基值: 通常在某个段寄存器中;(隐含来源) 偏移地址: 存放操作数的内存单元与段基值之间的距离,由 CPU 的 EU 部分提供,又称为有效地址 EA;,3、存储器寻址方式,逻辑地址的来源,序 号,操作类型,逻辑地址,段基值,偏移量,隐含来源,允许替代来源,1 取指令 CS 无 IP,2 堆栈操作 SS 无 SP,3 取源串 DS CS、SS、ES SI,4 存目的串 ES 无 DI,5 以BP作
17、基址 SS CS、DS、ES 有效地址EA,6 存取存储器 DS CS、SS、ES 有效地址EA,操作数(除上述3、4、5项外),EA是由三个地址分量的某种组合求得的,它们分别是:,1) 8位或16位位移量:在源程序中 经常以符号形式或常数形式出现。 2)基地址:BX、BP 的内容 3)变址量:SI、DI 的内容,EA =,(1)、 直接寻址 指令的位移量字段直接提供操作数的有效地址EA; EA存放在代码段中指令操作码之后; 段基址隐含的由DS 指定,也可以ES、SS、CS指定(需在指令中指明); 操作数存放在存储器的数据段或附加段中;,物理地址=段寄存器*16 +EA,位移量: 用常数表示
18、例: MOV AX,ES : 2000H 将 ES : 2000H 单元内容送入AX。 ! 用常数表示时段寄存器必须指明。 例: MOV AX, 2000H 将常数 2000H 送入AX。,位移量: 用符号表示 例: MOV AX,VAR1 或 MOV AX, VAR1 将地址为 VAR1 (存放操作数单元的符号地址) ,即DS: VAR1 中的内容送入AX。,【例】 (AX)= 1212H , (DS)=3000H BUF为数据段定义的变量,其偏移地址是2000H,(32000H)=4545H。 执行指令:MOV AX ,BUF 执行后:(AX)= ? 执行:(32000H)AX 执行后:(
19、AX)= 4545H,EA =,SISI 作间址寄存器。 DIDI 作间址寄存器。 BXBX作间址寄存器。 BPBP 作间址寄存器。,(2)、 寄存器间接寻址,操作数在存储器中; 指令中给出寄存器名, 寄存器内容作为操作数所在单元的有效地址;,DS SS,例: MOV AX, BX ; 将BX 内容作为的地址的存储单元的内容送到AX寄存器。,0000,0001,0002,0003,BB,AA,TAB:,AX,AH AL,AA BB,间接寻址,数据段,0001,BX,执行指令:MOV AX ,BP 执行后:(AX)=?, (BP)=?, (SS)=?, (20030H)=?,【例】(AX)=0
20、(BP)=0030H (SS)= 2000H (20030H)=1234H,例:已知:(DS)=2100H,(DI)=2000H 指令: MOV AX,DI ;(AX) (DI) 物理地址=(DS) * 16 + (DI) =2100H * 16 + 2000H =21000H + 2000H =23000H 指令结果:将23000H单元内容送AL中, 将23001H单元内容送AH中。,(3)、 变址寻址,操作数在存储器中。 指令中给出寄存器名和位移量,DS DS DS SS,EA,例: (DS)=3000H (SI)= 2000H COUNT=3000H, 则执行指令 MOV AX,COUN
21、TSI 有效地址 = 2000H + 3000H = 5000H 物理地址 =(DS)*16 + 5000H =30000H + 5000H =35000H,【例2.3】,设执行前: (AX)=0040H, (BX)=0030H, (DS)=2000H, (20036H)=0050H 执行指令:ADD 6BX,AX 执行后:(AX)=?,(BX)=?, (DS)=?,(20036H)=?,执行:(20036H)+(AX) (20036H) 执行后:(AX)=0040H,(BX)=0030H, (DS)=2000H,(20036H)=0090H。,一维字数组 : A(0)、 A(1)、 A(2)
22、、 、 A(n),MOV AX , 200HSI,OP,00H,02H,DS,AX,SI,0004,段基址,A(2),数组起始单元,A(0),A(1),A(2),(4)、基址加变址寻址 EA 是指令中基址寄存器内容、变址寄存器内容、位移量三项之和,操作数在存储器中。,DS DS SS SS,例: MOV AX,BX+DI 或 MOV AX,BXDI DS:(BX)+(DI) 字存储单元内容送AX。 例: MOV AX,BP+SI 或 MOV AX,BPSI SS:(BP)+(SI) 字存储单元内容送AX。,例:如果 (DS)=2100H, (BX)= 0158H, (DI)=10A5H, 则执
23、行指令 MOV AL,BXDI后 有效地址:EA=(BX)+(DI) =0158H+10A5H=11FDH 物理地址:(DS) * 16 + 有效地址 =21000H+11FDH=221FDH 执行结果:将221FDH单元内容送入寄存器AL中。,(BX) (SI) DISP8 (BP) (DI) DISP16,有效地址=,+,+,例:已知:(DS)=3000H,(BX)=2000H, (SI)=1000H,MK=0250H 指令: MOV AX,MK BX SI 或 MOV AX,MK BX+SI 或 MOV AX, MK+BX+SI 有效地址:MK+(BX)+(SI) =0250H+2000
24、H+0100H=3250H 物理地址:(DS)*16 +有效地址 =30000H+3250H=33250H 执行结果:将33250H单元内容送AL,33251H内容AH。,二维字数组 : A(0,0)、 A(0,1)、 A(0,2)、 、 A(0,9) A(n,0)、 A(n,1)、 A(n,2)、 、 A(n,9),MOV AL ,A BPSI,SS,SI,BP,000AH,段基址,0007H,位移量A,A(0,0),A(0,8),A(1,8),A(0,9),A(1,0),A(1,9),AL,A(1,8),段超越 当操作数在内存单元时,系统根据隐含约定,自动将DS或SS的值作为段地址。 当操
25、作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。 形式为: 段寄存器名:操作数地址 功能:段寄存器名指明操作数属哪个段。 MOV AX,ES:BP ;段地址在ES MOV AX,CS:BX SI ;段地址在CS,逻辑地址的来源,序 号,操作类型,逻辑地址,段基值,偏移量,隐含来源,允许替代来源,1 取指令 CS 无 IP,2 堆栈操作 SS 无 SP,3 取源串 DS CS、SS、ES SI,4 存目的串 ES 无 DI,5 以BP作基址 SS CS、DS、ES 有效地址EA,6 存取存储器 DS CS、SS、ES 有效地址EA,操作数(除上述3、4、5项外),【例2.7】跨
26、段前缀示例。,MOVAX,DS:BP MOVCX,SS:SI 该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址由段寄存器内容左移4位加EA形成。上述2条指令的源操作数物理地址分别为: PA1 =(DS)左移4位+BP PA2 =(SS)左移4位+SI,二、 8086/8088指令系统,8086/8088的指令系统按操作数地址个数分为: (1)双操作数指令:指令中给出一个源地址SRC 和一个目的地址DST。 (2)单操作数指令:指令中给出一个操作数地址 A、若指令需要两个操作数,另一个操作数地址由指令隐含指定。 B、若指令需要一个操作数,该地址既是源地址又是目的地址。 (3
27、)无操作数指令 A、若指令不需要操作数。 B、若指令需要一个操作数,操作数地址由指令隐含指定。,返回,注意!在 8086/8088指令系统中除串操作指令外,其余所有指令只允许一个操作数在存储器中。对于双操作数指令,两个操作数不能同时都是存储器操作数。 8086/8088的指令系统可以分为6组: (1)传送类指令; (2)算术运算指令; (3)逻辑指令与移位指令; (4)串操作指令; (5)控制转移指令; (6)处理机控制指令;,1、传送类指令,(1) 数据传送指令 (2) 堆栈操作指令 (3 )标志寄存器传送指令 (4) 地址传送指令 (5 )输入输出指令,(1)数据传送指令 格式: MOV
28、DST,SRC ;DSTSRC 功能:将源操作数SRC复制到目的操作数DST中,结果目的操作数的内容等于源操作数的内 容,源操作数SRC的内容不变。 操作数可以是字或字节。但SRC与DST的位数必须一致。 对标志位的影响:无,DST :reg/mem/seg ; SRC :reg/mem/seg/imm (1)双操作数指令不允许两个操作数同时为段寄存器或存储器操作数。 MOV seg , seg ;错误 MOV mem ,mem ;错误 (2)立即数不能传送到段寄存器中。 MOV seg ,imm ; 错误 (3)目的操作数不允许使用CS段寄存器。 (4)dst与src必须类型匹配,即同时是字
29、节或字类型。,以下几点要注意: 寄存器具有明确的类型,例如,AL、AX分别为字节、字类型。 若立即数没有明确的类型,MASM负责将立即数扩展为与目的操作数位数相同。 有时MASM不能确定内存操作数的类型,需要用 ptr属性操作符明确指出是字节或字类型。,【例2.8】存储器与寄存器间数据传送。,MOV AX,BUF ;BUF是变量,源操作数为直接寻址 MOV BH,DI ;源操作数为寄存器间接寻址 MOV DI,ES:3SI ;源操作数为变址寻址,使用跨段 前缀 MOV BP,3BX+SI;源操作数为基址加变址寻址 MOV BUFA,DL;BUFA是一字节变量 MOV BP,AX;使用SS段寄存
30、器 MOV DS:BP,DL;使用跨段前缀 MOV BUF,DS;BUF是个字变量 MOV ES ,BUF,例:错误的MOV 指令如下所示: MOV AX,BL ;类型不匹配 MOV DS,1000H ;不允许立即数送段寄存器 MOV BX ,SI ;不允许内存操作数之间传送 MOV ES,CS ;不允许段寄存器之间传送 MOV CS,AX ;CS不能作为目的操作数 例:设B是已定义的字节变量,以下是一些错误和正确的指令。 MOV AX,B ;错误,类型不匹配 MOV A,0 ;正确,MASM可以判断出要送字节0,(2)数据交换指令XCHG,格式: XCHG DST,SRC 功能:将源地址与目
31、的地址中的内容互换。 ( SRC ) ( DST ), ( DST )( SRC ) 语法格式为: XCHG reg/mem,reg/mem,【例2.9】寄存器与存储器之间数据交换。 MOVAX,5678H;(AX)=5678H MOVBX,0FFFFH;(BX)=0FFFFH XCHGAX,BX ;(AX)=0FFFFH , ( BX)=5678H 例:XCHG BX ,BP+SI 如指令执行前:(BX)=6F30H,(BP)=0200H, (SI)=0046H,(SS)=2F00H, (2F246H)=5154H 目的操作数的物理地址=2F00+0200+0046=2F246 则指令执行后
32、:(BX)=5154H,(2F246H)=6F30H。,(3)、堆栈操作指令,作用:在调用一个过程时,保存返回地址; 暂时存放寄存器或存储器单元操作数 的内容。 1进栈指令PUSH 2出栈指令POP,操作:(SP) (SP)- 2, (SP)+1,(SP) (SRC),1进栈指令PUSH,语句格式: PUSH SRC 功能:将寄存器、段寄存器或存储器中 的一个字数据压入堆栈,堆栈指 针减2,2出栈指令POP,语句格式: POP OPD 功能: 将栈顶元素弹出送至某一通用寄存器、 段寄存器(除CS外)或存储器,堆栈指 针加2。,操作:(DST) (SP)+1,(SP), (SP) (SP)+2,
33、堆栈,SS:01F8,SS:01FA,SS:01FC,SS:01FE,SP,AA BB,(执行PUSH AX之前),堆栈,SS:01F8,SS:01FA,SS:01FC,SS:01FE,SP,AA BB,(执行PUSH AX之后),1101H,1101H,AX,堆栈,SS:01F8,SS:01FA,SS:01FC,SS:01FE,SP,AA BB,(执行POP AX之后),1101H,AX,1,2,3,(4) 地址传送指令,功能:将操作数所在存储器的地址送入目标寄存器。 1传送偏移地址指令 LEA 2传送地址指针指令LDS 3传送地址指针指令LES,传送偏移地址指令 LEA,格式: LEA r
34、eg16 , mem ; 功能:将源操作数的偏移地址送入指定16位通用寄存器。 【例2.15】主存偏移地址的获取。 MOV BX,0100H;(BX)=0100H MOV SI, 0210H;(SI) =0210H LEA BX,1234BX+SI; (BX)=1544H,LEA 指令与MOV 指令的区别: LEA SI,BUFF;将BUFF的偏移地址送入寄存器中; MOV SI,BUFF;将BUFF所指存储单元的内容入SI。,BUFF =,0,1,2,3,4,5,48,00,FE,FF,LEA SI,BUFF; 执行后:(SI)=0002H MOV SI,BUFF; 执行后:(SI)=004
35、8H,段起始地址,传送地址指针指令LDS、LES,格式: LDS reg16 ,mem32 ; LES reg16 ,mem32 功能:从存放地址指针的4个存储单元中(高字节单元中存放段基值,低字节单元中存放偏移量),同时取出段基值与偏移量,分别送到DS(ES)和通用寄存器中。 该指令常指定SI、DI寄存器。,10000H,10100H,(BUF),SI,00H,LEA SI,BUF,EA,EA +2,DS,SI,32位地址指针,段基址,LDS SI,ADDR-TABLEBX,FFH,偏移量,0100,DS,1000,100 EA,LDS或LES指令将源操作数指定的4个连续字节单元内容分别送入
36、指令指定的寄存器以及DS或ES中。低16位送到一个指定的通用寄存器,高16位送到 DS或ES中。,57H,13H,68H,24H,例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468H,DS:2480H,DS:2481H,DS:2482H,DS:2483H,13 57,24 68,SI,DS,LDS SI,2480,(5)标志寄存器传送指令,1标志送AH指令LAHF 2AH送标志指令SAHF 3标志寄存器进栈指令PUSHF 4标志寄存器出栈指令POPF,标志送AH指令 LAHF,格式:LAHF 功能:将标志寄存器的低8位送入AH寄存器。 (AH) (PSW低字节)
37、 该指令的执行对标志位无影响。 【例2.13】标志寄存器传送。 执行前(FLAGS)=0485H,(AX)=0FFFFH 执行指令:LAHF 后(AX)=0FF85,AH送标志指令SAHF,格式:SAHF 功能:将AH的内容送入标志寄存器的低8位。 (PSW低字节) AH 【例】将标志寄存器的低8位清零。 MOV AH,00H SAHF,标志寄存器进栈指令PUSHF,格式:PUSHF 功能:将标志寄存器的内容压入堆栈。 (SP) (SP)-2, (SP)+1,(SP) (PSW),标志寄存器出栈指令POPF,格式:POPF 功能: 将栈顶内容弹出送入标志寄存器中。 (PSW) (SP)+1,(
38、SP) (SP) (SP)+2,【例】将标志寄存器的单步标志TF置位。 PUSHF ;(FLAGS)(SP) POP AX ;(SP)AX OR AX, 0100H ;设置D8=TF=1 PUSH AX ;(AX)(SP) POPF ;(SP)FLAGS, 即(AX)FLAGS,说明: LAHF/SAHF指令是寄存器AH与标志寄存器 PSW的低字节之间完成的字节型数据传送。 PUSHF/POPF指令是标志寄存器PSW与堆栈间进行的字型数据传送。 指令SAHF/POPF将影响标志位。,输入输出指令,1输入指令IN 2输出指令OUT,1输入指令IN,输入指令用来从指定的外设寄存器取信息送入累加器。
39、它有四种形式: (1)语句格式:INAL,PORT 功能:(PORT)AL (2)语句格式:INAX,PORT 功能:(PORT)AX (3)语句格式:INAL,DX 功能:(DX)AL (4)语句格式:INAX,DX 功能:(DX)AL,2输出指令OUT,输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式: (1)语句格式:OUTPORT,AL 功能:(AL)PORT (2)语句格式:OUTPORT,AX 功能:(AX)PORT (3)语句格式:OUTDX,AL 功能:(AL)DX (4)语句格式:OUTDX,AX 功能:(AX)DX,3查表转换指令 XLAT,语句格式: XLAT
40、 OPS 或 XLAT 功能:将(BX)为基址,(AL)为位移量 的字节存储单元中的数据送AL寄 存器。 即(BX+AL)AL。,2. 算术运算类指令,2.1 加法指令 2.2 减运算指令 2.3 乘运算指令 2.4 除运算指令 2.5 符号扩展指令 2.6 十进制调整指令,(1) 加法指令,1加1指令 INC 2加指令ADD 3带进位加指令ADC 这三条指令运算结果将影响状态标志位(OF、SF、AF、ZF、PF,CF),但是INC指令不 影响标志CF。,1加指令ADD 格式: ADD DST,SRC 功能:将目的操作数与源操作数相加,结果存 入目的地址中,源地址的内容不改变。 即(DST)
41、(SRC)+(DST),R、M、Imm(8/16),R、M,1 1 1 0 0 1 0 1 B + 1 0 1 0 0 1 0 0 B 1 1 0 0 0 1 0 0 1 B CF=1; OF=0; PF=0 ;AF=0; SF=1; ZF=0,2带进位加指令ADC 格式: ADC DST,SRC; (DST) (SRC)+(DST)+CF 【例】无符号双字加法运算。 02344652H + F0F0F0F0H = ? MOV AX,4652H;(AX)=4652H ADD AX,0F0F0H;(AX)=3742H,CF=1 MOV DX,0234H;(DX)=0234H ADC DX,0F0
42、F0H;(DX)=0F325H,CF=0,3加1指令 INC 格式: INC OPD (R/M,无符号数) 功能:将目的操作数加1,结果送目的地址。即(OPD)+1(OPD) 加1指令可用于对计数器和地址指针进行调整。 INC BX ;(BX)+1(BX)。,(2)、减运算指令,1减1指令DEC 2减指令SUB 3求负指令NEG 4带借位减指令 SBB 5比较指令 CMP,以上五条指令均可作字或字节运算; 除DEC不影响CF外,其他都按一般规则影响状态标志位(OF、 SF、AF、ZF、PF, CF) 。,1减1指令DEC 格式: DEC OPR (R/M ,无符号数) 功能: (OPR) (O
43、PR)- 1 如:DEC CX。即(CX)1CX。 DEC也一般用于对计数器和地址指针的调整。,2减指令SUB 格式: SUB DST,SRC 功能: (DST) (DST)- (SRC),1 1 1 0 0 1 0 1 B - 1 0 1 0 1 1 0 0 B 0 0 1 1 1 0 0 1 B CF=0; OF=0; PF=1 ; AF=1; SF=0; ZF=0,【例】减法运算。 MOV AX ,5678H;(AX)=5678H SUB AX ,1234H;(AX)=4444H MOV BX ,3354H;(BX)=3354H SUB BX ,3340H;(BX)=0014H,3求负指
44、令NEG 格式:NEG OPR (OPR是带符号数补码表示) 功能: (OPR) 0-(OPR) 将目的操作数的每一位求反(包括符号位)后末位加1,结果送目的地址。 -128,-32768:OF=1,操作数不变。 0: CF=0,结果为0。 其余:CF=1 NEG指令影响SF、ZF、AF、PF标志。,【例】求补运算。 MOV AX,0FF64H NEG AL;(AX)=0FF9CH SUB AL,9DH;(AX)=0FFFFH NEG AX;(AX)=0001H DEC AL;(AX)=0000H NEG AX;(AX)=0000H,4带借位减指令 SBB 格式: SBB DST,SRC 功能
45、:(DST) (DST)-(SRC)-CF 用于大于16位数的相减运算。,5比较指令 CMP 格式: CMP DST,SRC 功能:(DST)-(SRC) 结果不保存,体现在OF、SF、ZF、AF、PF、CF 主要用于比较两个操作数的大小。 ZF = 1:DST = SRC 无符号数: CF = 0:DST SRC 带符号数: SF = OF:DST SRC SFOF:DST SRC,【例】比较AL的内容数值大小。 CMP AL,50;(AL)50 JBBELOW;(AL)=50,(AL)-50AL INC AH ;(AH)+1AH BELOW:,1、 深入认识CF和OF CF:表示无符号溢出
46、,即运算结果超出了无符号数的表示范围。 OF:表示带符号溢出,即运算结果超出了带符号数的表示范围。,2、CF和OF判断方法 (1)加法 CF的判断方法 从十进制角度来看: 若无符号加的结果大于2n-(n为位数),则CF=1,否则CF=0。 从二进制角度来看: 若结果最高位向前有进位,则CF=1,否则CF=0。,(1)加法 OF的判断方法 从十进制角度来看,若带符号加的结果不在范围-nn-1-1(n为位数)内,则OF=1,否则OF=0。 从二进制角度来看,若两个数同号,而相加结果与之异号,说明溢出,则OF=1,否则OF=0。 例:8位数加法,判断CF和OF,二进制加法 看作无符号数 看作带符号数
47、 0011 0000B 6 6 + 0000 1001B + 9 + 9,0011 1001B 15 15 CF=0 OF=0 0000 0111B 7 +7 + 1111 1011B +251 + (5),0000 0010B 258 +2 1 CF=1 OF=0 现为2结果错 0000 1001B 9 +9 + 0111 1100B + 124 +(+124),1000 0101B 133 +133 CF=0 OF=1 现为123,结果错 1000 0111B 135 (121) + 1111 0101B + 245 + (11),0111 1100B 380 132 1 CF=1 OF=
48、1 现为124,结果错 现为124,结果错,(2)减法 CF的判断方法 从十进制角度来看: 若无符号减数大于被减数,则CF=1,否则CF=0。 从二进制角度来看: 若结果最高位向前有借位,则CF=1,否则CF=0。,(2)减法 OF的判断方法 从十进制角度来看: 若带符号减的结果不在范围 -nn-1-1内,则OF=1,否则OF=0。 从二进制角度来看: 若两个数异号,而结果与被减数符号相反,说明溢出,则OF=1,否则OF=0。,(3) 乘运算指令,1无符号数乘法指令MUL 2有符号乘指令IMUL 乘法指令运算结果只影响状态标志CF、OF。,1无符号数乘法指令MUL,格式: MUL SRC (R
49、/M) 功能: (AX) (AL)*(SRC) 字节乘法 (DX,AX) (AX)*(SRC)字乘法 【例】无符号数0A3H与11H相乘。 MOV AL,0A3H;(AL)=0A3H MOV BL, 11H;(BL)=11H MUL BL ;(AX)=0AD3H,2带符号乘指令IMUL,格式: IMUL SRC (R/M) 功能: (AX) (AL)*(SRC) 字节乘法 (DX,AX) (AX)*(SRC)字乘法 【例】有符号数0B4H与11H相乘。 MOV AL,0B4H;(AL)=B4H MOV BL,11H;(BL)=11H IMULBL ;(AX)=0FAF4H,AH或DX中有乘积的
50、有效位:CF=OF=1 AH或DX内容全0或乘积的符号扩展:CF=OF=0 对CF、OF以外的条件标志无定义。 若乘积(AH)=11111111,则CF=OF=0 若乘积(AH)=11110111,则CF=OF=1 若乘积(AH)=00000000,则CF=OF=0 若乘积(AH)=00000100,则CF=OF=1,2.3.4 除运算指令,1无符号除指令DIV 2有符号除指令IDIV,1无符号除指令DIV 格式:DIV OPR (R/M) 字节除法: (AX)/(OPR)AL(商)、AH(余数) 字除法: (DX、AX)/(OPR)AX(商)、DX(余数),【例】写出实现无符号数0400H
51、/ 0B4H运算的程序段。 MOVAX,0400H;(AX)=0400H MOV BL,0B4H;(BL)=0B4H DIV BL ;商(AL)=05H,余数(AH)=7CH,对标志的影响未定义,可产生溢出。 (AL) 0FFH 或(AX) 0FFFFH 或 OPR=0 时产生除法错中断。,2有符号除指令IDIV 格式: IDIV SRC 字节除法: (AL) (AX)/(SRC)除法的商 (AH) (AX)/(SRC)除法余数 字除法: (AX) (DX,AX)/(SRC)除法的商 (DX) (DX,AX)/(SRC)除法余数 对标志的影响未定义,可产生溢出。 产生除法错中断: -127(8
52、1H) +127(7FH) -32767(8001H) +32767(7FFFH) OPR=0 8086/8088规定IDIV指令运算结果余数的符号与被除数相同.,【例】写出实现有符号数0400H /0B4H运算的程 序段。 MOVAX,0400H;(AX)=0400H MOVBX,0B4H;(BX)=0B4H IDIV BX;(AL)=0F3H,(AH)=24H,除法指令运算结果对状态标志无定义。 带符号数除法运算中,当被除数位数不够时,可进行扩展。,符号扩展指令,1字节转换成字指令CBW 2将字转换成双字指令CWD,1字节转换成字指令CBW 格式:CBW 功能:将AL中的符号位数据扩展至A
53、H。 【例】将字节数据扩展成字数据。 MOVAL,0A5H;(AL)=0A5H CBW ;(AX)=0FFA5H ADDAL,70H;(AL)=15H CBW ;(AX)=0015H,2将字转换成双字指令CWD 格式:CWD 功能:将AX中的符号位数据扩展至DX 。 【例2.30】将字数据扩展成双字数据。 MOVDX, 0;(DX)=0 MOVAX, 0FFABH;(AX)=0FFABH CWD;(DX)=0FFFFH (AX)=0FFABH,符号扩展指令: 字节扩展到字 CBW;将寄存器AL中的符号位扩展到寄存器AH 字扩展到双字 CWD;将寄存器AX中的符号位扩展到寄存器DX,7,0,AL
54、,7,0,AH,0,15,AX,DX,15,0,CBW,CWD,2.3.6 十进制调整指令,1压缩BCD码调整指令 2非压缩BCD码调整指令,5、压缩BCD码十进制调整指令 加法十进制调整 DAA; 执行的操作:这条指令执行前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在AL寄存器中。 减法十进制调整 DAS; 执行的操作:这条指令执行之前,必须先执行SUB或SBB指令,减法指令必须把两个BCD码相减,并把结果存放在AL寄存器中。,(1)加法的十进制调整指令DAA,语句格式:DAA 功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。 【例2.31】压缩BCD码的加法运算。 MOV AL,68H;(AL)=68H,表示压缩BCD码68 MOV BL,28H;(BL)=28H,表示压缩BCD码28 ADD AL,BL;二进制加法:(AL)=68H+28H=90H DAA ;十进制调整:(AL)=96H ;实现压缩BCD码加法:68+28=96,(2)减法的十进制调整指令DAS,语句格式:DAS 功能:如果(AF)=1或AL寄存器中低
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于劳动力转移视角的劳务品牌建设
- 公司章程内部管理制度
- 2024年贵州六枝特区城政建设有限责任公司招聘真题
- 劳模感谢发言材料
- 河南郑州工商学院招聘笔试真题2024
- 社区社区服务设施维护与管理基础知识点归纳
- 制造系统安全性和可靠性评估指标体系研究-洞察阐释
- 基于AI的生理学教学评估与学习效果提升
- 社区托育服务的质量监控与评估体系建设
- 造纸业企业经营管理方案
- 模板施工方案 加油站
- 预防校园欺凌和性侵主题班会
- 数字赋能合作社转型升级-深度研究
- 公共礼仪课程考试题及答案
- 2025年陇南村文书考试题及答案
- 仓储物流部经理述职报告
- 高考语文备考之人物传记文言文之《史记》《汉书》《后汉书》《三国志》(上)
- 健康产业运营管理协议
- 2024 年度中国汽车行业争议解决报告
- 公司委托经营代理合同范本
- 中医经络与穴位保健
评论
0/150
提交评论