1.18k likes | 1.38k Views
第七讲. 8086/8088 指令系统. 一、寻址方式 二、指令类型 传送类指令 算术运算类指令 BCD 码校正指令 位操作类指令. ———— 8086/8088CPU. 一、 8086/8088 指令系统. 8086/8088 的指令采用变字长指令格式。指令长度 1~6 个字节。第 1 个字节包含操作码,第 2 个字节表示寻址方式,第 3~6 个字节表示位移量、立即数。. 一、寻址方式 共有八种 1. 寄存器寻址方式 2. 立即数寻址方式 3. 存储器寻址方式 直接寻址方式 寄存器间接寻址方式 变址和基址寻址方式 基址变址寻址方式
E N D
第七讲 8086/8088指令系统 • 一、寻址方式 • 二、指令类型 • 传送类指令 • 算术运算类指令 • BCD码校正指令 • 位操作类指令
————8086/8088CPU 一、8086/8088指令系统 8086/8088的指令采用变字长指令格式。指令长度1~6个字节。第1个字节包含操作码,第2个字节表示寻址方式,第3~6个字节表示位移量、立即数。
一、寻址方式 • 共有八种 • 1.寄存器寻址方式 • 2.立即数寻址方式 • 3.存储器寻址方式 • 直接寻址方式 • 寄存器间接寻址方式 • 变址和基址寻址方式 • 基址变址寻址方式 • 4.串操作寻址方式 • 5.I/O端口寻址方式
(一)、寄存器寻址方式 (Register Address) • 操作数存放在指令规定的寄存器中,对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP或BP;而对8位操作数,寄存器可以是 • AH ,AL,BH,BL,CH,CL,DH或DL。 • 例如: • MOV AX, BX • 执行过程如右图所示:
————8086/8088CPU (一)、寄存器寻址方式 • 2.实例 MOV BL,AL; MOV CH,CL; MOV BP,DX; MOV DI,AX; • 3.特点:执行速度快。 • 在汇编指令中,寄存器地址直接用寄存器名表示。
————8086/8088CPU (二)、立即数寻址方式 (Immediate Address)指令所需的操作数直接在指令代码中,随着取指令一起取到BLU的指令队列中。 特点:执行速度快,常用来提供常数。 MOV AX,1234H MOV AL,05FH
————8086/8088CPU (二)、立即数寻址方式 2.在汇编指令中,立即数是数值,则直接书写,如是字符,则加上引号。立即数只能作为源操作数。 MOV CX,1000H; MOV AL,0AH; MOV AH,‘A’; MOV DX,“AB”;
————8086/8088CPU (三)、存储器寻址方式 • 上述两种寻址方式,操作数在寄存器或指令中,而以下几种寻址方式,操作数在存储器中。 • 在汇编语言程序设计中,一个存储单元的地址采用逻辑地址来表示,其形式为:段基值:偏移量 • 通常汇编指令中,不直接给出提供段基值的段寄存器名,而是执行指令时使用隐含来源,如DS提供段基值。因此存储器的寻址方式:主要讨论如何形成操作数逻辑地址的偏移量。
————8086/8088CPU (三)、存储器寻址方式 • 有效地址:按指令中存储器寻址方式计算得到的偏移量称为有效地址EA。 • 有效地址EA是由三个地址分量的某种组合: • (1)位移量:指令代码中的一个8/16位二进制数。 • (2)基地址:BX或BP的内容。 • (3)变址量:SI或DI的内容。 • 根据三个地址分量的不同组合,有4种不同的存储器寻址方式。
————8086/8088CPU 1.直接寻址方式 • (Direct Address)指令所需的操作数在存储器中,操作数的有效地址EA直接由指令代码中的位移量提供。 • 在汇编指令中,直接寻址方式可用数值地址或符号地址来表示。 • (1)数值地址 (段寄存器必须指明) • (2)符号地址 (段寄存器DS可以不指明) • 在汇编语言程序中,常用符号地址表示存放操作数的存储单元。故汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。
例如: MOV AL, DS:[2000H] • 若DS=4000H,则此指令式将数据段中物理地址为42000H 单元的内容传送AL寄存器。 • 执行过程如下图所示:
MOV AL, DS:[2000H] MOV AL, DS:[2000H]
操作数在数据段中,则指令中不必给出DS,如果操作数不在数据段中,则必须给出段寄存器名。操作数在数据段中,则指令中不必给出DS,如果操作数不在数据段中,则必须给出段寄存器名。 • 例如:MOV DAB,OFH • MOV CL,DA+3 • MOV AX,ES:DAW 直接寻址方式常用于访问符号地址(变量名)表示的存储单元中的操作数。
2.寄存器间接寻址方式 (Register Indirect Address) • 指令中所需的操作数在存储器中,操作数的有效EA直接从SI/DI/BX/BP中获得。 • 如以SI,DI,BX间接寻址时,隐含使用DS。 • 如以BP间接寻址时,则隐含使用SS。
这种寻址方式的使用格式如: 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];
例如: MOV AX, [BX] • 它表示操作数在数据段中,存放单元与段基址的偏移量(即有效地址)在寄存器BX中。 • 执行过程如下图所示:
3.变址寻址和基址寻址方式 • (Indexed Addresssing) (Based Addressing)指令所需的操作数在存储器中,操作数的有效地址EA是两个地址分量之和。 • 变址寻址:操作数的EA是SI或DI内容与位移量之和。 • 基址寻址:操作数EA是BX或BI内容与位移量之和。
变址或基址寻址若使用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;
变址或基址寻址常用来访问主存中的一维数组、表格、字符串等。变址或基址寻址常用来访问主存中的一维数组、表格、字符串等。 • 例如: • MOV AL, 05H [BX] • 它是BX的内容加上8位位移量05H作为操作数存放的单元地址。如果使用BP,则隐含地表示操作数示存放在堆栈段中。 • 执行过程如下图所示:
例4-1:一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且占2个字节单元。从数组的首址起依次存放各元素:例4-1:一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且占2个字节单元。从数组的首址起依次存放各元素: • 指令:MOV AX,ARY[SI]; 数组首址 元素与数组首址之间的距离
4.基址变址寻址方式 (Based Indexed Addressing) • 指令所需的操作数在存储器中,操作数的有效地址EA是三个地址分量之和。 • BX或BP的内容 • SI或DI的内容 • 位移量
基址变址寻址若使用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;
例如: • MOV AH, 1234H [BX][DI] • 表示操作数地址是在数据段中,其在数据段的偏移量是BX的内容加上DI的内容再加上位移量1234H。 • 执行过程如右图所示:
数组首址 被访问行的起始地址相对数组首址的距离 被访问数组元素相对与本行首址的距离 • 常用来存放在主存中的二维数组。 • MOV AL ARRAY[BP][SI]
8086/8088指令分类 • 8086/8088指令按操作数地址个数划分为三种类型: • 双操作数指令:OPR DEST,SRC • 单操作数指令:OPR DEST • 无操作数指令:OPR
8086/8088指令分类 • 8086/8088指令按指令功能分为六大类: • 传送类指令 • 算术运算类指令 • 位操作类指令 • 串操作类指令 • 程序转移类指令 • 处理器控制类指令
一、传送类指令 • 这类指令又分为四种: • 数据传送指令 • 交换指令 • 标志位传送指令 • 地址传送指令
1.数据传送指令 • 指令格式:MOV DEST ,SRC • 指令功能:DEST(SRC),不影响任何标志位. R/M/立即数 R/M
例如:将立即数传送到通用寄存器或存储单元中:例如:将立即数传送到通用寄存器或存储单元中: • MOV AL,1FH ;字节传送 • MOV AX,2345H ;字传送 • MOV DAB,0FEH ;字节传送 • MOV ARY[BX],1234H ;字传送
例如:寄存器之间的传送: • MOV AH,BL ;字节传送 • MOV DX,CX ;字传送 • MOV DS,AX ;字传送
例如:寄存器与存储单元之间的传送: • MOV CL,DAB ;字节传送 • MOV TAB[BX],AX ;字传送
例如:将DAV1字单元内容传送到DAV2中: • MOV AX,DAV1 • MOV DAV2 , AX
例如:将立即数传送到DS,ES中: • MOV AX,10A0H • MOV DS, AX • MOV ES, AX
2.交换指令(Xchange) • 指令格式:XCHG DEST ,SRC • 指令功能:(DEST)(SRC),不影响任何标志位. • 不能使用段寄存器和立即数。 R/M R/M
例如:交换指令的使用格式: • XCHG AL, AH • XCHG AX, DAW1
例如:将DAV1字单元内容与DAV2字单元的内容交换:例如:将DAV1字单元内容与DAV2字单元的内容交换: • MOV AX,DAV1 • XCHG DAV2 AX • MOV DAV1 , AX
3.标志位传送指令 • (1)取标志指令(Load Register AH from Flag) • 指令格式: LAHF • 指令功能: AH(FR)7~0, • 不影响任何标志位
3.标志位传送指令 • (2)存标志指令(Save Register AH into Flag) • 指令格式: SAHF • 指令功能: FR7~0( AH), • 影响SF、ZF、AF、PF、CF标志位
例如:将SF、ZF置1,AF、PF、CF保持不变,可用以下指令:例如:将SF、ZF置1,AF、PF、CF保持不变,可用以下指令: • LAHF • OR AH,11000000B • SAHF