740 likes | 920 Views
在此幻灯片插入公司的徽标 从“插入”菜单 选择图片 找到徽标文件 单击“确定” 重新设置徽标大小 单击徽标内任意位置。徽标外部出现的方框是“调整控点” 使用这些重新设置对象大小 如果在使用尺寸调整控点前按下 shift 键,则对象改变大小但维持原比例。. 微机原理. 制作者: 张幸. 第三章 8086寻址和指令系统. 8086指令系统具有灵活的指令格式、很强 的寻址能力、能处理多种数据类型 本章讨论8086寻址能力 ,指令系统. 第一节 8086寻址方式. 一、基本概念 二、指令寻址方式. 一、基本概念. 1. 指令 机器指令
E N D
在此幻灯片插入公司的徽标 • 从“插入”菜单 • 选择图片 • 找到徽标文件 • 单击“确定” • 重新设置徽标大小 • 单击徽标内任意位置。徽标外部出现的方框是“调整控点” • 使用这些重新设置对象大小 • 如果在使用尺寸调整控点前按下 shift 键,则对象改变大小但维持原比例。 微机原理 制作者: 张幸
第三章 8086寻址和指令系统 8086指令系统具有灵活的指令格式、很强 的寻址能力、能处理多种数据类型 本章讨论8086寻址能力 ,指令系统
第一节 8086寻址方式 一、基本概念 二、指令寻址方式
一、基本概念 1.指令 • 机器指令 以二进制代码(机器码)表示指令 直接,不易读懂 • 汇编指令 以符号形式表示指令 易读,需要翻译(汇编)
2.指令成分 • 操作码:操作的性质 表示指令应完成的具体操作 以助记符的形式表示 • 操作数:操作的对象
3.指令操作数 • 双操作数 OPR DEST,SRC • 单操作数 OPR DEST • 无操作数 OPR(隐含操作数)
操作数就在指令中 操作数在CPU的Register中 操作数在Memory中 二、指令寻址方式 寻址方式:CPU寻找操作数或送操作结果的方式。 操作数可能存放的场所
8086 的寻址方法有: 立即寻址、存储器寻址、串操作寻址 I/O端口寻址、程序转移寻址
1.立即寻址:指令中直接给出操作数的数值。 如: MOV AL,26H MOV CX,2A50H 立即寻址速度快,一般用于给寄存器或存储器赋 初值
2.寄存器寻址:操作数存放在指令规定的寄 存器中。 如:MOV DX,AX 寄存器寻址机器码字节最短,执行速度最快
3.直接寻址:指令直接给出操作数的偏移地 址。(存储器寻址方式) • 直接寻址方式: MOV AX,[2000H] • 段超越前缀: MOV AX,ES:[500] • 符号地址: AREA1 DW 100 MOV AX,AREA1
(BX) (SI) 段寄存器DS (即操作数在数据段) (DI) (BP) 段寄存器SS(即操作数在堆栈段) EA= 4.寄存器间接寻址:操作数的有效地址EA存 放在基址或变址寄存器。 MOV AX,[SI] (DS):(SI)→AX MOV AX,[BP] (SS):(BP)→AX
(BX) (SI)段寄存器DS(即操作数在数据段) (DI) (BP) 段寄存器SS (即操作数在堆栈段) +disp EA= +disp 5.寄存器相对寻址:操作数的有效地址EA是 8位或16位的偏移量加基址或变址寄存器 如: MOV BX,COUNT[SI] 注:偏移量可以是负数
BX 默认段DS BP 默认段SS (BX) (SI) (BP ) (DI) + 6.基址变址寻址:操作数的有效地址EA是基址存 器(BX或BP)加变址寄存器(SI或DI)。 EA= 如: MOV AX,[BX][SI] MOV AX,[BX+SI]
BX 默认段DS BP 默认段SS (BX) (SI) 8位偏移量 (BP ) (DI) 16为偏移量 + + 7.相对基址变址寻址:操作数的有效地址EA是8位 或16位的偏移量加基址寄存器(BX或BP)和变 址寄存器(SI或DI)。 EA= 如: MOV AX, MASK[BX][SI] MOV AX,[MASK+BX+SI]
其它: • 隐含寻址 • I/O端口寻址 • 一条指令几种寻址方式 • 转移类寻址
8.I/O端口寻址 • 直接端口寻址:指令中直接给出外设端口地址 如: IN AL,63H OUT 64H,AL • 间接端口寻址:指令DX寄存器为外设端口地址 如: MOV DX,213H IN AL,DX 注: 直接端口寻址范围(0~FFH) 间接端口寻址范围(0~FFFFH)
转移指令寻址方式 • 段内直接寻址 立即短转移 JMP SHORT PROG_S (8位立即数) 立即近转移 JMP NEAR PTR PRON_N(16位立即数) • 段内间接寻址 以存储器或寄存器作为转移目标地址 寄存器: JMP BX 存储器: JMP WORD PTR [BX] • 段间直接寻址 JMP FAR PTR PROG _F • 段间间接寻址 JMP DWORD PTR[BX]
第二节 8086指令系统 • 指令系统是汇编语言程序设计基础 • 汇编语言不如高级语言容易掌握 • 学习要点:功能、寻址方式、对PSW影响 • 8086指令系统分6类:数据传送、算术运算、逻辑和移位、字符串处理、转移类指令、处理机控制类。
指令名称 操作码 操作数 例 传送字或字节 MOV 目标,源 MOV ARRAY[SI],AL 把字压入堆栈 PUSH 源 PUSH AX 把字弹出堆栈 POP 目标 POP AX 交换字节或字 XCHG 目标,源XCHG AX,BX 字节翻译 XLAT 译码表 XLAT ASCII-TAB 一、数据传送指令 1、通用传送指令
立即数 通用寄存器 存储器 段寄存器 MOV指令完成把1字节或1字内容从源操作数传送到目的操作数 格式: MOV 目标,源 • 立即数不能做目的操作数 • 无存储器间直接传送 • 不能给CS、IP直接赋值 • 不能用立即数对段寄存器赋值
例: MOV AL,‘B’ MOV DX,OFFSET ARRAY MOV AL,AREA1 MOV AREA2,AL AREA1 14 3B AREA2 00 00 00 ARRAY 00
2000:0000 30 减1 21 SP 00 25 2000:0040 栈底 • PUSH 进栈指令 格式: PUSH 源 若BX=2500H DS=2130H SP=0040H SS=2000H 执行 PUSH BX PUSH DS • 源操作数可以是通用寄存器、段寄存器、存储器。 • 压栈时必须是字 • 先压高字节、再压低字节,且SP减1 执行后 SP=003CH
2000:0000 30 2000:003C 21 加1 00 SP 25 2000:0040 栈底 • POP 出栈指令 格式: POP 目的 若:SP=003CH SS=2000H 执行 POP DS POP BX • 目的操作数可以是通用寄存器、段寄存器、存储器。 • 弹栈时必须是字 • 先弹低字节、再弹高字节,且SP加1 执行后 SP=0040H DS=2130H BX=2500H
XCHG 交换指令 格式:XCHG 目的,源 例:XCHG AX,[BX+200H] 若:AX=2000H,DS=3000H BX=1800H,(31A00H)=1995H 。 执行后: AX=1995H (31A00H)=2000H 注:源、目的可以是寄存器, 可以是存储器,但不能都是存储器
XLAT 指令 格式:XLAT 或XLAT 表 该指令采用隐含寻址 表有效地址EA=BX+AL,查表后内容送AL 例:把0~9的十进制数转换成七段码 TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H MOV AL,5 MOV BX,OFFSET TABLE XLATTABLE
2、输入/输出指令 IN 累加器,端口 OUT 端口,累加器 如果端口地址在0000H~00FFH,可用直接或间接寻址 如果端口地址不在0000H~00FFH,只能用间接寻址 MOV DX,210H(间接) IN AL,DX IN AX,21H (直接) IN AL,210H ()
名称 操作码 操作数 举例 装入有效地址 LEA 目,源 LEA BX,[DI] 指针装入DS LDS 目,源 LDS BX,TABLE[SI] 指针装入ES LES 目,源 LES DI,ARRAY[BX] 这三条指令用于传送地址码, 源操作数必须是存储器, 目的操作数除段寄存器的16位寄存器。 3、地址目标传送指令 例: 若:DI=0100H,DS=2000H, (20106H)=1234H,(20108H)=5678H 则: LEA BX,6[DI] BX=0106H LDS BX,6[DI] BX=1234H DS=5678H
4、标志传送指令 LAHF 标志装入AH 将标志SF,ZF,AF,PF,CF送AH的7,6,4,2,0 SAHF AH内容装入标志 将AH的7,6,4,2,0送标志SF,ZF,AF,PF,CF PUSHF 压标志 POPF 弹标志
传送指令对标志影响: 除 POPF SAHF 两条指令,其余指令均不影 响标志
二、算术运算指令 • 8086算术运算指令共有20条,分4组 • 8086的4组指令为加法、减法、乘法、除法 • 8086可处理四种类型的数:无符号、带符号、压缩BCD码、非压缩BCD码 8086四种类型数的解释 二进制 十六进制 无符号数 带符号数 非压缩BCD 压缩BCD 00000111 07 7 7 7 7 10001001 89 137 -119 无效 89 11000101 C5 197 -59 无效 无效
1、加法指令 ADD 目的,源 目的源+目的 ADC 目的,源 目的源+目的+CF INC 目的 目的目的+1 AAA DAA 说明:源操作数为立即数、通用寄存器、存储器 目的操作数为通用寄存器、存储器 源、目不能都是存储器 算术运算指令影响标志
例: ADD AL,18H ADC BL,AL ADC AX,DX ADD AL,COST[BX] INC BL INC CX INC BYTE PTR[BX] INC WORD PTR[BX]
DAA加法的十进制调整指令,适用压缩BCD码 调整原则: 若AL低4位>9或AF=1 则ALAL+6,进行低字节调整 若AL高4位>9或CF=1 则ALAL+60H,进行高字节调整,使CF=1 例1、AL=38(BCD) BL=15(BCD),求两数之和 ADD AL,BL ;AL=4BH DAA ;AL=53H(BCD)CF 0 例2、AL=88(BCD) BL=49(BCD),求两数之和 ADD AL,BL ;AL=0D1H DAA ;AL=37H,CF=1
使用AAA、DAA指令注意: 仅对AL调整,运算必须是字节,且结果存在AL中 参加运算的数必须合法,即压缩或非压缩BCD码 紧跟在ADD、ADC、INC指令后面
2、减法指令 SUB 目的,源 目的目的-源 SBB 目的,源 目的目的-源-CF DEC 目的 目的目的-1 NEG 目的 目的0-目的 CMP 目的,源 源-目的 AAS DAS 说明:源操作数为立即数、通用寄存器、存储器 目的 通用寄存器、存储器 源、目不能都是存储器 算术运算指令影响标志
3、乘法指令 采用字节乘还是字乘 取决于原操作数 MUL 源 IMUL 源 AAM 说明: *乘法指令只给出一个源操作数,另一源操作数, 目的操作数采用隐含寻址 *乘法指令可字节与字节乘,可字与字乘 字节乘 :AX AL*源 字乘:DX AX AX*源 *源操作数可选寄存器、存储器(说明字还是字节) *乘法影响标志CF,OF
例1: MUL DL MUL CX MUL BYTE PTR[SI] MUL WORD PTR[BX] 例2: AL=55H,BL=14H MUL BL 执行后AX=06A4H CF=1,OF=1 例3: AL=-28H,BL=59H IMUL BL 执行后AX=F98CH,CF=1,OF=1
乘法的ASCII调整: AAM 把AL/10商在AH,余数在AL 例: MOV AL,09H MOV BL,06H MUL BL ;AL=36H AAM ;AH=05H,AL=04H
4、除法指令 DIV 源 IDIV 源 AAD CBW CWD 说明: *除法指令只给出一个源操作数,另一源操作数, 目的操作数采用隐含寻址 *除法可完成字节或字除,取决于源操作数 *字节除 商AL,余数AH AX/源(字节) 字除 商AX,余数DX DXAX/源(字) *源操作数可选寄存器、存储器(说明字还是字节) *除法指令对标志无影响,但超过范围,产生中断
例1:完成两个无符号数7A86H,04H相除 MOV AX,7A86H MOV BL,04H DIV BL 超过范围,产生除法中断 MOV DX,0 MOV AX,7A86H MOV BX,04H DIV BX 例2:-38/3的商和余数 MOV AX,-38 MOV CH,03H IDIV CH MOV AL,-38 MOV CH,03H CBW IDIV CH AL=-13 AH=1 AL=-12 AH=-2 ? OR
符号扩展: CBW AL 符号扩展 AX CWD AX 符号扩展 DX,AX
除法的ASCII调整: AAD ALAH*10+AL,AH 0 在做除法前先除 例:完成非压缩BCD码37除5 MOV AX,0307H MOV BL,05H AAD ;AL=25H DIV BL ;AL=7(商)AH=2(余数)
三、逻辑运算与移位指令 1 、逻辑运算指令 名称 操作码 操作数 功能 非 NOT 目的 目的 目的 与 AND 目的,源 目的 目的源 或 OR 目的,源 目的 目的源 异或 XOR 目的,源 目的 目的源 测试 TEST 目的,源 目的源
与指令用来清除或保留操作数中某些位 • 或指令用来保留或使操作数某些位置1 • 异或指令可使某些位取反,某些位不变 • 测试指令完成的功能是与,但不回送结果 • 逻辑运算指令对标志影响: NOT 指令不影响标志,其余指令根据结果置 SF,ZF,PF 、CF与OF 清0、AF 不确定。
2 、移位与循环指令 逻辑左移 SHL 目的,计数值 算术左移 SAL 目的,计数值 逻辑右移 SHR 目的,计数值 算术右移 SAR 目的,计数值 循环左移 ROL 目的,计数值 循环右移 ROR 目的,计数值 带进位循环左移 RCL 目的,计数值 带进位循环右移 RCR 目的,计数值
M 0 CF L SHL/SAL SHR SAR ROL ROR RCL RCR CF M L 0 L CF M CF CF CF CF
逻辑左移 无符号乘2 逻辑右移 无符号除2 算术左移 带符号乘2 算术右移 带符号除2 • 移位: • 循环指令用于按位检测,又能恢复原值场所 • 8086循环和移位指令一次可移1位,也可移多位(CL) • 操作数形式: • 对标志影响: 目的操作数 可选用存储器、寄存器 计数值 选1或CL AF无定义、PF,SF,ZF根据结果定、OF 移一位,根据结果定;移多位,不确定
例 1: MOV AL,10000101B MOV CL,03H ;右移三位=除8 SHR AL,CL ;AL=10H=16 例2: MOV AL,10000000B MOV CL,03H SAR AL,CL ;AL=F0H=-16
用移位指令和循环指令可完成多精度数移位 例1:完成 AX,BX左移一位 SHL BX,1 RCL AX,1 例2: 完成AX,BX 右移一位(无符号数) SHR AX,1 RCR BX,1