1 / 77

第三章 8086 寻址和指令系统

第三章 8086 寻址和指令系统. 学习要点 1 、 8086 的寻址方式 2 、 8086 的指令系统. 指令. 机器指令 以二进制代码(机器码)表示指令 直接,不易读懂 汇编指令 以符号形式表示指令 易读,需要翻译(汇编) 与 CPU 相关. 指令成分. 操作码:操作的性质 表示指令应完成的具体操作 以助记符的形式表示 操作数:操作的对象 表示指令的操作对象(参与操作的对象) 源操作数、目的操作数. 指令操作数. 双操作数 OPR DEST , SRC 单操作数 OPR DEST 无操作数 OPR (隐含操作数). 操作数就在指令中.

Download Presentation

第三章 8086 寻址和指令系统

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. 第三章 8086寻址和指令系统 学习要点 1、8086的寻址方式 2、8086的指令系统

  2. 指令 • 机器指令 以二进制代码(机器码)表示指令 直接,不易读懂 • 汇编指令 以符号形式表示指令 易读,需要翻译(汇编) • 与CPU相关

  3. 指令成分 • 操作码:操作的性质 表示指令应完成的具体操作 以助记符的形式表示 • 操作数:操作的对象 表示指令的操作对象(参与操作的对象) 源操作数、目的操作数

  4. 指令操作数 • 双操作数 OPR DEST,SRC • 单操作数 OPR DEST • 无操作数 OPR(隐含操作数)

  5. 操作数就在指令中 操作数在CPU的Register中 操作数在Memory中 8086的寻址方式 寻址方式:CPU寻找操作数或送操作结果的方式。 操作数可能存放的场所

  6. MOV数据传送指令 • 其格式为: • MOV 目的操作数,源操作数 • 目的操作数和源操作数可采用不同的寻址方式,但两个操作数的类型必需一致。

  7. 指令 操作数 一、立即寻址 操作数就在指令中 MOV SP,0100H 16bit MOV AL,20H 8bit MOV CX,100 0064H;16bit 问题:操作数是16位,还是8位?

  8. 指令 寄存器 操作数 二、寄存器寻址 操作数在寄存器中 MOV CL , AH (AH)→CL MOV DS , AX (AX)→DS

  9. 指令 EA 内存 操作数 若(DS)=3000H,则结果为 (32000H)→AL,(32001H)→AH 三、直接寻址 操作数在内存中,其段内偏移(有效) 地址EA在指令中 MOV AX,[2000H]

  10. 指令 寄存器 EA 内存 操作数 (BX) (SI) 段寄存器DS (即操作数在数据段) (DI) (BP) 段寄存器SS (即操作数在堆栈段) EA= 四、寄存器间接寻址 操作数在内存中,其EA在指令指明的寄存器中 MOV AX,[SI] (DS):(SI)→AX MOV AX,[BP] (SS):(BP)→AX

  11. 操作数在内存中,其EA是指令指明的(基址或变址)寄存器操作数在内存中,其EA是指令指明的(基址或变址)寄存器 内容与指令中指出的8bit/16bit带符号位移量之和。 操作数 & EA (BX) (SI)段寄存器DS(即操作数在数据段) (DI) (BP) 段寄存器SS (即操作数在堆栈段) 内存 +disp EA= +disp 五、寄存器相对寻址 指令 基址寄存器 disp 基址 MOV AX,-100 [SI] (SI)+(-100) →AX MOV DX,ALFA [DI] (DI)+ALFA→DX 注:disp可以是一个带符号数,也可是已赋值的变量

  12. 操作数在内存中,其EA是指令指明的基址寄存器与操作数在内存中,其EA是指令指明的基址寄存器与 指令 变址寄存器内容之和。 操作数 基址寄存器 变址寄存器 变址值 & EA 内存 基地址 (BX)+ (SI) 段寄存器DS(即操作数在数据段) (BP) + DI) 段寄存器SS(即操作数在堆栈段) EA= 基址 变址 六、基址变址寻址 MOV [BX][S I],DX (DX)→(BX)+(SI)的内存中

  13. 指 令 基址寄存器 变址寄存器 disp & 变址值 EA 基地址 内存 操作数 (BX)+ (SI) +disp 段寄存器DS(即操作数在数据段) (BP) + (DI) +disp 段寄存器SS(即操作数在堆栈段) EA= 七、相对基址变址寻址 操作数在内存中,其EA是指令指明的基址与变址寄存器内容与指令中给出的8bit/16bit带符号位移量之和。 MOV AX,24[BX][S I] ((BX)+(SI)+24)→AX

  14. 八、I/O端口寻址 • 操作数在外部设备时,使用两种不同寻址方式的I/O指令。 • 1、直接端口寻址方式 • 指令中直接给出端口地址,范围是:0—FFH • 2、采用寄存器间接寻址方式 • 采用DX寄存器进行间址,范围是:0—FFFFH • 3、I/O寻址时的操作寄存器为AL或AX • IN AL , 25H • MOV DX , 3E4H • OUT DX , AL

  15. 第三章作业1 • 1,2,3

  16. 指令形式: 操作码 目的地址 源操作数或地址 8086的指令系统 六大类指令: 1、数据传送; 2、算术运算; 3、逻辑运算; 4、串操作; 5、控制传送; 6、处理器控制。 要求了解指令的 1、操作码; 2、操作功能; 3、操作对象; 4、操作结果; 5、对PSW标志位的影响;6、后继地址。

  17. 数据传送指令 • 数据传送是计算机中最基本、最重要的一种操作 • 除标志寄存器传送指令和POP指令外,均不影响标志位

  18. 数据传送指令表

  19. 1、通用传送指令 MOV OPRD1,OPRD2 把一个byte/word操作数从源传送到目的。对标志位不 起作用。 OPRD1 OPRD2 Im 立即数 a a AL/AX seg seg 段寄存器 r r 通用寄存器 dst src 内存

  20. MOV指令传送功能图解 通用寄存器 AX、BX、CX、 DX、BP、SP、 SI、DI 段寄存器 CS、DS、SS、ES 立即数 Memory

  21. 2、堆栈操作指令 PUSH OPRDOPRD→(SP)-1/(SP)-2 (SP) -2→SPPOP OPRD((SP)+1) /(SP)→OPRD (SP)+2→SP r seg src(push) / dst(pop) • PUSH DX • POP BX

  22. 3、交换指令 XCHGOPRD1,OPRD2 a r register memory register register XCHG AL,CL / XCHG AX,DI XCHG BX,DATA [SI] XCHG BX,DI • 操作数不能为立即数;段寄存器不能作为操作数。

  23. 4、查表转换指令 XLAT 指定表首地址→BX;表元素号→AL 查表结果((BX)+(AL)) →AL 例:若十进制数字0~9 的 LED七段显示码对照表已存放在内存中,表格的首地址为TABLE,用 XLAT 指令求数字5的七段显示码值程序如下: TABLE DB 40H, 79H, 24H, 30H, 19H DB 12H, 02H, 78H, 00H, 18H ; 建立七段显示码表格 OFFSET是运算符  AL 5 MOV AL,5 ; MOV BX,OFFSET TABLE ; BX  表格首地址 XLAT ; AL 12H

  24. 5、地址-目的传送指令 ⑴16bit地址-目的传送指令(段内有效偏移地址) 把源操作数的段内有效偏移地址16bit传送到目的地址。 LEAOPRD1,OPRD2 r srt (memory的EA) LEA SI,AREA1 把变量名为AREA1的内存(16bit)地址→SI =MOV SI,OFFSET AREA1 OFFSET是运算符

  25. LDS SI,[BX] 若(DS)=C000H (BX)=080AH 内存数据如表所示; 则指令执行结果 (SI) =0180H, (DS)=2000H 80H 01H 00H 20H C080AH C080CH ⑵32bit地址-目的传送指令(段地址和段内有效偏移地址) 把源操作数的段地址16bit和段内有效偏移地址16bit传送到目的地址。 LDSOPRD1,OPRD2 LESOPRD1,OPRD2 r srt DS,BP/SI/DI ES, BP/SI/DI 段地址,EA

  26. 6、标志寄存器传送 LAHF (FLAG/L8bit)→AH SAHF(AH)→FLAG/L8bit PUSFFLAG/16bit 入栈保护 POPF堆栈弹出→FLAG/16bit

  27. 算术运算指令

  28. 0000 0111 1000 1001 1100 0101 07 89 C5 7 137 197 +7 -119 -59 二进制码 (B) 十六进制 (H) 无符号二 进制(D) 带符号二 进制(D) 非压缩 BCD 压缩 BCD 8086可处理四种类型的数:无符号、带符号、压缩BCD码、非压缩BCD码 二进制数可以是8位或16位;若是带符号数则用补码表示。 非压缩BCD在一个字节的低4位存放一个BCD码十进制数,高4位为全0。 压缩BCD数在一个字节中存放二个BCD码十进制数。 7 无效 无效 07 89 无效

  29. INCOPRDOPRD+1→OPRD rCF、OF、PF、SF、ZF src 1、加法指令 ADDOPRD1,OPRD2 OPRD1+OPRD2→OPRD1 ADCOPRD1,OPRD2 OPRD1+OPRD2+CF→OPRD1 影响的标志 CF、OF、PF、SF、ZF ACC im r r dst src

  30. 0 9 0 5 (AL)=0 EH (AX)=0 1 0 4H AAA调整 AAA非压缩十进制加法BCD调整(8bit) CF、OF、PF、SF、ZF 8bit(0×)加法后,AL中的非压缩BCD码→AH(0+拾位)AL(0+个位)。 例: MOV BL,09H ;非压缩BCD码 MOV AL,05H ; ADD AL,BL AAA ;(AX)=0104H

  31. 38 15 (AL)=4DH (AL)=53H DAA调整 DAA压缩十进制加法BCD调整(8bit) CF、OF、PF、SF、ZF 8bit(××)加法后,AL中的压缩BCD码→AL(拾位、个位)中。若调整结果>99,则CF=1。 例:MOV BL,38H MOV AL,15H ADD AL,BL DAA ;(AL)=53H CF=0

  32. 2、减法指令 SUBOPRD1,OPRD2OPRD1-OPRD2→OPRD1 SBBOPRD1,OPRD2OPRD1-OPRD2-CF→OPRD1 ACC imCF、OF、PF、SF、ZF r r dst src DECOPRDOPRD-1→OPRD r CF、 OF、PF、SF、ZF src

  33. 03 08 (AL)=FBH (AL)=05H CF=1 AAS调整 AAS未压缩十进制数减法BCD调整(8bit) CF、OF、PF、SF、ZF 8bit(0×) 减法后,AL中的非压缩BCD码→AL(0×个位)中。若有借位,CF=1。 例: MOV CL,08H MOV AL,03H SUB AL,CL AAS ;(AL)=05H,CF=1(有借位)

  34. 56 98 (AL)=0BEH (AL)=58H CF=1 DAS调整 DAS压缩十进制数减法BCD调整(8bit) CF、OF、PF、SF、ZF 8bit(××) 减法后,AL中的压缩BCD码→AL(×拾位、×个位)中。 例: MOV CL,98H MOV AL,56H SUB AL,CL DAS ;(AL)=58H,CF=1 (有借位)

  35. CMP OPRD1,OPRD2比较 OPRD1-OPRD2→OPRD1 CF、OF、PF、SF、ZF ACC im r r dst src 在使用(AAA、DAA)和(AAS、DAS)时: 仅对AL调整,运算必须是字节; 必须紧跟在加法或减法指令后面 NEGOPRD取负0-OPRD(取补) →OPRD r / Memory 注意CMP和SUB区别

  36. 3、乘法指令 MULOPRD无符号数乘 IMULOPRD带符号数乘 r / Memory 8bit: (AL)×OPRD→AX 16bit:(AX)×OPRD→DX:AX CF、OF、PF、SF、ZF 4、除法指令 DIVOPRD无符号数除 IDIV OPRD带符号数除 r / Memory 8bit:(AX)÷OPRD→AH(余)AL(商) 16bit:(DX:AX)÷OPRD→AX(商)、DX(余) CF、OF、PF、SF、ZF

  37. CBW把AL字节转换为AX字 CF、OF、PF、SF、ZF 若(AL)7=0,则(AH)=00H 若(AL)7=1,则(AH)=FFH CWD把AX节转换为DX:AX双字 CF、OF、PF、SF、ZF 若(AX)15=0,则(DX)=00H 若(AX)15=1,则(DX)=FFH 扩展指令

  38. 第三章作业2 • 6,7,9

  39. 逻辑指令

  40. NOTOPRD OPRD取反→OPRD r / MamoryCF、OF、PF、SF、ZF 逻辑运算指令的运算特点:按bit运算 ANDOPRD1,OPRD2 OROPRD1,OPRD2 XOROPRD1,OPRD2 a im r r dst src PF、SF、ZF CF=OF= 0

  41. TESTOPRD , imOPRD ∧ im → OPRD r / Memory 用于判断OPRD中某一位的情况,如判断“ 正数、负数、奇数、偶数…” PF、SF、ZF OF=CF=0 TEST AL,01H JNZ THERE 若(AL)为奇数,转THERE语句 ;若为偶数,继续执行下一语句。 TEST CX,0FFFFH JZ THERE 若(CX)=0,转THERE语句。

  42. CF OPRD 0 0 0 CF、OF、PF、SF、ZF 2、算术逻辑移位指令 SHLOPRD,m逻辑左移 SALOPRD,m算术左移 SHROPRD,m逻辑右移 SAROPRD,m算术右移 r / Memory 1 / CL 移位次数

  43. CF OPRD CF、OF、PF、SF、ZF 3、循环移位指令 ROLOPRD,m ROROPRD,m RCLOPRD,m RCROPRD,m r / Memory 1 / CL 移位次数

  44. 例:(AX)= 0012H,(BX)= 0034H,把它们装配成(AX)= 1234H MOV CL, 8 ROL AX, CL ADD AX, BX 例:(BX) = 84F0H (1) (BX) 为无符号数,求(BX) / 2 SHR BX, 1; (BX) = 4278H (2) (BX) 为带符号数,求(BX) ×2 SAL BX, 1; (BX) = 09E0H, OF=1 (3) (BX) 为带符号数,求(BX) / 4 MOV CL, 2 SAR BX, CL ; (BX) = 0E13CH

  45. AX DX CF 0 例:将DX.AX中32位数值左移一位 shl ax,1 ;AX左移1位,最低位补0,最高位进入CF rcl dx,1 ;带进位循环左移1位

  46. 串操作指令 串操作指令:用一条指令实现对一串字符或一串数据的操作。 串操作指令的共同特点: ⑴、可以对字节(8bit)串操作,也可对字(16bit)串操作; ⑵、所有串操作指令都是 SI用于对源操作数间址,段地址为DS(源操作数物理地址在数据段)。源操作数的的地址为DS:SI。 DI用于对目的操作数间址,段地址为ES(目的操作数物理地址在附加段)。目的操作数的地址为ES:DI。 ⑶、待操作的字符串长度(字节或字)放在CX中。 ⑷、串操作时,地址的自动修改取决于方向标志DF DF=1,SI、DI自动减修改;字节操作减1,字操作减2。 DF=0,SI、DI自动增修改;字节操作加1,字操作加2。 ⑸、可以在串操作前加重复前缀完成多次串操作。

  47. 1、串传送指令 MOVSB字节操作 ((SI))→(DI);(SI)+/-1→SI;(DI)+/-1→DI MOVSW字操作 ((SI))→(DI);(SI)+/-2→SI;(DI)+/-2→DI CF、OF、PF、SF、ZF 2、串比较指令 CMPSB字节操作 ((SI))-((DI)) →PSW; (SI)+/-1→SI;(DI)+/-1→DI CMPSW字操作 ((SI)+1):((SI))-((DI)+1):((DI)) →PSW; (SI)+/-2 →SI;(DI) +/-2 →DI CF、OF、PF、SF、ZF

More Related