《检测技术第三章-1》由会员分享,可在线阅读,更多相关《检测技术第三章-1(62页珍藏版)》请在金锄头文库上搜索。
1、第三章 8086/8088指令系统与汇编语言程序设计主要内容: 指令操作数寻址方式 指令系统 汇编语言程序结构 系统功能调用第三章 8086指令系统与汇编程序2本章重点?掌握各种寻址方式?掌握常用指令的使用方法?掌握汇编程序的基本结构?掌握经典例题第三章 8086指令系统与汇编程序3第三章 作业(P.108) 习题1,2,4,7,9,12第三章 8086指令系统与汇编程序43.1 8086CPU的寻址方式操作码操作数或操作数地址执行某种操作的命令操作命令的内容或对象ROUT: PUSH BP ;保存BP操作码:压栈操作数:BP寄存器注释标号3.1.1.指令的基本格式第三章 8086指令系统与汇
2、编程序5指令编译1011000 00000001MOV AL, 1机器指令(二进制码)符号指令(汇编语言)编译、连接编译、连接第三章 8086指令系统与汇编程序6系统控制 指令集X86系列微处理器指令系统的发展基本指令集8086/8088 116条指令条指令条指令条指令增强指令集基本指令集Pentium 306条指令条指令条指令条指令保护模式实模式第三章 8086指令系统与汇编程序73.1.2 寻址方式寻址方式:寻找指令中操作数来源的方式。操作码操作数或操作数地址包含在指令中在存储器中在寄存器中 在寄存器中在寄存器中在存储器中 在存储器中包含在指令中包含在指令中第三章 8086指令系统与汇编程
3、序81.立即寻址MOV AX,2050hAH ALAX代码段?址?址50h20h执行前?40h10h20h50h第三章 8086指令系统与汇编程序92.寄存器寻址操作数包含在指令规定的操作数包含在指令规定的操作数包含在指令规定的操作数包含在指令规定的8 8 8 8位位位位、16161616位位位位、32323232位寄存器中位寄存器中位寄存器中位寄存器中MOV DS,AX10h 40h20h 50h20h 50hDSAX源操作数目的操作数注意:执行指令后,源操作数的内容不会改变第三章 8086指令系统与汇编程序103.存储器寻址(内存寻址)实模式下,X86系列处理器对内存采用分段式管理,程序
4、员在指令中使用的是逻辑地址,逻辑地址由两部分组成 存储单元所在段的基地址:段内偏移地址(偏移量) 段的基地址一般由操作系统将程序装入内存时设置,程序 员在编程时主要使用段内偏移地址,段内偏移地址也称为 有效地址(EA)MOV ES:3000H, ALES:称为段超越前缀(可选),指示处理器访问哪个逻辑 段 3000H为段内偏移地址(有效地址)第三章 8086指令系统与汇编程序11有效地址 (EA)?段内偏移地址也称为有效地址EA=基址寄存器+变址寄存器比例因子+位移量32位寻址: 基址寄存器:BX,BP 变址寄存器:SI,DI 比例因子:2,4,8 (16位为1) 位移量:8,16位可由以下四
5、部分组成:?基址寄存器内容?变址寄存器内容?比例因子?位移量2000:0000h20000h21000h偏移量 1000h有效地址物理地址逻辑地址2000:1000h第三章 8086指令系统与汇编程序12物理地址?物理地址 (PA) PA段首地址16偏移地址MOV AX,1000hDS 2 0 0 0 01 0 0 02 1 0 0 0AX42 C3注意:当前段寄存器,可以使用前缀表示段超越。如:MOV AX,ES:1000h2000:0000h20000h21000h偏移量 1000h物理地址逻辑地址2000:1000hC3 42第三章 8086指令系统与汇编程序132000:0000h20
6、000h21000h偏移量 1000h物理地址逻辑地址2000:1000hC3 42(1)直接寻址PA=16(段首地址)nn MOV AX,1000hDS 2 0 0 0 01 0 0 02 1 0 0 0AX注意:用方括 号表示偏移量42 C3第三章 8086指令系统与汇编程序14偏移量存放在 寄存器2000:0000h20000h21000h偏移量 1000h物理地址逻辑地址2000:1000hC3 42(2)寄存器间接寻址DS 2 0 0 0 0SI1 0 0 02 1 0 0 042 C3(BX) PA=16(段首地址)+ (SI) (DI)MOV AX,SIAX第三章 8086指令系
7、统与汇编程序15段首地址(3)寄存器相对寻址段首地址EA=基址位移量基址存放于:BX,SI,DI,BP寄存器中 (BX) PA=16(DS)+ (SI) + 位移量 (DI) PA=16(SS)+(BP)+位移量MOV AX,SI+3000h位移量3000hDSSI第三章 8086指令系统与汇编程序16应用:数组的寄存器相对寻址方式MOV AX, SI+3000h源变地址寄存器+(位移量)DSSI第三章 8086指令系统与汇编程序17(4)基址变址寻址基址加变址寻址主要用于二维数组操作和表格 EA=基址寄存器+变址寄存器 基址寄存器 MOV AX, BX+SI单元(0,0)单元(0,1)单元(
8、0,n)单元(1,0)单元(1,n)单元(1,1)单元(m,n)变址寄存器+第三章 8086指令系统与汇编程序18(5)相对的基址变址寻址基址加变址寻址主要用于二维数组操作和二重循环 EA=基址寄存器+变址寄存器+位移量MOV AX, BX+SI+100h单元(0,0)单元(0,1)单元(0,n)单元(1,0)单元(1,n)单元(1,1)单元(m,n)(位移量)基址寄存器变址寄存器位移量是段首到数组头部的距离。基址寄存器存放维数的位置变址寄存器存放个数的位置第三章 8086指令系统与汇编程序193.2 8086/8088 指令系统?数据传送指令?算术运算指令?逻辑运算与移位指令?串操作指令?控
9、制转移指令?处理器控制指令第三章 8086指令系统与汇编程序203.2.1 数据传送指令1.数据传送指令 执行后不影响标志位 1). 通用数据传送指令 格式:MOV 目标操作数,源操作数 注意:源操作数不变目标操作数源操作数立即数立即数寄存器寄存器*存储器存储器CS段寄存器*立即数第三章 8086指令系统与汇编程序21通用数据传送指令二格式:XCHG 目标操作数, 源操作数 例: XCHG AX, SI+0400h存储器存储器6A28hAX存储器25C7hSI+0400h6A28h25C7h第三章 8086指令系统与汇编程序22通用数据传送指令三 格式:XLAT 表头变量名 查表指令,用来取表
10、中某指定数的值 TABLE DB 30h,31h,32h,33h,34h,35h,36h,37h,38h,39hMOV BX, OFFSET TABLE MOV AL, 5h XLAT TABLEDS存储器TABLE30h 31h 32h 33h 34h 35h(BX)+(AL)AL35h第三章 8086指令系统与汇编程序231. 数据传送操作指令2). 堆栈操作指令 格式:PUSH 源操作数 POP 源操作数 注意:对字操作源操作数隐含目标操作数堆栈段SP寄存器存储器字节操作数当前栈顶指针第三章 8086指令系统与汇编程序24压栈操作PUSH AX PUSH BX PUSH CX PUSH
11、DXSS堆栈段存储器3023h2001h3000h25C3h5231h7201hAX3000h低地址高地址BX25C3hCX5231hDX7201hSPSP第三章 8086指令系统与汇编程序25SS堆栈段存储器3023h2001h低地址高地址25C3h5231h7201h3000hSPAXBXCXDX2234h3536h42A6h5A31h3000h25C3h5231h7201hSPSPSPSP弹栈操作POP DX POP CX POP BX POP AX第三章 8086指令系统与汇编程序262.目标的地址传送指令?LEA,LDS,LES缺省段为数据段基地址DS2728hLEA AX,2728
12、hAX1234h2728h20h 07h 59h 90hLDS DI,2728hDS1234hDI1234h0720h9059h低地址高地址 注意:LDS,LES的目的操作数是寄存器,但不能是段寄存 器,源操作数一定是存储器。第三章 8086指令系统与汇编程序27LEA指令举例数据拷贝,将存放在A1的100个字节的数据拷贝到A2。汇编程序如下: LEA SI,A1 ;SI指向A1LEA DI,A2 ;DI指向A2MOV CX,100 ;CX存放计数初值AGAIN: MOV AL,SI ;从A1处取值MOV DI,AL ;传送一个字节数INC SI ;修改源地址指针INC DI ;修改目标地址指
13、针DEC CX ;计数减1JNZ AGAIN ;计数值不为0,继续20h 07h 59h 90hA1A23BDF:10003BDF:1300(SI)=1300H(DI)=1000H第三章 8086指令系统与汇编程序28000000003. 标志位传送指令?LAHF,SAHF0000OFDFIFTFSFZF0AF0PF0CF15870SFZF0AF0PF0CFAH标志位寄存器SFZF0AF0PF0CFSFZF0AF0PF0CFLAHFSAHF第三章 8086指令系统与汇编程序29标志位传送指令?PUSHF,POPF0000OFDFIFTFSFZF0AF0PF0CF15870标志位寄存器PUSHF
14、 堆栈段SPSP SPPOPF标志位寄存器1562h第三章 8086指令系统与汇编程序30输入输出指令在输出/输入电路中,通常包含一组寄存器,用于与CPU交 换信息,称为I/O端口。通常采用专用指令进行读写。IN AL 或 AX,端口号OUT 端口号,AL 或 AX例:IN AL,70HIN AX,70H ;注意这是对两个端口注意这是对两个端口注意这是对两个端口注意这是对两个端口OUT 70H,ALOUT 70H,AX ;注意这是对两个端口注意这是对两个端口注意这是对两个端口注意这是对两个端口注意:如果端口号大于255(0FFH),怎么办?第三章 8086指令系统与汇编程序313.2.2算术运
15、算指令加、减、乘、除 运算对象:8/16/32位有符号/无符号整数,以 及BCD码 运算结果有可能影响标志位OFDFIFTFSFZFAFPFCF15870溢出标志位进位(借位) 标志位符号标志位零标志位第三章 8086指令系统与汇编程序32加法和减法?ADD、ADC、INC、DAA、AAA?组合BCD码?非组合BCD码?SUB、SBB、DEC、CMP、NEG、DAS、 AAS第三章 8086指令系统与汇编程序33加法指令?ADD指令: 结果存回目标操作数。 目标操作数:寄存器或存储器 源操作数:立即数、寄存器或存储器 注意:不能同时是存储器;不能对段寄存器进行加法运算。 (段寄存器也不能参与减法、乘法和除法运算)第三章 8086指令系统与汇编程序34MOV SI,1000HMOV AX,SIMOV DI,2000HADD AX,DIMOV SI,AXMOV AX,SI+2ADC AX,DI+2MOV SI+2,AX加法举例双精度字加法: 1234FEDCh11228765hDS数据段存储器ADD AX,DIMOV DI,2000h低地址高地址MOV SI,1000hFEhDChMOV AX,SI