1 / 115

吉林大学远程教育学院

吉林大学远程教育学院. 微机原理及汇编语言. 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院. 第 六 讲. 第 2 章 8088 指令系统. 指令: 控制计算机完成指定操作的命令 指令系统: 所有指令的集合 8088/8086 指令系统是所有 x86 系列 CPU 指令系统的基础, 80286 、 80386 乃至于 Pentium 等新型 CPU 指令是在这个基础上做了一些扩充。 8088 指令系统共包含 92 种基本指令 8088 指令按照功能分为 6 大类: 数据传送类 算术运算类

gail-wiley
Download Presentation

吉林大学远程教育学院

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 六 讲

  2. 第2章8088指令系统 • 指令:控制计算机完成指定操作的命令 • 指令系统:所有指令的集合 • 8088/8086指令系统是所有x86系列CPU指令系统的基础,80286、80386乃至于Pentium等新型CPU指令是在这个基础上做了一些扩充。 • 8088指令系统共包含92种基本指令 • 8088指令按照功能分为6大类: 数据传送类 算术运算类 逻辑运算和移位 串操作 控制转移类 处理器控制

  3. 指令的基本构成 • 指令助记符包括操作码和操作数,指令长度一般在1~6个字节之间 • 操作码:表示指令完成什么样的功能 • 操作数:指令的操作对象(操作数可以是:双操作数,即源操作数和目的操作数;单操作数;隐含操作数) • 指令的一般格式: 操作码 [操作数],[操作数];[注释] • 操作数的一般形式: 1.立即数操作数(具有固定数值的操作数,即常数,8位或16位。只能用作源操作数) 2.寄存器操作数(如8个通用寄存器,段寄存器) 3.存储器操作数(可以作源操作数或目的操作数) 4.I/O端口操作数(可以作源操作数或目的操作数)

  4. 2.1 8088的寻址方式 • 寻址方式:获得操作数地址的方法 • 寻址方式通常有6种: 1.立即寻址 2.直接寻址 3.寄存器寻址 4.寄存器间接寻址 5.变址寻址 6.基址加变址寻址 • 为了适应各种数据结构,指令中的段内偏移量可以由几个部分组成,称之为有效地址EA。

  5. M M AH AL 操作码 操作码 立即数 码段 码段 低8位 02H 高8位 31H 立即寻址(Immediate Addressing) • 操作数紧跟在操作码后面,与操作数一起存放在一个代码段区域中。可以是8位也可以16位。 • 例如:MOV AX, 3102H

  6. 操作码 DS 2000 0 码段 02 20000 31 3102 + 23102 40 30 40 23102 AX 30 23103 直接寻址(Direct Addressing) • 直接寻址时,有效地址(EA )直接包含在指令中,紧跟在操作码之后。 • 例如 • DS=2000H • MOV AX, [3102H]

  7. DS AH AL 执行结果送DS 寄存器寻址(Register Addressing) • 操作数存放在指定的寄存器中,对于16位数据,寄存器有AX、BX、CX、DX、SI、DI、SP、BP • 例如:MOV DS, AX

  8. EA= (BX) (SI) (DI) (BP) 码段 AH AL 数据段 44H 61200H 33H 61201H 执行结果(AX)=3344H 寄存器间接寻址(Register Indirect Addressing) • 寄存器中的内容是操作数的偏移地址,操作数存放在存储器中。(SI、DI、BX、BP) 例如:MOV AX,[SI] DS=6000H SI=1200H

  9. DS: 6000 0 操作码 码段 操作码 08 60000 BX: 1000 DATA: + 0008 61008 低字节 高字节 00 61008 66H 55H 数据段 AH AL AX 变址寻址(Index Addressing) • 操作数放在存储器中,寄存器(SI、DI、BX、BP)内容作为间接地址,加上指令中给出的8位或16位偏移量(相对值),形成操作数的有效地址。 • 段寄存器由间址寄存器决定。 • 例:MOV AX,DATA[BX]

  10. 吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 七 讲

  11. DS 8000 0 操作码 DS : 80000 BX: 1000 SI: + 2000 83000H 码段 40 30 40 83000 AX 数据段 30 83001 基址加变址寻址(1) • 有效地址为:基址寄存器(BX、BP)内容加变址寄存器(SI、DI)内容。 • BX的默认段寄存器DS。BP的默认段寄存器是SS. 例如:MOV AX, [BX][SI]

  12. DS 8000 0 操作码 码段 DS : 80000 BX: 1000 DI: + 2000 DATA: + 0200 83200H DATA 00 02 40 30 40 83200 AX 数据段 30 83201 基址加变址寻址(2) • 有效地址为基址寄存器内容加变址寄存器内容加8位或16位偏移量。默认段寄存器DS或SS • 例如:MOV AX,DATA[BX][DI]

  13. 字节1 字节2 字节3、4 字节5、6 7 2 1 0 7 6 5 4 3 2 1 0 7· · · 0 7· · · · ·0 7· · · · · 0 7· · · · · 0 OP code D w MOD REG R/M DISPL DISPH DATAL DATAH 操作码字节 寻址方式字节 位移量 立即数 8086指令格式(1) • 8086/8088指令是由1~6个字节组成。 • 第一字节通常为指令的操作码。它表示该条指令要进行什么样的操作。 • OP code为操作码,表示该指令要完成的操作。 • D=0:第一个操作数是目的操作数, 1:第二个操作数是目的操作数 • W=0:8位操作数, 1:16位操作数 • MOD指明寻址方式: MOD=11 寄存器寻址 • MOD≠11存储器寻址 • 00没有偏移量 01 8位偏移量 1016位偏移量 • REG用编码方式指明操作中所使用的寄存器。 • R/M用编码方式指出存储器有效地址计算方法。 • DISP表示地址偏移量。DATA则指明立即数。

  14. 8086指令格式(2) • R/M(寄存器/存储器)编码及有效地址计算方法 例:ADD DISP[BX][DI],DX DISP=2145H 000000 0 1 10 010 001 01000101 00100001 操作码 D W MOD REG R/M 位移量低 位移量高 D=0 源操作数是寄存器操作数 W=1 操作数是16位 操作码是: 01914521H

  15. 2.2 8088的标志寄存器 标志寄存器FLAG • 16位,其中有6个状态位、3个控制位 • 6个状态位:CF、PF、AF、ZF、SF、OF • 3个控制位:IF、DF、TF

  16. 吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 八 讲

  17. 8088的标志寄存器 (1) 标志寄存器FLAG(状态位) • 进位标志CF,反映算术运算后,最高位(字节操作为D7,字操作为D15)出现进位(或借位)的情况,有则为“1” • 奇偶标志PF,反映操作结果中“1”的个数的情况,若为偶数,PF=1 • 辅助进位标志AF,反映一个8位量的低4位向高4位有无进位(或借位)的情况,有则置“1”

  18. 8088的标志寄存器 (2) 标志寄存器FLAG(状态位) • 零标志ZF,反映运算结果是否为零的情况,结果为零,ZF置为“1” • 符号标志SF,反映运算结果的符号情况,若结果为负数,SF为“1”。SF的取值与运算结果最高位(字节操作为D7,字操作为D15)一致 • 溢出标记OF,反映带符号数运算结果是否超过机器所能表示的数值范围的情况,对字节运算为-128~+127,对字运算为-32768~+32767。若超过上述范围则称为“溢出”,OF=1

  19. 8088的标志寄存器 (3) 标志寄存器FLAG(控制位) • 方向标志DF,在进行字符串操作时,每执行一条串操作指令,对地址要进行一次调整,由DF决定地址是增还是减。若DF=1,则为减量;若DF=0则为增量 • 中断允许标志IF,表示系统是否允许外部的可屏蔽中断。若IF=1,表示允许中断。IF对非屏蔽中断及内部中断请求不起作用 • 跟踪标志TF,当TF=1时,CPU每执行完一条指令,便自动产生一个内部中断,对程序进行逐条检查,常用于程序的调试

  20. 2.3 指令系统 • 六个功能组: ①数据传送 (Data Transfer) ②算术运算 (Arithmetic) ③逻辑运算 (Logic) ④串操作 (String manipulation) ⑤控制传送 (Control Transfer) ⑥处理器控制 (Processor Control)

  21. 8088 CPU各类常用指令助记符

  22. 寄存器、缩写、符号 • 意义 • OPRD • 操作数 • mem • acc • dest • Src • disp • DATA • port • ( ) • 存储器操作数 • 累加器操作数 • 目的操作数 • 源操作数地址 • 8位或16位偏移量 • 8位或16位立即数 • 输入输出接口 • 表示寄存器的内容 • [ ] • 存储单元内容或偏移地址 指令中的符号

  23. 吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 九 讲

  24. 数据传送类指令 • 使用最频繁的指令,包括: • 一般数据传送:MOV、PUSH、POP、CBW • 输入输出指令:IN、OUT • 地址传送指令:LEA • 标志传送指令:PUSHF、POPF • 可以实现: • 一次可以传送8位,也可以传送16位 • 传送的位数取决于寄存器长度和立即数长度 • 可以使用各种寻址方式

  25. 数据传送类指令-通用数据传送指令(1) 1.传送指令 MOV • 指令格式:MOV dest,src • 功能:将一个操作数从源地址传送到目的地址,而源地址中的操作数不变 • 类型: • ① 通用寄存器之间的传送 MOV AL, BL MOV AX, DX MOV SI, BP MOV BX, DI MOV DL, CH

  26. 数据传送类指令-通用数据传送指令(2) • ②寄存器与存储器之间的传送 MOV [BX],AX ;寄存器到存储器 若(DS)=6000H ,(BX)=1200H,(AX)=1234H 执行后(61200H)=34H (61201H)=12H MOV CL,[BP][DI] 将SS段的偏移地址(BP)+(DI)存储单元内容送CL。 如(SS)=8000H,(BP)=1020H, (DI)=0383H,(813A3H)=55H 执行后 (CL)=55H MOV AX,[6000H] 将DS段的6000H和6001H两个单元的内容送AX。 • ③立即数传送至CPU的通用寄存器 MOV AL,5 MOV BX,3078H

  27. 吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 十 讲

  28. 执行前DS 81000H • 00H • 8000H 81001H • 20H 执行后DS • 2000H 数据传送类指令-通用数据传送指令(3) • ④立即数到存储器的传送 MOV BYTE PTR[BP+SI],5;5→SS:(BP+SI) MOV WORD PTR[BX],1005H;05H→[DS:(BX)], 10H→[ DS:(BX+1)] MOV WORD PTR [DI] ,2000H ;将立即数2000H存放到以DI的内容为地址指针的相邻两个单元中 • ⑤寄存器与段寄存器之间的传送 MOV DS,[1000H] MOV [BX],ES 若执行前: DS=8000H (81000H)=00H (81001H)=20H ES=4000H BX=1200H 执行以上两条指令之后: DS=2000H ;第一条指令执行完 (21200H)=00H ;第二条指令执行完 (21201H)=40H。

  29. MEM2+0 MEM1→SI,MEM2→DI,200→CX [SI] →AL,AL →[DI] MEM1+0 • C7H • C6H INC SI,INC DI DEC CX MEM2+199 CX=0? • 01H N MEM1+199 • 00H 结束 数据传送类指令-通用数据传送指令(4) • 例:把内存中首地址为MEM1的200个字节送到首地址为MEM2的区域中,编程。 MOV SI,OFFSET MEM1 MOV DI,OFFSET MEM2 MOV CX,200 NEXT:MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ NEXT HLT

  30. SS 低 : : 增长方向 栈顶SP 高 数据传送类指令-通用数据传送指令(5) 2.堆栈操作指令 • 堆栈的概念  堆栈是内存中一个特定的区域,用以存放寄存器和存储器中暂时不用又必须保存的数据 • 段寄存器是SS • 存取原则:以字为单位 • 从高地址向低地址存放 • 只能是寄存器或存储器操作 • 所在段由SS决定 • SP总是指向栈顶。 • 遵循后进先出。

  31. SP-2 SP-1 SP • AH • AL 数据传送类指令-通用数据传送指令(6) • ①入栈指令 PUSH • 指令格式:PUSH Src • 将16位操作数送至由堆栈指针SP所指向的堆栈的顶部,然后修改堆栈指针SP。 • Scr可以是: • 寄存器(数据寄存器、IP、变址寄存器) • 段寄存器 • 两个连续地存储单元 • 例:PUSH AX • 操作过程 AH→[(SP)-1 ];AH入栈 AL→[(SP)-2] ;AL入栈 (SP)-2→(SP)

  32. SP SP+1 SP+2 xxH yyH • BH • BL 数据传送类指令-通用数据传送指令(7) • ②出栈指令 POP • 指令格式:POPdest • 把SP指向的栈顶的一个字送至目标地址, 并修改堆栈指针SP。(不能POP CS) • 例:POP BX (SP)→BL ;栈顶数据送BL (SP+1)→BH ; 下一单元内容送BH SP+2→(SP);堆栈指针加2 • SP总是指向下一个要出栈的存储单元。

  33. 9E1FCH DH DL AH AL 90 00 9E200H 00H 90 00 90H FFH AH AL 执行PUSH指令之后 DH DL 38 FF 38H 38 FF 00H 90H FFH 38H 92000H 执行POP指令之后 数据传送类指令-通用数据传送指令(7-1) • 例 MOV AX, 9000H MOV SS, AX MOV SP, 0E200H MOV DX, 38FFH PUSH DX PUSH AX : POP DX POP AX

  34. 吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 十一 讲

  35. 数据传送类指令-通用数据传送指令(8) 3.交换指令 • XCHG dest,src • 功能:把一个字或一个字节的目的操作数与源操作数交换。 • 类型: • 说明:不能在存储器与存储器之间进行,交换不能是段寄存器的内容,字长必须相同 • 例:XCHG AX, BX ;AX↔BX XCHG BL, [2000H] XCHG CL,DL ;CL ↔DL XCHG AX,BUFFER ;AL ↔(BUFFER) ;AH ↔(BUFFER+1)

  36. 数据传送类指令-累加器专用指令(1) 1. 输入指令 IN • 直接寻址I/O 指令和寄存器间接寻址I/O 指令 • 直接寻址指令包含了一个8位的I/O地址,允许寻址256个端口。 • 间接寻址指令由DX指出,包含了一个16位的I/O地址,允许寻址65536个端口。 • 直接寻址端口地址00H~FFH • 间接寻址端口地址0000H~FFFFH • IN AL,n ;[n] →AL,n是8位数据端口地址 • IN AX,n ;[n+1] ,[n] →AX • IN AL,DX ;[(DX)] →AL,(DX)是8位数据端口地址 • IN AX,DX ;[(DX)+1] ,[(DX)] →AX

  37. 数据传送类指令-累加器专用指令(2) 2. 输出指令 OUT • OUT n ,AL ;AL→[n] • OUT n ,AX ;AX→[n+1] ,[n] • OUT DX ,AL ;AL→[(DX)] • OUT DX ,AX ;AX→[(DX)+1] ,[(DX)]

  38. 数据传送类指令-累加器专用指令(3) 3. XLAT (查表转换) • 格式:XLAT 转换表 • 功能:从转换表中查找出一个字节的内容,取代AL内容。隐含寻址,有效地址EA=(BX)+(AL) 即将EA为偏移地址的存储单元单字节内容 →AL • 过程:转换表最长256字节, BX←表始址,AL←表内位移 • 例:有0-9的ASCII码表,首地址TABLE,要求将2转换成对应的ASCII码。 MOV BX, OFFSET TABLE MOV AL, 02H XLAT TABLE TABLE+0 TABLE+1 : : TABLE+8

  39. 数据传送类指令-地址目标传送指令(1) 1. LEA(装入有效地址) • 格式:LEA 寄存器,存储器 • 功能:把存储器操作数所在的16位偏移量传送到16位长的通用寄存器中。 • 例:LEA BX,MEM 结果:BX=2000H LEA BX,BUFFER ;将16位偏移地址→寄存器 MOV AL,[BX] ;存储单元[BX]内容→AL MOV AH,[BX+1] ;存储单元[BX+1]内容→AH,

  40. 数据传送类指令-地址目标传送指令(2) 2. LDS(装入数据段指针) • 格式:LDS 寄存器16,存储器32 • 功能:将源操作数的双字指针(段基址:偏移量)低字送目标寄存器,高字送DS。 16位寄存器操作数可为BX、BP、SI、DI 中的一个。32位存储器操作数,给出内存连续4个单元的首地址: 低地址单元相邻两个字节是偏移量→寄存器 高地址单元相邻两个字节是段基址→DS • 例:LDS SI,ADDR

  41. 数据传送类指令-地址目标传送指令(3) 3. LES(装入附加段指针) • 格式:LES 寄存器,存储器 • 功能:将源操作数的双字指针(段基址:偏移量)低字送目标寄存器,高字送ES。 • 例:LES DI,ADDR

  42. AH→ FLAG→ SF ZF AF PF CF 数据传送类指令-状态标志传送指令 1. LAHF(装入AH) • 格式:LAHF • 功能:把FLAG低8位送入AH,标志本身不受影响. 2. SAHF(设置标志) • 格式:SAHF • 功能:AH→FLAG低8位 3. PUSHF(标志入栈) • 格式:PUSHF • 功能:①SP-2→SP ②FLAG→(SP) 4. POPF(标志出栈) • 格式:POPF • 功能:①(SP)→FLAG ②SP+2→SP ③ 原FLAG内容被破坏

  43. 算术运算类指令 • 8088提供了加减乘除4组基本算术运算指令。 • 可以实现字、字节、无符号数和有符号数运算。 • 可以: • 单操作数,不能是立即数, • 双操作数,立即数只能作源操作数。 • 隐含操作数 • 无符号组合BCD适用加、减十进制运算。 • 无符号未组合BCD适用加、减、乘、除十进制运算。

  44. 算术运算类指令–加法指令(1) 1.ADD 不带进位加法指令 • 格式:ADD OPRD1,OPRD2 • 功能:OPRD1+ OPRD2→ OPRD1,完成两个字节或字操作数的相加,并将结果送目的操作数。 • OPRD1和OPRD2均可以是8位或16位寄存器或存储器操作数 • 源操作数可以是立即数 • 可以是无符号数或有符号数 • 但不能同时是存储器数 • 不能对段寄存器进行运算 • ADD AL,30H • ADD AX,SI • ADD BX,3FEH • ADD DX,DATA[BX+SI] • ;基址间址变址寻址 • ADD DATA [SI],100 • ADD DATA [SI],Al ; • ;Al+[DATA+[SI]] → [DATA+[SI]] • 例: • MOV AL,7EH ;AL←7EH • ADD AL,5BH ;AL←7EH+5BH • 最后两条执行后AL=D9H,7FH<D9H<FFH, • 各寄存器的状态: • AF=1,CF=0,OF=1,PF=0,SF=1,ZF=0 • CF=0,无进位 • OF=1,若有符号数相加则产生溢出。

  45. 算术运算类指令–加法指令(2) 2.ADC 带进位加法指令 • 格式:ADC OPRD1,OPRD2 • 功能:PRD1+OPRD2+CF→OPRD1,能够完成两个源操作数及进位位CF的相加,结果送目的操作数。 • 例如:求两个4字节无符号数0107A379H+10067E4FH=? 程序如下: MOV DX,0107H ;高16位→DX MOV AX,0A379H ;低16位→AX MOV BX,1006H ;第二个数高16位→BX MOV CX,7E4FH ;第二个数低16位→CX CLC ;清进位标志 ADD AX,CX ;AX+CX→AX(低位) ADC DX,BX ;DX+BX+CF→DX(高位) 结果在DX和AX寄存器=110E21C8H

  46. 算术运算类指令–加法指令(3) 3.INC 加1指令(Increment) • 格式:INC OPRD • 功能:OPRD+1→OPRD (B/W ),不影响CF • 例如: INC AL ;AL+1→AL INC BX ;BX+1→BX INC WORD PTR 4[BX] ;((BX)+4)+1→ ((BX)+4) • WORD PTR就是指明要对存储单元中的一个16位数加1,而不是8位数。 • 操作数是寄存器和存储器操作数 • 可以是8位也可以是16位 • 不能是段寄存器和立即数

  47. 吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 十二 讲

  48. 算术运算类指令–加法指令(4) 4.AAA 指令(未组合BCD加法调整) • 格式:AAA • 功能:对AL中未组合BCD调整。 • 调整过程: IF (AL&0FH)>9 OR AF=1 THEN AL←AL+6 AH←AH+1 AF←1 CF←AF AL←AL&0FH • 影响AF和CF,但对OF、PF、SF、ZF未定义。 例如: MOV AL, 09H MOV BL, 04H ADD AL, BL AAA • AAA指令调整如下: • AL=09BCD 00001001 • BL=04BCD+)00000100 • ADD AL,BL 00001101 ;低4位>9,加06H调整 • AAA+)00000110 • 00010011 ;AF=1,AL∧OFH→AL • ;AH=AH+1,CF=1

  49. 算术运算类指令–加法指令(5) 5.DAA 指令(组合BCD加法调整)(Decimal adjust addition) • 格式:DAA • 功能:对AL中组合BCD调整。 • 调整过程: (1) IF (AL&0FH)>9 OR AF=1 THEN AL←AL+6 AF←1 (2) IF AL>9FH OR CF=1 THEN AL←AL+60H CF←1 • 影响AF、CF、PF、SF和ZF,但对OF未定义。 • 例如: • MOV AL,48H • ADD AL,27H • ;AL=6FH,不正确,须调整 • DAA • ;(48)BCD+(27)BCD=(75)BCD • DAA指令调整如下: • AL=48BCD01001000 • BL=27BCD+)00100111 • ADD AL,27H 01101111 ;AL中值>9,须加6调整。 • DAA+)00000110 • 01110101

  50. 算术运算类指令–减法指令(1) 1.SUB 不带借位(CF)的减法 • 格式:SUB OPRD1,OPRD2 • 操作数为累加器,寄存器或立即数(B/W) 。 • 例如: SUB CX ,BX;寄存器之间 SUB DX,TOTAL[SI];寄存器与存储器 SUB [BP+2],CL;存储器与寄存器 SUB AL,02;累加器和立即数 SUB [BP]BALANCE,100;存储器和立即数

More Related