1 / 118

第七讲

第七讲. 8086/8088 指令系统. 一、寻址方式 二、指令类型 传送类指令 算术运算类指令 BCD 码校正指令 位操作类指令. ———— 8086/8088CPU. 一、 8086/8088 指令系统. 8086/8088 的指令采用变字长指令格式。指令长度 1~6 个字节。第 1 个字节包含操作码,第 2 个字节表示寻址方式,第 3~6 个字节表示位移量、立即数。. 一、寻址方式 共有八种 1. 寄存器寻址方式 2. 立即数寻址方式 3. 存储器寻址方式 直接寻址方式 寄存器间接寻址方式 变址和基址寻址方式 基址变址寻址方式

elata
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. 第七讲 8086/8088指令系统 • 一、寻址方式 • 二、指令类型 • 传送类指令 • 算术运算类指令 • BCD码校正指令 • 位操作类指令

  2. ————8086/8088CPU 一、8086/8088指令系统 8086/8088的指令采用变字长指令格式。指令长度1~6个字节。第1个字节包含操作码,第2个字节表示寻址方式,第3~6个字节表示位移量、立即数。

  3. 一、寻址方式 • 共有八种 • 1.寄存器寻址方式 • 2.立即数寻址方式 • 3.存储器寻址方式 • 直接寻址方式 • 寄存器间接寻址方式 • 变址和基址寻址方式 • 基址变址寻址方式 • 4.串操作寻址方式 • 5.I/O端口寻址方式

  4. (一)、寄存器寻址方式 (Register Address) • 操作数存放在指令规定的寄存器中,对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP或BP;而对8位操作数,寄存器可以是 • AH ,AL,BH,BL,CH,CL,DH或DL。 • 例如: • MOV  AX,  BX • 执行过程如右图所示:

  5. ————8086/8088CPU (一)、寄存器寻址方式 • 2.实例 MOV BL,AL; MOV CH,CL; MOV BP,DX; MOV DI,AX; • 3.特点:执行速度快。 • 在汇编指令中,寄存器地址直接用寄存器名表示。

  6. ————8086/8088CPU (二)、立即数寻址方式 (Immediate Address)指令所需的操作数直接在指令代码中,随着取指令一起取到BLU的指令队列中。 特点:执行速度快,常用来提供常数。 MOV AX,1234H MOV AL,05FH

  7. ————8086/8088CPU (二)、立即数寻址方式 2.在汇编指令中,立即数是数值,则直接书写,如是字符,则加上引号。立即数只能作为源操作数。 MOV CX,1000H; MOV AL,0AH; MOV AH,‘A’; MOV DX,“AB”;

  8. ————8086/8088CPU (三)、存储器寻址方式 • 上述两种寻址方式,操作数在寄存器或指令中,而以下几种寻址方式,操作数在存储器中。 • 在汇编语言程序设计中,一个存储单元的地址采用逻辑地址来表示,其形式为:段基值:偏移量 • 通常汇编指令中,不直接给出提供段基值的段寄存器名,而是执行指令时使用隐含来源,如DS提供段基值。因此存储器的寻址方式:主要讨论如何形成操作数逻辑地址的偏移量。

  9. ————8086/8088CPU (三)、存储器寻址方式 • 有效地址:按指令中存储器寻址方式计算得到的偏移量称为有效地址EA。 • 有效地址EA是由三个地址分量的某种组合: • (1)位移量:指令代码中的一个8/16位二进制数。 • (2)基地址:BX或BP的内容。 • (3)变址量:SI或DI的内容。 • 根据三个地址分量的不同组合,有4种不同的存储器寻址方式。

  10. ————8086/8088CPU 1.直接寻址方式 • (Direct Address)指令所需的操作数在存储器中,操作数的有效地址EA直接由指令代码中的位移量提供。 • 在汇编指令中,直接寻址方式可用数值地址或符号地址来表示。 • (1)数值地址 (段寄存器必须指明) • (2)符号地址 (段寄存器DS可以不指明) • 在汇编语言程序中,常用符号地址表示存放操作数的存储单元。故汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。

  11. 例如: MOV  AL,  DS:[2000H] • 若DS=4000H,则此指令式将数据段中物理地址为42000H 单元的内容传送AL寄存器。 •   执行过程如下图所示:

  12. MOV  AL,  DS:[2000H] MOV  AL,  DS:[2000H]

  13. 操作数在数据段中,则指令中不必给出DS,如果操作数不在数据段中,则必须给出段寄存器名。操作数在数据段中,则指令中不必给出DS,如果操作数不在数据段中,则必须给出段寄存器名。 • 例如:MOV DAB,OFH • MOV CL,DA+3 • MOV AX,ES:DAW 直接寻址方式常用于访问符号地址(变量名)表示的存储单元中的操作数。

  14. 2.寄存器间接寻址方式 (Register Indirect Address) • 指令中所需的操作数在存储器中,操作数的有效EA直接从SI/DI/BX/BP中获得。 • 如以SI,DI,BX间接寻址时,隐含使用DS。 • 如以BP间接寻址时,则隐含使用SS。

  15. 这种寻址方式的使用格式如: MOV CH,[SI]; MOV [DI],BX; MOV AL,[BX]; MOV CX,[BP]; 等价于: MOV CH,DS:[SI]; MOV DS:[DI],BX; MOV AL,DS:[BX]; MOV CX,SS:[BP];

  16. 例如:      MOV  AX,  [BX] • 它表示操作数在数据段中,存放单元与段基址的偏移量(即有效地址)在寄存器BX中。 •   执行过程如下图所示:

  17. MOV  AX,  [BX]

  18. 3.变址寻址和基址寻址方式 • (Indexed Addresssing) (Based Addressing)指令所需的操作数在存储器中,操作数的有效地址EA是两个地址分量之和。 • 变址寻址:操作数的EA是SI或DI内容与位移量之和。 • 基址寻址:操作数EA是BX或BI内容与位移量之和。

  19. 变址或基址寻址若使用SI,DI,BX,则隐含使用DS;若使用BP,则隐含使用SS。变址或基址寻址若使用SI,DI,BX,则隐含使用DS;若使用BP,则隐含使用SS。 • 汇编指令中,位移量可用数值或符号地址,其使用格式: • MOV CH,10H[SI]; • MOV TAB[DI],AX; • MOV AL,ARY[BX]; • MOV STR[BP],DX;

  20. 变址或基址寻址常用来访问主存中的一维数组、表格、字符串等。变址或基址寻址常用来访问主存中的一维数组、表格、字符串等。 • 例如: • MOV   AL,  05H [BX] • 它是BX的内容加上8位位移量05H作为操作数存放的单元地址。如果使用BP,则隐含地表示操作数示存放在堆栈段中。 •   执行过程如下图所示:

  21.   MOV   AL,  05H [BX]

  22. 例4-1:一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且占2个字节单元。从数组的首址起依次存放各元素:例4-1:一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且占2个字节单元。从数组的首址起依次存放各元素: • 指令:MOV AX,ARY[SI]; 数组首址 元素与数组首址之间的距离

  23. 4.基址变址寻址方式 (Based Indexed Addressing) • 指令所需的操作数在存储器中,操作数的有效地址EA是三个地址分量之和。 • BX或BP的内容 • SI或DI的内容 • 位移量

  24. 基址变址寻址若使用SI,DI,BX,则隐含使用DS,若使用BP,则隐含使用SS。基址变址寻址若使用SI,DI,BX,则隐含使用DS,若使用BP,则隐含使用SS。 • 汇编指令中,位移量可用数值或符号地址,使用格式: • MOV CH,10H[BX][SI]; • MOV TAB[BX][DI],AX; • MOV AL,ARY[BP][SI]; • MOV STR[BP][SI],DX;

  25. 例如: • MOV  AH,  1234H [BX][DI] • 表示操作数地址是在数据段中,其在数据段的偏移量是BX的内容加上DI的内容再加上位移量1234H。 •   执行过程如右图所示:

  26. MOV  AH,  1234H [BX][DI]

  27. 数组首址 被访问行的起始地址相对数组首址的距离 被访问数组元素相对与本行首址的距离 • 常用来存放在主存中的二维数组。 • MOV AL ARRAY[BP][SI]

  28. 8086/8088指令分类 • 8086/8088指令按操作数地址个数划分为三种类型: • 双操作数指令:OPR DEST,SRC • 单操作数指令:OPR DEST • 无操作数指令:OPR

  29. 8086/8088指令分类 • 8086/8088指令按指令功能分为六大类: • 传送类指令 • 算术运算类指令 • 位操作类指令 • 串操作类指令 • 程序转移类指令 • 处理器控制类指令

  30. 一、传送类指令 • 这类指令又分为四种: • 数据传送指令 • 交换指令 • 标志位传送指令 • 地址传送指令

  31. 1.数据传送指令 • 指令格式:MOV DEST ,SRC • 指令功能:DEST(SRC),不影响任何标志位. R/M/立即数 R/M

  32. 例如:将立即数传送到通用寄存器或存储单元中:例如:将立即数传送到通用寄存器或存储单元中: • MOV AL,1FH ;字节传送 • MOV AX,2345H ;字传送 • MOV DAB,0FEH ;字节传送 • MOV ARY[BX],1234H ;字传送

  33. 例如:寄存器之间的传送: • MOV AH,BL ;字节传送 • MOV DX,CX ;字传送 • MOV DS,AX ;字传送

  34. 例如:寄存器与存储单元之间的传送: • MOV CL,DAB ;字节传送 • MOV TAB[BX],AX ;字传送

  35. 例如:将DAV1字单元内容传送到DAV2中: • MOV AX,DAV1 • MOV DAV2 , AX

  36. 例如:将立即数传送到DS,ES中: • MOV AX,10A0H • MOV DS, AX • MOV ES, AX

  37. 2.交换指令(Xchange) • 指令格式:XCHG DEST ,SRC • 指令功能:(DEST)(SRC),不影响任何标志位. • 不能使用段寄存器和立即数。 R/M R/M

  38. 例如:交换指令的使用格式: • XCHG AL, AH • XCHG AX, DAW1

  39. 例如:将DAV1字单元内容与DAV2字单元的内容交换:例如:将DAV1字单元内容与DAV2字单元的内容交换: • MOV AX,DAV1 • XCHG DAV2 AX • MOV DAV1 , AX

  40. 3.标志位传送指令 • (1)取标志指令(Load Register AH from Flag) • 指令格式: LAHF • 指令功能: AH(FR)7~0, • 不影响任何标志位

  41. 3.标志位传送指令 • (2)存标志指令(Save Register AH into Flag) • 指令格式: SAHF • 指令功能: FR7~0( AH), • 影响SF、ZF、AF、PF、CF标志位

  42. 例如:将SF、ZF置1,AF、PF、CF保持不变,可用以下指令:例如:将SF、ZF置1,AF、PF、CF保持不变,可用以下指令: • LAHF • OR AH,11000000B • SAHF

More Related