微机原理第三章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章
3.1 寻址方式
指令系统
3.1.1 指令格式及操作数类型
1.指令格式 一般汇编指令格式如下: 指令助记符 [操作数1 [,操作数2]][;注释] 2.操作数类型 8086/8088系统中的操作数可以分为: (1).立即数操作数 (2).寄存器操作数 (3).存储器操作数 3.1.2 8086/8088的寻址方式
偏移量表达式由寄存器BX、BP、SI、DI之一和一常数共 同构成。以这二者之和作为被寻址内存单元的偏移量。 6.基址加变址寻址 基址加变址寻址中,操作数在内存中,且按以下方式给出其 逻辑地址: 段基址:段基址的给出仍同直接寻址。 偏移量:由“一个常数”+“BX、BP之一的内容”+“SI、 DI之 一的内容”三者之和作为偏移量。
1.立即寻址 当需要的操作数为常数时,操作数可以在指令中直接给出,
这种寻址方式称为立即寻址方式。 2.寄存器寻址 当指令所需要的操作数在寄存器中时,在指令中指出需访问 的寄存器名字即可,这种寻址方式称为寄存器寻址。 其寻址方式如下图所示。 3.直接寻址 在这种寻址方式中,操作数在内存 单元中,并且在指令中直接给出这一 单元的逻辑地址。 4.寄存器间接寻址 图3-1 寄存器寻址 在这种寻址方式中,操作数在内存 单元中,并且在指令中按如下方式给出这一单元的逻辑地址: 段基址:段基址的给出同直接寻址。 偏称量:以寄存器SI、DI、BP、BX之一的内容作为偏称量。 5.变址寻址 变址寻址基本上同寄存器间接寻址,只是逻辑地址中偏移量 的给出方式不同:
操作过程:①OPS的低字节←栈顶单元,SP←SP+1; ②OPS的高字节←栈顶单元,再次SP←SP+1。 例如:POP AX 执行前:AX=1234H,堆栈情况如图3-5(b)所示。 执行后:AX=1B5DH,堆栈情况如图3-5(a)所示。
图3-5栈操作命令示意图 3.交换指令XCHG和换码指令 (1).交换指令XCHG
AL←AX/(OPS)的商; AH←AX/(OPS)的余数 若OPS为字操作数,则实现操作为: AX←(DX:AX)/(OPS)的商; DX←(DX:AX)/(OPS)的余数 允许的操作数:可是通用寄存器或存储器,但不能是立即数。 OPS以及隐含的被除数都必须是无符号数。 (2).有符号数除法指令IDIV 格式:IDIV OPS 功能:字节操作:AL←AX/(OPS)的商, AH←AX/(OPS)的余数 字操作:AX←(DX:AX)/(OPS)的商, DX←(DX:AX)/(OPS)的余数 5.符号扩展指令 由于字节除法要求被除数为16位,字除法要求被除数为32 位,当被除数为8位或16位时,必须将其变为等值的16位或32位 形式.8086/8088中专门提供了符号扩展指令以方便这种操作。 (1).字节扩展为字指令CBW
注意:此指令无参数,将改变标志寄存器的低8位,但不影 响高8位。
图3-8SAHF传送示意图 (3).标志寄存器入栈指令 格式:PUSHF 功能:将标志寄存器的内容压入堆栈,同使SP←SP-2。 注意:此指令无参数,不影响标志位。 (4).标志寄存器出栈指令 格式:POPF 功能:将栈顶一个字的内容弹到标志寄存器中,同使 SP←SP+2。
应用:异或指令可以使一个操作数在其它位不变的情况下, 将某些位取反。要保持不变的位应与0相异或,要取 反的位应与1相异或。 (5).测试指令TEST 格式:TEST OPD,OPS 功能:OPD∧OPS,即OPD与OPS按位相“与”,结果不保存, 但影响标志位。 2.一般移位指令 一般移位指令包括4条指令,由于逻辑左移指令SHL与算术 左移指令SAL实质上是一条指令二个名字,因而实际只有3条 指令。这3条指令具有相同格式和相同的操作数要求,如下: 格式:SAL OPD,COUNT SHL OPD,COUNT SAR OPD,COUNT SHR OPD,COUNT 允许的操作数:OPD可以是通用寄存器或存储器操作数,字 或字节操作数。COUNT可以是1或CL,当移位次 数大于1时,需先将移位次数放入CL中,然后 以CL作为第二个操作数。
格式:XCHG OPD,OPS 功能:将两个操作数OPD与OPS的内容互换. 允许的操作数组合:交换可以在通用寄存器之间或通用寄存 器与存储器之间进行,OPD与OPS可以同 时是字节或字操作数。 (2).换码指令XLAT 格式:XLAT (格式1)或:XLAT OPS (格式2) 功能:XLAT指令将一种代码转换成另一种代码, 允许的操作数组合:该指令操作数全为隐含,换码表地址在 BX中,欲读取数据表单元偏移量在AL中。 对于格式2,虽然指令中有一个操作数OPS,OPS为表格的首 地址,但这个操作数仅是为提高程序的可读性而设置的,实 际上并不使用这个操作数。 4.地址传送指令 地址传送指令共有三条:LEA、LDS和LES,其中最常用的是 LEA指令,LDS和LES很少用到。
ቤተ መጻሕፍቲ ባይዱ
功能:OPD←OPD-OPS-CF。 (3).减1指令DEC 格式:DEC OPD 功能:OPD←OPD-1. (4).比较指令CMP 格式:CMP OPD,OPS 功能:OPD-OPS,但不保存运算的结果只是根据结果设置 状态标志位。 (5).求补指令NEG 格式:NEG OPD 功能:OPD←0-OPD. 允许的操作数:同INC指令 3.乘法指令 (1)无符号数乘法指令MUL 格式:MUL OPS 功能:实现二个无符号数的二进制乘法,可以为字或字节 乘法,由乘数OPS决定。
格式:CBW 功能:把AL中的符号位扩展到AH。即如果AL的最高位为0, 则AH=00H;如AL的最高位为1,则AH=FFH。 (2).字扩展为双字指令CWD 格式:CWD 功能:把AX的符号位扩展到DX。即如果AX的最高位为0,则 DX=0000H;如AX的最高位为1,则DX=FFFFH。 3.2.3 逻辑运算及移位指令 1.逻辑运算指令 (1).逻辑与指令AND 格式:AND 功能:OPD←OPD∧OPS. 允许的操作数组合:OPD与OPS的组合情况完全等同于ADD指 令,参图3-9所示。 应用:与指令可使一个操作数在其它位不变情况下将某些位 置0.要保持不变的位应与1相与要置0的位应与0相与。
(3).堆栈操作指令 ⊙入栈指令PUSH 格式:PUSH OPS 功能:将操作数OPS的内容压入堆栈中。 允许的操作数:OPS可以是通用寄存器,段寄存器或存储 器,必须为字操作数。 操作过程:①SP←SP-1,OPS的高字节→栈顶单元; ②再次SP←SP-1,OPS的低字节→栈顶单元。 例如:PUSH AX 执行前:AX=1234H,SP=2000H。堆栈情况如图3-5(a), 执行后:(1FFEH)=1B5DH,AX的内容不变。堆栈情况如图3 -5(b)所示(图3-5见下页)。 ⊙出栈指令POP 格式:POP OPS 功能:将堆栈栈顶内容弹出到操作数OPS中。 允许的操作数组合:OPS可以是通用寄存器,段寄存器 (CS除外)或存储器,必须为字操作数。
3.2
3.2.1
8086/8088指令系统
数据传送指令
1.通用数据传送指令MOV 格式:MOV OPD,OPS 功能:OPD是目的操作数,OPS是源操作数,该指令的功能是 将源操作数送至目的操作数中,即OPS→OPD。 允许的操作数组合:
OPS可为:立即数、通用寄存器、存储器、段寄存器。 OPD可为:通用寄存器、存储器、段寄存器 OPS和OPD可以有9种组合,如下图所示: (1)通用寄存器到通用寄存器 如:MOV AX,BX ; (2)立即数到通用寄存器 如:MOV AX,03H ; (3)立即数到存储单元 如:MOV BYTE PTR [2000H],12H (4)存储单元到通用寄存器 如:MOV AX,[2000H] ; (5)通用寄存器到存储单元 如:MOV [2000H],AX ; 图3-4 MOV指令传送示意图 (6)通用寄存器到除CS外的段寄存器 如:MOV DS,AX ;。 (7)段寄存器到通用寄存器 如:MOV AX,DS ;
5.标志寄存器传送指令 标志寄存器不能作为一般指令的操作数,8086/8088中专 门设置了针对标志寄存器的4条传送指令,如下: (1).标志寄存器送AH指令LAHF 格式:LAHF 功能:将标志寄存器的低8位送到AH中,如下图3-7所示。 注意:此指令无参数,也不影响标志位。
(2).AH送标志寄存器指令SAHF 格式:SAHF 功能:将AH的内容送到标志寄存器的低8位中,如图3-8所 示(见下页)。
(2).逻辑或指令OR 格式:OR OPD,OPS 功能:OPD←OPD∨OPS. 注意:除了完成的是按位“或”而不是按位“与”外,其它 情 况OR同AND一样。 应用:或指令可以使一个操作数在其它位不变的情况下,将 某些位置1.要保持不变的位应与0相或,要置1的位应 与1相或。 (3).逻辑非指令NOT 格式:NOT OPD 功能:OPD←OPD. 允许的操作数:OPD可以是通用寄存器或存储器,字或字节 操作数均可. (4).异或指令XOR 格式:XOR OPD,OPS 功能:OPD←OPD V OPS.
(1).有效地址传送指令LEA 格式:LEA OPD,OPS 功能:该指令把源操作数的偏移地址送到目的操作数中。 允许的操作数组合:OPD可以为任一16位通用寄存器,OPS 可以是地址表达式。 (2).数据段指针送寄存器指令LDS 格式:LDS OPD,OPS 功能:OPS是内存单元的地址,LDS指令将由OPS指定的内存 中读取一个双字的内容,并将低一个字赋给OPD,高一 个字赋给DS。 允许的操作数组合:OPD是一个16位通用寄存器,OPS是存 储器地址。 (3).附加段指针送寄存器指令LES 格式:LES OPD,OPS 功能:该指令与LDS相似,唯一区别在于将从OPS处读取的 高一个字的内容赋给ES。
(2).带进位加法指令ADC 格式:ADC OPD,OPS 功能:OPD←OPD+OPS+CF (3).加1指令INC 格式:INC OPD 功能:OPD←OPD+1。 允许的操作数:OPD可以是通用寄存器,存储器,字,字节操 作数. 2.减法指令 (1).二进制减法指令SUB 格式:SUB OPD,OPS 功能:OPD←OPD-OPS。 SUB指令可以实现8位数或16位数的减法,允许OPD与OPS同时 为字节或字操作数。 (2).带借位减法指令SBB 格式:SBB OPD,OPS
若OPS为字节操作数,则为字节乘法,被乘数隐含为AL,乘 积为16位数,放在AX中,即实现的操作为:AX←AL×OPS。 若OPS为字操作数,则为字乘法,被乘数隐含为AX,乘积为 32位数,高16位放在DX中,低16位放在AX中,即实现的操作 为:DX:AX←AX×OPS。 允许的操作数:OPS可以是通用寄存器或存储器但不能是立即 数.OPS以及隐含的被乘数都必须是无符号数。 (2).有符号数乘法指令IMUL 格式:IMUL OPS 功能:字节操作:AX←AL×OPS 字操作:DX:AX←AX×OPS 4.除法指令 (1).无符号数除法指令DIV 格式:DIV OPS 功能:实现两个无符号数二进制数除法,可以为字或字节除 法,由除数OPS决定。 若OPS为字节操作数,则实现操作为:
(8)存储器到除CS外的段寄存器 如:MOV ES,[2000H] ; (9)段寄存器到存储器 如:MOV [2000H],DS ; 2.堆栈及堆栈操作指令 (1).堆栈的概念 堆栈是内存的一个逻辑段,当这个段被指定为堆栈后,可 用堆栈操作指令对它进行特殊规则的访问,这个规则就是: 不论入栈还是出栈,都只能从栈顶处进行,堆栈内数据遵 循先进后出,后进先出的原则。 (2).堆栈的设置 8086/8088中专门有2个寄存器用于堆栈操作:堆栈段寄存 器SS和堆栈指针寄存器SP。 SS用来存放堆栈段的段基址,SP用于指示堆栈的顶部单元 的段内偏移量,开始时堆栈内没有数据,栈顶就是栈底,故 开始时要将栈底单元的偏移量赋给它,以指明栈低位置。
注意:此指令无参数,执行后各标志位的值由栈顶内容决定. 3.2.2 算术运算指令 1.加法指令 (1).二进制加法指令ADD 格式:ADD OPD,OPS 功能:OPD←OPD+OPS,ADD指令可以实现8位数或16位数 的加法,允许OPD与OPS同时为字节或字操作数。 允许的操作数组合:源操作数可以是通用寄存器、存储器 中或立即数;目的操作数可以是:通用寄存器或存储器。 OPD与OPS允许的组合有5种,如下图3-9所示。
相关文档
最新文档