8086 CPU指令系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§3.2.1 数据传送类指令
2. 地址传送指令
地址传送指令用来传送操作数的地址。 地址传送指令用来传送操作数的地址。 (1)LEA reg16,s ) ,
LEA是一条取偏移地址的指令, LEA是一条取偏移地址的指令,它用来将源操作数 是一条取偏移地址的指令 (必须是存储器操作数 的偏移地址传送到16位通用寄存器 必须是存储器操作数)的偏移地址传送到 位通用寄存器 必须是存储器操作数 的偏移地址传送到 中。 假设有存储单元如下图所示,则下面程序执行后, 假设有存储单元如下图所示,则下面程序执行后, DI等于源操作数55AAH,SI等于源操作数55AAH的偏移 地址0510H。
该指令从目的操作数减去源操作数, 该指令从目的操作数减去源操作数,结果存入目的 操作数中。 操作数中。状态标志受影响的情况以及对操作数的规定 指令相同。例如: 与ADD指令相同。例如: SUB BX,CX ;BX←BX-CX SUB [BX+SI],AL ;DS:[BX+SI]←DS:[BX+SI]-AL + , + + - (2)SBB(Subtract with Borrow) 带借位位减法指令, 带借位位减法指令,它从目的操作数减去源操作数 当前值,结果送回目的操作数, 及借位标志CF当前值,结果送回目的操作数,其余类似 SUB指令。该指令主要用于多字节减法运算。 指令。该指令主要用于多字节减法运算。
指令系统中提供了以下四条标志传送指令: 指令系统中提供了以下四条标志传送指令: LAHF ;标志寄存器的低8位送AH SAHF ;AH的内容送标志寄存器低8位 PUSHF ;标志寄存器内容进栈 POPF ;栈顶内容送标志寄存器 其中, 指令将直接影响标志位, 其中,SAHF和POPF指令将直接影响标志位,而其 他传送指令均不会对标志位产生影响。 他传送指令均不会对标志位产生影响。
数据传送类指令§3.2.1.2 数据传送类指令 地址传送指令
MOV AX,200H MOV DS,AX 0200:0000H MOV BX,500H MOV DI,[BX+10H];DI=55AAH LEA SI,[BX+10H] ;SI=0510H
… …
0200:0510H AA 0200:0511H 55
数据传送类指令§3.2.1.3 数据传送类指令 标志传送指令
标志传送指令专门用于对标志寄存器进行操作。 标志传送指令专门用于对标志寄存器进行操作。8086 指令系统中许多指令的执行结果会影响标志寄存器, 指令系统中许多指令的执行结果会影响标志寄存器, 而标志寄存器中有些控制位的状态也会影响某些指令的 执行,为方便对标志寄存器中一些控制位的操作。 执行,为方便对标志寄存器中一些控制位的操作。8086
该指令称为换码指令。执行的操作为: 该指令称为换码指令。执行的操作为: AL←DS:[BX+AL]。完成一个字节的查表转换。表(一个 。完成一个字节的查表转换。 一个 字节存储区)的长度可达 的长度可达256字节,表头地址在 寄存器 字节, 字节存储区 的长度可达 字节 表头地址在BX寄存器 指令执行时,根据AL中预先给定的表内偏移 中预先给定的表内偏移, 中。指令执行时,根据 中预先给定的表内偏移,把表 中对应单元的数据传送到AL累加器中 累加器中, 中对应单元的数据传送到 累加器中,达到字节转换之 不影响标志寄存器。 目的。该指令不影响标志寄存器 目的。该指令不影响标志寄存器。
§3.2.1 数据传送类指令
POP这条指令的执行仍然分两步:第一步,SP指示 这条指令的执行仍然分两步:第一步, 指示 这条指令的执行仍然分两步 的栈顶单元中的内容弹出到CX寄存器中 第二步, 寄存器中; 的栈顶单元中的内容弹出到 寄存器中;第二步,调整 SP,使SP+2→SP。 , + 。
(4)XLAT
§3.2.1 数据传送类指令练习
指出下列指令中的非法指令,想一想错在哪里? 指出下列指令中的非法指令,想一想错在哪里? (1) MOV BX,AL (2) MOV BH,AL (3) MOV 100,CL (4) MOV CL,100 (5) MOV SS,2400H (6) XCHG AH,AL (7) MOV AL,AL (8) XCHG 200,AL (9) OUT 21H,AL (10) OUT 21H,AH (11) OUT 260H,AL (12) MOV [BX],BX (13) MOV [AX],CX (14) MOV [BX],BL
(3)PUSH s 和 POP d )
PUSH和POP是两条堆栈操作指令,分别称为进栈指 和 是两条堆栈操作指令, 是两条堆栈操作指令 令和出栈指令,堆栈操作不影响标志寄存器。 令和出栈指令,堆栈操作不影响标志寄存器。
§3.2.1 数据传送类指令
PUSH指令把一个源操作数(字)送至SP所指的现 指令把一个源操作数( 行堆栈栈顶单元,源操作数可以是寄存器( 除外) 行堆栈栈顶单元,源操作数可以是寄存器(IP除外)或 存储器单元,例如: 存储器单元,例如: PUSH AX 执行这条指令分两步:第一步, 执行这条指令分两步:第一步,SP-2→SP,SP指 向新栈顶;第一步, 向新栈顶;第一步,把AX中的内容压入SP所指的堆栈单 存储器单元) 元(存储器单元)中。 POP指令把SP指出的现行堆栈栈顶中的一个字传送 到目的操作数中,目的操作数可以是寄存器( 除外) 到目的操作数中,目的操作数可以是寄存器(IP除外) 或存贮单元,但一般不使用CS寄存器作为目的操作数, 或存贮单元, 寄存器作为目的操作数, 因为这将会改变程序的执行顺序。例如: 因为这将会改变程序的执行顺序。例如:POP CX
数据传送指令用在寄存器, 数据传送指令用在寄存器,存储器或输入输 出端口之间传递数据或地址。 出端口之间传递数据或地址。 1. 通用数据传送指令
; d← s (1)MOV d,s MOV 指令将源操作数src传送到目的操作数d, 该指令不影响标志寄存器。 可以是通用寄存器、 该指令不影响标志寄存器。 s可以是通用寄存器、段 寄存器、立即数和存储器操作数; 寄存器、立即数和存储器操作数; d可以是通用寄存 段寄存器和存储器操作数, 器、段寄存器和存储器操作数, s和d必须有一致的 类型(都是8位或都是16位)。当目的操作数为段寄存 类型( 当操作数不是立即数时, 器时,源操作数不能为立即数,当操作数不是立即数时, 两个操作数中必须有一个是寄存器。 两个操作数中必须有一个是寄存器。
(2)ADC(Add with Carry)
该指令除了加运算时同时加上进位位CF以外,其余 以外, 指令一样, 和ADD指令一样,这条指令主要用于多字节加法运算。 例如, 例如,为实现双字加法DXAX←DXAX+BXCX,可用如 下指令实现: 下指令实现: ADD AX,CX ADC DX,BX
(3)INC (Increment Desபைடு நூலகம்ination by 1)
§3.2.1 数据传送类指令总结
立即数 通用 寄存器 DS、ES、SS 、 、 CS
数据传送方向示意图
存储器
§3.2.1 数据传送类指令总结
1、在数据传送指令中要注意: 、在数据传送指令中要注意
a. 立即数只能作为源操作数; 立即数只能作为源操作数; b.无存储器之间直接传送与交换的指令; 无存储器之间直接传送与交换的指令; 无存储器之间直接传送与交换的指令 c.不能用传送指令给 和IP置新值; 不能用传送指令给CS和 置新值 置新值; 不能用传送指令给 d.没有用立即数对段寄存器直接置值的指令。 没有用立即数对段寄存器直接置值的指令。 没有用立即数对段寄存器直接置值的指令
2、除SAHF和POPF指令外,传送指令皆不影响标 、 指令外, 和 指令外 志寄存器的值。 志寄存器的值。 3、除XCHG和XLAT指令外,数据传送指令皆不 指令外, 、 和 指令外 破坏源操作数。 破坏源操作数。 4、 XCHG指令不能用段寄存器作为源操作数。 指令不能用段寄存器作为源操作数。 、 指令不能用段寄存器作为源操作数 5、段寄存器之间无传送指令。 、段寄存器之间无传送指令。
图3-3存储单元情况 存储单元情况
数据传送类指令§3.2.1.2 数据传送类指令 地址传送指令
(2)LDS reg16,s 和 LES reg16,s
取地址指针指令。其功能是将源操作数的有效地址 取地址指针指令。 所对应的双字存储单元中的高16位内容送入DS(或ES), 低16位内容送入指令指定的16位通用寄存器。例如:设 例如: 某双字存储单元偏移地址为3000H,双字数据为 12345678H,则有: 则有: LDS SI, [3000H] ; DS=1234H, SI=5678H LES DI, [3000H] ; ES=1234H, DI=5678H 这种指令不影响标志寄存器 不影响标志寄存器。 这种指令不影响标志寄存器。
(1)、(3)、(5)、 (7)、(8)、(10) 、(11) 、(13)为非法指令 、 、 、 、 、 为非法指令
算术运算指令§3.2.2.1 算术运算指令 加法指令
(1)ADD(Addition) ) ( )
该指令将两个字节或字操作数相加, 该指令将两个字节或字操作数相加,其结果送到目 的操作数, 的操作数,受影响的状态标志是AF、CF、DF、OF、ZF 源操作数可以是通用寄存器、存储器和立即数, 和SF。源操作数可以是通用寄存器、存储器和立即数, 目的操作数可以是通用寄存器和存储器。应用时注意, 目的操作数可以是通用寄存器和存储器。应用时注意, 并且类型必须一致。 两操作数不能同时为存贮器操作数,并且类型必须一致。 例如: 例如: ADD AX,BX ADD AL,40H ADD [BX+SI+64H],AX; DS:[BX+SI+64H]←DS:[BX+SI+64H]+AX
数据传送类指令§3.2.1.4 数据传送类指令 输入输出指令
计算机和输入输出设备交换信息是通过它们之间的 接口电路实现的。 接口电路实现的。每一个接口电路都分配一个或若干个 地址, 端口(port)地址,IN和OUT指令是8086为独立的I/O编址 指令。 方式提供的两条专用I/O指令。 利用IN和 指令, 利用 和OUT指令,可以从端口接收8位或16位数据 指令 到累加器AL或AX,或者把累加器AL或AX中的8位或16 位数据传送到端口port。当port地址能用单字节表示时, 地址能用单字节表示时, 。 地址能用单字节表示时 可用直接寻址方式,否则,需要借助DX寄存器 寄存器, 可用直接寻址方式,否则,需要借助 寄存器,用寄存 器间接寻址。 器间接寻址。如: MOV DX,278H ;设置端口地址 , IN AX,DX ;字输入(278H端口的内容读入 字输入( 端口的内容读入AL, 279H , 端口的内容读入 端口的内容读入AH) 端口的内容读入 )
§3.2 8086指令系统 指令系统
8086指令系统按其功能可分为下面几种类型: 指令系统按其功能可分为下面几种类型:
· · · · · · · 数据传送指令 (Data transfer instructions) 算术运算指令 (Arithmetic instructions) 逻辑运算指令 (Logic instructions) 移位指令 (Shift instructions) 程序控制指令 (Program control instructions) 串指令 (String instructions) 处理器控制指令( 处理器控制指令(Processor control instructions) )
这是一条单操作数指令, 这是一条单操作数指令,它将操作数加 1,结果仍 返回该操作数。 返回该操作数。受影响的状态标志是OF、SF、ZF、AF 和PF(不影响CF)。操作数可以是8/16位的通用寄存器和 存储器。 存储器。
算术运算指令§3.2.2.2 算术运算指令 减法指令
(1)SUB(Subtract) ) ( )
§3.2.1 数据传送类指令
(2)XCHG d,s ) ,
XCHG指令将源操作数与目的操作数互换 两操作数 指令将源操作数与目的操作数互换.两操作数 指令将源操作数与目的操作数互换 可以是通用寄存器和存储器,要求都是8位或都是 位或都是16位 可以是通用寄存器和存储器,要求都是 位或都是 位, 至少有一个操作数必须是通用寄存器。 至少有一个操作数必须是通用寄存器。指令执行后不影 响标志寄存器。 响标志寄存器。如: XCHG AX,BX BX ;AX XCHG SP,CX CX ;SP
相关文档
最新文档