微型计算机原理及接口技术 第3章_第1页
微型计算机原理及接口技术 第3章_第2页
微型计算机原理及接口技术 第3章_第3页
微型计算机原理及接口技术 第3章_第4页
微型计算机原理及接口技术 第3章_第5页
已阅读5页,还剩173页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3 3章章 指令系统指令系统 3.1 3.1 概述概述 3.2 3.2 80486 80486寻址方式寻址方式 3.3 3.3 80486 80486标志寄存器标志寄存器 3.4 3.4 汇编语言语法规则之一汇编语言语法规则之一 3.5 3.5 80486 80486基本集指令基本集指令 3. 3. 概述概述 指令指令:通知:通知 CPUCPU执行某种操作的执行某种操作的“命令命令”,CPUCPU全部指令全部指令的的 集合,称为指令系统集合,称为指令系统指令的书写格式指令的书写格式H目标指令目标指令(机器指令):用一串(机器指令):用一串0 0,1 1代码书写代码书写 注意:硬件只能识别,

2、存储,运行目标指令注意:硬件只能识别,存储,运行目标指令H符号指令:符号指令:用规定的助记符用规定的助记符, ,规定的书写格式书写规定的书写格式书写 的指令的指令 80486 80486符号指令与机器指令对照表符号指令与机器指令对照表 操作操作 80486 80486符号指令符号指令 80486 80486机器指令机器指令 1234HAX 1234HAX MOV AX, 1234H MOV AX, 1234H B8 34 12 B8 34 12 AX+BXAX AX+BXAX ADD AX, BX ADD AX, BX 03 C3 03 C3 CX-DXCXCX-DXCX SUB CX, DX

3、SUB CX, DX 2B CA 2B CA 返回调用程序返回调用程序 RETRET C3C3MOV: MOVEMOV: MOVE传送传送 ADD:ADD:加加 SUB:SUB:减减 RET:RETURN RET:RETURN 返回返回指令的组成:指令的组成: 操作码操作码 + 操作数操作数 操作码操作码 告诉计算机要执行的操作是什么,如:告诉计算机要执行的操作是什么,如:加、减、逻辑与等。加、减、逻辑与等。 操作数操作数 执行操作过程所要操作的数,如加运算执行操作过程所要操作的数,如加运算的两个加数。的两个加数。3.3.指令的组成指令的组成4.4.目标程序的生成目标程序的生成 汇编汇编源程序

4、源程序编辑、编译、链接编辑、编译、链接可执行的机器指令可执行的机器指令程序(目标程序程序(目标程序) )5.5.指令长度指令长度 486 486指令长度(机器指令长度)为指令长度(机器指令长度)为1 11616字节字节规定:多字节指令占用连续的内存单元,存放指令第规定:多字节指令占用连续的内存单元,存放指令第 一字节的内存地址,称为一字节的内存地址,称为“指令地址指令地址”。 CPUCPU只能识别,存储,运行目标指令,而用机器指只能识别,存储,运行目标指令,而用机器指令编程非常困难。于是早期的专家们发明了符号指令,再经过令编程非常困难。于是早期的专家们发明了符号指令,再经过软件把符号指令软件把

5、符号指令机器指令。图示如下:机器指令。图示如下:6.6.指令存放指令存放 如:如:12345H12345H单元中有一条指令单元中有一条指令 MOV AX,6789HMOV AX,6789H67H67H89H89HB8HB8H12345H:12345H:操作码操作码操作数操作数6789H6789HMOV AX,6789H 先写操作码,再写操作数。先写操作码,再写操作数。 多字节操作数连续存放。存放规律多字节操作数连续存放。存放规律: : 低位字节存放在低地低位字节存放在低地址单元,高位字节存放在相邻的高地址单元址单元,高位字节存放在相邻的高地址单元8. 符号指令的符号指令的 书写格式书写格式标号

6、标号: : 操作码助记符操作码助记符 空格空格 操作数助记符操作数助记符;注释;注释 如如:NEXT: ADD AX , BX ;AX+BX AXNEXT: ADD AX , BX ;AX+BX AX INC SI INC SI ;SI+1 SI ;SI+1 SI 标号:标号:以字母开头以字母开头, ,后跟字母后跟字母, ,数字数字, ,下划线下划线, ,长度长度3131字符字符 标号又称符号地址标号又称符号地址, ,代表该指令的逻辑地址。可有可代表该指令的逻辑地址。可有可 无,设置是为了程序的转向无,设置是为了程序的转向注解:注解:以以“ ;”开头,不执行,打印程序清单时照原样打印,开头,不

7、执行,打印程序清单时照原样打印,“系统保留字系统保留字”不能做标号。不能做标号。3.2 804863.2 80486寻址方式寻址方式操作数是指令的操作对象,寻址方式与地址码有密切关操作数是指令的操作对象,寻址方式与地址码有密切关系系. . 形成操作数地址码的过程就是寻址。形成操作数地址码的过程就是寻址。“寻址方式寻址方式”:通俗的讲,就是通知:通俗的讲,就是通知CPUCPU本条指令的操本条指令的操作数在哪儿?或者说用什么方式才能得到作数在哪儿?或者说用什么方式才能得到操作数操作数。操作数操作数存在方式存在方式 在微型计算机中,操作数可能以以下三种方式存在:在微型计算机中,操作数可能以以下三种方

8、式存在: 操作数包含在指令中操作数包含在指令中即指令的操作数部分就包含着操作数本身。即指令的操作数部分就包含着操作数本身。 MOV AX, 1234H ; ADD AL, 2 操作数包含在操作数包含在CPU的某一个内部寄存器中的某一个内部寄存器中 这时指令中的操作数是这时指令中的操作数是CPU内部的某一个寄存器内部的某一个寄存器 MOV DS, AX 操作数在内存的数据区中操作数在内存的数据区中 这时指令中的操作数包含着此操作数的地址这时指令中的操作数包含着此操作数的地址 MOV AX,DS:2000H ; MOV BUF , AL 8048680486有有3 3类类7 7种寻址方式种寻址方式

9、立立 即即 寻址方式:寻址方式:获得立即数获得立即数寄存器寻址方式:寄存器寻址方式:获得寄存器操作数获得寄存器操作数存储器寻址方式:存储器寻址方式:获得内存操作数(存储器操作数)获得内存操作数(存储器操作数)H学习重点:学习重点:怎样在怎样在符号指令符号指令中,正确的描述各种寻址方式中,正确的描述各种寻址方式 1.立即寻址方式立即寻址方式 这种寻址方式所提供的操作数直接放在指令中,紧跟在操作码的后这种寻址方式所提供的操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在代码段区域中。立即数可以是面,与操作码一起放在代码段区域中。立即数可以是8、16、32位位.操作数是指令的一部分操作数是指

10、令的一部分,完整地取出该条指令,也就获得了操完整地取出该条指令,也就获得了操作数。作数。 操作码操作码34H12H代代码码段段低低高高DXDLDHDX3412例:例:MOVDX,1234H015立即寻址方式示意图立即寻址方式示意图如如:MOVEAX , 12345678H MOVBL , 10101010B ;AAH BL MOV CL , 4;FCH CL MOVDL , A;41H DL ADD AL , 0C8H MOVSI , 3*5;15 SI上例源操作数即为立即寻址,上例源操作数即为立即寻址, 立即数书写规定:立即数书写规定:H立即数以数字开头,以开头的立即数以数字开头,以开头的1

11、616进制数,必须前缀进制数,必须前缀0 0。H程序员可以按自己的习惯书写立即数,各种合法的立即数经汇编程序员可以按自己的习惯书写立即数,各种合法的立即数经汇编 后,一律自动转换成等值的二进制数,负数用补码表示。后,一律自动转换成等值的二进制数,负数用补码表示。H立即数的数制用后缀表示立即数的数制用后缀表示,B,B表示二进制数表示二进制数,H,H表示十六进制数表示十六进制数,D,D或或 缺省为十进制数,单引号括起来的字符编译成相应的缺省为十进制数,单引号括起来的字符编译成相应的ASCIIASCII码码 。H可以用可以用+ + * * / / 组成立即数表达式组成立即数表达式2. 寄存器寻址寄存

12、器寻址操作数在操作数在CPU的某个寄存器中,符号指令中直接写出寄存的某个寄存器中,符号指令中直接写出寄存器名称。器名称。 如:如: MOV AX , DS ;DS内容内容 AX INC SI ;SI+1 SI (Increase 增量增量) DEC DI ;DI 1 DI (Decrease 减量减量)如:下述条指令,目标操作数即为寄存器寻址如:下述条指令,目标操作数即为寄存器寻址 MOVEAX,12345678H MOVBL,10101010B ;AAH BL MOV CL, 4;FCH CL MOVDL,5;35H DL ADD AL,0C8H MOVSI,3*5;15 SI3.3.存储器

13、操作数寻址方式存储器操作数寻址方式 重申:重申:H在读写内存操作数之前,在读写内存操作数之前,CPUCPU必须知道相关存储单元的物理地址。必须知道相关存储单元的物理地址。H 程序员的责任仅在于正确的书写逻辑地址表达式,然后由程序员的责任仅在于正确的书写逻辑地址表达式,然后由CPUCPU自动运自动运 算以求出物理地址。算以求出物理地址。 H 由于由于CPUCPU对存储器采用分段管理对存储器采用分段管理, , 因此指令格式中只能写出存放操作数因此指令格式中只能写出存放操作数 的内存单元的的内存单元的“逻辑地址逻辑地址”。操作系统将程序调入内存时才给段寄存器赋实际值。此时,计算出的操作系统将程序调入

14、内存时才给段寄存器赋实际值。此时,计算出的20位地址才是实际的物理地址位地址才是实际的物理地址程序员给出的逻辑地址形式程序员给出的逻辑地址形式 段寄存器:段寄存器:偏移地址偏移地址偏移地址偏移地址可以由以下各种情况构成:可以由以下各种情况构成: 直接地址直接地址 包含在指令中的包含在指令中的16位地址偏移量位地址偏移量。 间接地址间接地址 由由CPUCPU内部某个内部某个1616位寄存器的内容决定,如位寄存器的内容决定,如 BXBX、BPBP、SISI、DIDI。 基址基址 基址寄存器基址寄存器BXBX或或BPBP加上指令中包含的加上指令中包含的8 8位或位或1616位位移量位位移量。 变址变

15、址 变址寄存器变址寄存器SISI或或DIDI加上指令中包含的加上指令中包含的8 8位或位或1616位位移量位位移量。 基址加变址基址加变址 由一个基址寄存器由一个基址寄存器BXBX或或BPBP加上一个变址寄存器加上一个变址寄存器SISI或或DIDI,再加,再加 上指令中包含的上指令中包含的8 8位或位或1616位位移量位位移量。(1) (1) 直接寻址直接寻址 地址表达式的格式地址表达式的格式1 1:段寄存器:段寄存器: 偏移地址偏移地址 地址表达式的格式地址表达式的格式2 2: 段寄存器:变量名段寄存器:变量名 用变量名代表存储单元的有效地址用变量名代表存储单元的有效地址 如:如:MOVMO

16、VAL, ES:2CHAL, ES:2CH 从从ESES附加段偏移地址为附加段偏移地址为2CH2CH的单元取数的单元取数ALAL如:如:MOV AX, DS:2000HMOV AX, DS:2000H 从数据段偏移地址为从数据段偏移地址为2000H2000H的单元取一字的单元取一字AXAX这种格式很少使用,这种格式很少使用, 通常情况下,程序员不知道某单元的偏移地址通常情况下,程序员不知道某单元的偏移地址 操作码操作码34H12H50H30H代代码码段段低低高高DS0050AXALAH例:例: MOV AX, MOV AX, DS:1234HDS:1234H直接寻址方式示意图直接寻址方式示意图

17、50000H050000H+ 1234H51234H51234H数数据据段段设数据段设数据段XXXX字节单元的内容为字节单元的内容为11H11H ES ES附加段附加段YYYY字单元的内容为字单元的内容为2233H2233H MOV AL, MOV AL, DS:XX DS:XX ; ;取数据段取数据段XXXX字节单元的内容字节单元的内容ALAL 或或 MOV AL, MOV AL, XX XX ; AL=11H ; AL=11H MOV MOV AX, AX, ES:YY ES:YY ; ;取取ESES附加段附加段YYYY字单元的内容字单元的内容AXAX 或或 MOV MOV AX, AX,

18、 YYYY ; AX=2233H ; AX=2233H说明:说明:H汇编语言允许为某单元起一个汇编语言允许为某单元起一个“名字名字”, ,这个名字就称为该单元的这个名字就称为该单元的“变量变量名名”,经汇编之后,变量名有段基址和偏移量两种属性。,经汇编之后,变量名有段基址和偏移量两种属性。H变量名是唯一的,程序中不能有重复的变量名,变量名是唯一的,程序中不能有重复的变量名, “段寄存器:段寄存器:”可以省略。可以省略。 (2)(2)寄存器间接寻址寄存器间接寻址 寄存器间接寻址又称间接寻址,间址寄存器间接寻址又称间接寻址,间址 什么是间接寻址?什么是间接寻址? 操作数在内存单元,该单元的段基址在

19、操作数在内存单元,该单元的段基址在段寄存器段寄存器中中, , 有效地址在有效地址在间址寄存器间址寄存器中,中,CPUCPU首先进行地址计算首先进行地址计算 间接寻址的地址表达式间接寻址的地址表达式 段寄存器:段寄存器: 间址寄存器间址寄存器 某单元的物理地址某单元的物理地址= =段寄存器内容段寄存器内容16+16+间址寄存器间址寄存器 访问约定的逻辑段访问约定的逻辑段 ,间接寻址的地址表达式简,间接寻址的地址表达式简 化为:化为: 间址寄存器间址寄存器 某单元的物理地址某单元的物理地址= =约定的段寄存器内容约定的段寄存器内容16+16+间址寄存器间址寄存器 间址寄存器间址寄存器 和约定访问的

20、逻辑段和约定访问的逻辑段486486规定:规定:间址寄存器间址寄存器约定访问的逻辑段约定访问的逻辑段BPBP堆栈段堆栈段 16 16位寻址方式位寻址方式BX,SI,DIBX,SI,DI数据段数据段EBP,ESPEBP,ESP堆栈段堆栈段 32 32位寻址方式位寻址方式EAXEAXEDX,ESI,EDIEDX,ESI,EDI数据段数据段操作码操作码30H代代码码段段低低高高DS5 0 0 030例:例: MOV AX , MOV AX , BX BX 间接寻址方式示意图间接寻址方式示意图50000H051000H数数据据段段1 0 0 0 HH 5 1 0 0 0 HBX+50H50AX举例:举

21、例:设数据段设数据段BUFBUF字节单元的内容为字节单元的内容为55H,55H,取出该数取出该数 ALAL解解1 1:用:用BXBX间址间址 MOV DS , MOV DS , 数据段段基址数据段段基址 MOV BX , BUFMOV BX , BUF单元的有效地址单元的有效地址 MOV AL , DS:BX ;AL=55HMOV AL , DS:BX ;AL=55H等价于等价于: : MOV AL , BX MOV AL , BX 由于由于BXBX间址,约定访问的是数据段,间址,约定访问的是数据段, “DS:DS:”可省可省解解2 2:用:用BPBP间址间址 MOV DS , MOV DS

22、, 数据段段基址数据段段基址 MOV BP , BUFMOV BP , BUF单元的有效地址单元的有效地址 MOV AL , DS:BP ;AL=55HMOV AL , DS:BP ;AL=55H 不能写成不能写成: MOV AL , BP: MOV AL , BP 由于由于BPBP间址约定访问的是堆栈段,间址约定访问的是堆栈段, “DS:DS:”不可省不可省解解3 3:用变量名直接寻址:用变量名直接寻址 MOV DS,MOV DS,数据段段基址数据段段基址 MOV AL, BUFMOV AL, BUF ;AL=55H ;AL=55H(3)(3)基址寻址基址寻址 该寻址方式的有效地址由两部分组

23、成。一部分在该寻址方式的有效地址由两部分组成。一部分在基址寄存器中,另一部分为常量基址寄存器中,另一部分为常量 。 基址寻址的地址表达式:基址寻址的地址表达式: 段寄存器段寄存器:基址寄存器基址寄存器+ +位移量位移量 物理地址物理地址= =段寄存器内容段寄存器内容16+16+基址寄存器基址寄存器+ +位移量位移量 访问约定的逻辑段,简化的地址表达式:访问约定的逻辑段,简化的地址表达式: 基址寄存器基址寄存器+ +位移量位移量 物理地址物理地址= =约定的段寄存器内容约定的段寄存器内容16+16+基址寄存器基址寄存器+ +位移量位移量 基址寄存器和约定访问的逻辑段基址寄存器和约定访问的逻辑段基

24、址寄存器基址寄存器约定访问的逻辑段约定访问的逻辑段BPBP堆栈段堆栈段 16 16位寻址方式位寻址方式BXBX数据段数据段EBP,ESPEBP,ESP堆栈段堆栈段 32 32位寻址方式位寻址方式EAXEAXEDX,ESI,EDIEDX,ESI,EDI数据段数据段操作码操作码30H代代码码段段低低高高DS5 0 0 0AL例:例: MOV AL,MOV AL,BX+2BX+2基址寻址方式示意图基址寻址方式示意图50000H051002H数数据据段段1 0 0 0 HH 5 1 0 0 2 H+BX02H 0 2 +H 举例举例设数据段设数据段BUFBUF单元依次有:单元依次有:78H,56H,3

25、4H,12H78H,56H,34H,12H则:则:MOVMOV DS , , 数据段段基址数据段段基址MOV BX , BUFMOV BX , BUF单元有效地址单元有效地址MOV DH , MOV DH , BX+1BX+1 ;DH=56H ;DH=56HMOV DX , MOV DX , BX+2BX+2 ;DX=1234H ;DX=1234H12H34H56H78HBUF(4) (4) 变址寻址变址寻址 有比例因子的变址寻址其地址表达式为有比例因子的变址寻址其地址表达式为 段寄存器:段寄存器: 比例因子比例因子* *变址寄存器变址寄存器+ +位移量位移量 物理地址物理地址= =段寄存器段

26、寄存器16+16+比例因子比例因子变址寄存器变址寄存器+ +位移量位移量 没有比例因子的变址寻址其地址表达式为:没有比例因子的变址寻址其地址表达式为: 段寄存器:段寄存器: 变址寄存器变址寄存器+ +位移量位移量 访问约定的逻辑段可简化为访问约定的逻辑段可简化为 : 变址寄存器变址寄存器+ +位移量位移量 物理地址物理地址= =约定的段寄存器约定的段寄存器16+16+变址寄存器变址寄存器+ +位移量位移量 变址寄存器与约定访问的逻辑段变址寄存器与约定访问的逻辑段变址寄存器变址寄存器约定访问的逻辑段约定访问的逻辑段适用于适用于SI,DISI,DI数据段数据段无比例因子无比例因子,16,16位位寻

27、址寻址EBPEBP堆栈段堆栈段有比例因子有比例因子,32,32位位寻址寻址EAXEAXEDX,ESI,EDIEDX,ESI,EDI数据段数据段操作码操作码30H代代码码段段低低高高DS5 0 0 0AL例:例: MOV AL,MOV AL,SI+2SI+2基址寻址方式示意图基址寻址方式示意图50000H051002H数数据据段段1 0 0 0 HH 5 1 0 0 2 H+SI02H 0 2 +H说明:比例因子只能是说明:比例因子只能是1 1、2 2、4 4、8 8 因此:因此: MOV AL , 8MOV AL , 8* *SI+15 ;SI+15 ;非法,非法,1616位寻址不能使用比例因

28、子位寻址不能使用比例因子 MOV AL , 10MOV AL , 10* *ESI+5 ;ESI+5 ;非法指令,比例因子错了非法指令,比例因子错了 MOV AL , ES:SI ;MOV AL , ES:SI ;访问附加段访问附加段 MOV AL , SI ;MOV AL , SI ;访问数据段访问数据段(5) (5) 基址加变址寻址基址加变址寻址 存储单元的有效地址由存储单元的有效地址由3 3部分组成部分组成 有比例因子的基址加变址的地址表达式为:有比例因子的基址加变址的地址表达式为: 段寄存器:段寄存器: 基址寄存器基址寄存器+ +比例因子比例因子* *变址寄存器变址寄存器+ +位移量位

29、移量 访问约定逻辑段其地址表达式简化为:访问约定逻辑段其地址表达式简化为: 基址寄存器基址寄存器+ +比例因子比例因子* *变址寄存器变址寄存器+ +位移量位移量 无比例因子基址加变址无比例因子基址加变址地址表达式:地址表达式: 段寄存器:段寄存器: 基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +位移量位移量 访问约定逻辑段:访问约定逻辑段: 基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +位移量位移量 基址加变址寻址是基址寻址和变址寻址的组合基址加变址寻址是基址寻址和变址寻址的组合,要求要求 基址寄存器和变址寄存器都是基址寄存器和变址寄存器都是1616位或都是位或都是3232位,否

30、位,否 则(则(1616位寻址和位寻址和3232位寻址混合使用)是非法指令位寻址混合使用)是非法指令 默认的段寄存器不一致,这样的组合虽然是合法,默认的段寄存器不一致,这样的组合虽然是合法, 但容易出错但容易出错操作码操作码30H代代码码段段低低高高DS5 0 0 0AL例:例: MOV AL,MOV AL,BX+SI+0250HBX+SI+0250H基址基址+变址寻址方式示意图变址寻址方式示意图50000H053250数数据据段段2 0 0 0 HH 5 3 2 5 0 H+SI50H0 2 5 0 +H1 0 0 0 H+BX02H 寻址方式的学习要点:寻址方式的学习要点:1.1.指令中的

31、操作数有指令中的操作数有3 3种种: :立即数立即数, ,寄存器数寄存器数, ,内存操作数内存操作数 访问立即数叫立即寻址方式访问立即数叫立即寻址方式; ;访问寄存器数叫寄存器寻访问寄存器数叫寄存器寻 址方式址方式; ; 访问内存操作数由访问内存操作数由5 5种寻址方式种寻址方式: : 直接寻址、间址、基址、变址、基址加变址直接寻址、间址、基址、变址、基址加变址 不同的寻址方式是为了程序员在写指令时通过不同的手不同的寻址方式是为了程序员在写指令时通过不同的手 段提供操作数段提供操作数. .2.2.关于关于1616位寻址和位寻址和3232位寻址位寻址 1616位寻址:采用位寻址:采用1616位间

32、址、基址、变址、基址加变址位间址、基址、变址、基址加变址 3232位寻址:采用位寻址:采用3232位间址、基址、变址、基址加变址位间址、基址、变址、基址加变址3 3. .在实模式下,一个逻辑段的体积最大为在实模式下,一个逻辑段的体积最大为64K64K,存储,存储 单元的单元的有效地址为有效地址为1616位,不可能超过位,不可能超过FFFFH,FFFFH,在实模式下运行的程在实模式下运行的程序通常采用序通常采用1616位寻址位寻址4.4.关于段约定和段超越关于段约定和段超越在 用 间 址 、 基 址 、 变 址 、 基 址 加 变 址 寻 址 内 存 操在 用 间 址 、 基 址 、 变 址 、

33、 基 址 加 变 址 寻 址 内 存 操 作数时,其地址表达式都有作数时,其地址表达式都有2 2种书写格式种书写格式有段有段 前缀和前缀和无段前缀无段前缀如用如用BPBP、EBPEBP、ESPESP参与寻址,参与寻址,CPUCPU自动认为是访问堆栈段自动认为是访问堆栈段, , 段超越前缀段超越前缀“SSSS:”可省可省MOV AL , SSMOV AL , SS:BP BP ;访问;访问SSSS段,用段,用BPBP间址间址MOV AL , BPMOV AL , BP如用如用BPBP、EBPEBP、ESPESP参与寻址非堆栈段,必须明确写出段参与寻址非堆栈段,必须明确写出段超越前缀,如:超越前缀

34、,如:MOV AL , DSMOV AL , DS:BP BP ;访问堆栈段,用;访问堆栈段,用BPBP间址间址MOV AL , ESMOV AL , ES:BP+2BP+2如用如用BXBX、SISI、DIDI、EAXEAXEDXEDX、ESIESI、EDIEDI参与寻址参与寻址, CPU, CPU自动认为是访问数据段,自动认为是访问数据段,“ DSDS:”可省可省明确写出,不能省明确写出,不能省如:如:MOV ALMOV AL,DSDS:BXBX MOV AL MOV AL,BXBX 如用如用BXBX、SISI、DIDI、EAXEAX、EDXEDX、ESIESI、EDIEDI参与寻址非数参与

35、寻址非数据段,必须明确写出段超越前缀,如:据段,必须明确写出段超越前缀,如:MOV AL, ES:BXMOV AL, FS:SI+25 5使用段约定访问内存操作数是最常用的编程风格使用段约定访问内存操作数是最常用的编程风格明确写出,不能省明确写出,不能省假设假设 BP=1000H,BX=1000H,SI=2000H BP=1000H,BX=1000H,SI=2000H 偏移地址偏移地址=0016H=0016H说明下面几条指令的源操作数的寻址方式、偏移地址及结果说明下面几条指令的源操作数的寻址方式、偏移地址及结果(1 1)MOV BX,1000H (5) MOV AL,SI+0016HMOV B

36、X,1000H (5) MOV AL,SI+0016H (2) MOV AL,DS:2000H (6) MOV AL,BP+0016H (2) MOV AL,DS:2000H (6) MOV AL,BP+0016H (3) MOV AX,BX (7) MOV Al,BX+SI+0016H (3) MOV AX,BX (7) MOV Al,BX+SI+0016H (4) MOV DL,BX (4) MOV DL,BX12H34H56H78H1000H1016H2000H2016H3016H数据段数据段21H43H65H87H1016H2000H3016H堆栈段堆栈段1000H9AHA9H2016

37、H3.3标志寄存器标志寄存器AC VM RNT IOPL ODITSZAPC D31 D19 D18 D080486标志寄存器标志寄存器80486标志寄存器为标志寄存器为32位位,实际使用实际使用15位位 15位标志分为两类位标志分为两类:状态标志状态标志和和控制标志控制标志 H状态标志记录了当前指令执行后的状态信息状态标志记录了当前指令执行后的状态信息 H控制标志用来控制微处理器操作控制标志用来控制微处理器操作本节首先介绍本节首先介绍6种状态标志种状态标志状态标志寄存器状态标志寄存器 O D I T S Z A P C 进位标志进位标志C(Carry Flag)当结果的最高位产生一个进位或借

38、位,则当结果的最高位产生一个进位或借位,则C=1,否则,否则C=0。 溢出标志溢出标志O(Overflow Flag)在算术运算中,带符号数的运算结果超出了在算术运算中,带符号数的运算结果超出了8位或位或16位位 带符号数能表达的范围,则带符号数能表达的范围,则O=1,否则,否则O=0。 8位(字节)运算位(字节)运算 -128 +127 16位(字)位(字) 运算运算 -32768 +32767 符号标志符号标志S(Sign Flag) 结果的最高位(结果的最高位(D15或或D7)为)为1,则,则S=1,否则,否则 S=0。 零标志零标志Z(Zero Flag) 若运算的结果为若运算的结果为

39、0,则,则Z=1,否则,否则Z=0。 奇偶标志奇偶标志P(Parity Flag) 若结果中若结果中1的个数为偶数,则的个数为偶数,则P=1,否则,否则,P=0。 辅助进位标志辅助进位标志A(Auxitiary Flag) 在操作时,由低半字节在操作时,由低半字节(第第3位位)向高半字节,向高半字节, 有进位或借位,则有进位或借位,则A=1,否则,否则A=0。 方向方向 标志(标志(Direction Flag) D=1 ,串操作时地址自动减量,串操作时地址自动减量,D=0,串操作时地址自,串操作时地址自 动增量。动增量。 中断允许标志(中断允许标志(Interruptenable Flag)

40、 I=1,则允许,则允许CPU接收外部的中断请求,接收外部的中断请求, I=0,则屏蔽外部中断请求。,则屏蔽外部中断请求。 追踪标志(追踪标志(Trace Flag) T=1,使处理进入单步方式,以便于调试。,使处理进入单步方式,以便于调试。状状态态标标志志控控制制标标志志二二 .复习复习:有关溢出的几个概念有关溢出的几个概念 1. 什麽是溢出?什麽是溢出? 运算结果超出寄存器能表示的范围运算结果超出寄存器能表示的范围,称为溢出。称为溢出。 溢出和操作数的性质有关。溢出和操作数的性质有关。 8位无符号数运算位无符号数运算, 结果结果255 有溢出有溢出16位无符号数运算位无符号数运算, 结果结

41、果65535 有溢出有溢出32位无符号数运算位无符号数运算, 结果结果 232_1 有溢出有溢出8位有符号数运算位有符号数运算, -128结果结果127 有溢出有溢出16位有符号数运算位有符号数运算, -32768结果结果32767 有溢出有溢出32位有符号数运算位有符号数运算, -231结果结果 231_1 有溢出有溢出2. CPU如何判断溢出如何判断溢出 由于溢出和操作数的性质有关由于溢出和操作数的性质有关,而操作数的性质是由而操作数的性质是由 程序员定义的。程序员定义的。CPU只能默认一种选择只能默认一种选择,即即CPU一律一律 默认操作数是有符号补码数默认操作数是有符号补码数,并以此来

42、设置溢出标志。并以此来设置溢出标志。 3.3.程序员如何判断溢出程序员如何判断溢出H 有符号数运算有符号数运算, ,判判O O标志标志,O,O标志为标志为1,1,有溢出有溢出H 无符号数加无符号数加/ /减减, ,判判C C标志标志,C,C标志为标志为1,1,有溢出有溢出例例: :下列指令执行后下列指令执行后 AL=?AL=? A.C.O.P.S.Z A.C.O.P.S.Z 为何值为何值? ? MOV AL ,0C8H ADD AL ,0C8H AL=90H, AL=90H,如果如果C8HC8H为无符号数为无符号数( (值值=200),=200),则有溢出。则有溢出。 如果如果C8HC8H为有

43、符号数为有符号数( (值值=-56),=-56),则无溢出。则无溢出。 这这6 6个标志中个标志中,C.O.P.S.Z,C.O.P.S.Z可为程序的转移提供测试条件。可为程序的转移提供测试条件。000010011000 100 110 01 0 0 1 1 0C=1S=1P=1 O=0Z=01A=1 3.4 3.4 汇编语言语法规则汇编语言语法规则为了在介绍指令的过程中为了在介绍指令的过程中, ,穿插一些例题穿插一些例题, ,有必要先介绍一些汇编语言的有必要先介绍一些汇编语言的语法规则语法规则一一. .概述概述 1.1.可执行文件的生成可执行文件的生成 编辑编辑 编编 辑辑汇编源程序汇编源程序

44、. ASM文件文件 调编辑程序调编辑程序如如:EDIT.EXE QEDIT.EXE 编译编译.ASM文件文件 汇汇 编编.OBJ文件文件 调调 汇汇 编编 程程 序序如如:TASM.EXE 链接链接 链链 接接.OBJ文件文件 库文件库文件可执行文件可执行文件.EXE.EXE .COM .COM调调 链链 接接 程程 序序如如:TLINK.EXE2.2.源程序中的语句类型源程序中的语句类型 一个完整的源程序应包含一个完整的源程序应包含2 2类语句类语句: : 符号指令、汇编伪指令符号指令、汇编伪指令( (伪语句伪语句) )标号名、变量名、段名、过程名标号名、变量名、段名、过程名命名规则命名规则

45、: :以字母开头以字母开头, ,后跟字后跟字母、数字母、数字长度长度3131个字符个字符H符号指令符号指令: :经汇编后经汇编后, ,其目标指令通知其目标指令通知CPUCPU进行什么操作进行什么操作H伪伪 指指 令令: :是非机器指令,是在汇编期间进行操作的。是非机器指令,是在汇编期间进行操作的。 为汇编程序为汇编程序, ,链接程序提供汇编链接信息链接程序提供汇编链接信息 符号名符号名 伪指令伪指令伪指令伪指令 标号标号 : 符号指令符号指令符号指令符号指令此处无冒号此处无冒号二二. .常用的伪指令常用的伪指令1.1.字节字义伪指令字节字义伪指令 变量名变量名 DB DB 一串用逗号间隔的单字

46、节数一串用逗号间隔的单字节数 说明说明: :v DB DB Define Byte Define Byte 的缩写的缩写, ,“定义字节定义字节”。v ? ? 随机数随机数, Dup , Dup Duplicate(Duplicate(重复重复) )v 3 Dup(?) 3 Dup(?) 代表代表3 3个用逗号间隔的随机数个用逗号间隔的随机数v 5 Dup (A) 5 Dup (A) 代表代表5 5个用逗号间隔的个用逗号间隔的A A的的ASCASC码码如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLO N2 DB ?,?,?

47、 ;与下条等价与下条等价 N2 DB 3 DUP(?)汇编后汇编后12 H40 HFF H09 H55 H41 H42 HA6 H48 H45 H4C H4C H4F HX X X XX XN1:N2:功能功能: :H通知汇编程序把通知汇编程序把DBDB后跟的单字后跟的单字 节数节数, ,依次存入从变量依次存入从变量(如如N1)N1) 开始的单元开始的单元, ,负数用补码表示负数用补码表示, , 单引号中的字符翻译成单引号中的字符翻译成ASCASC码。码。 如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLON2 DB ?,?

48、,? ;与下条等价与下条等价N2 DB 3 DUP(?)如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLON2 DB ?,?,? ;与下条等价与下条等价N2 DB 3 DUP(?)功能功能: :H H用用DBDB定义的这些内存单元定义的这些内存单元(N1(N1 N1+12,N1+12, N2 N2 N2+2)N2+2)的属性均为的属性均为“字节型字节型”。汇编后汇编后12 H40 HFF H09 H55 H41 H42 HA6 H48 H45 H4C H4C H4F HX X X XX XN1:N2:N1+12:N2+2:2

49、.2.字定义伪指令字定义伪指令 变量名变量名 DWDW 一串用逗号间隔的双字节数一串用逗号间隔的双字节数如如: :WNUM DW 1234H,12, AB, C DW ?,? DW 2 DUP(?)说明说明: : H H DW DW Define Word Define Word “字定义字定义” H H ? ? 双字节随机数双字节随机数 H H 单引号中只能是一个或两个字符单引号中只能是一个或两个字符 功能功能: : H H通知汇编程序把通知汇编程序把DWDW后跟的双字节数后跟的双字节数, , 依次存入从变量名开始的单元依次存入从变量名开始的单元, ,每一个数每一个数 占占2 2个字节个字节

50、, ,低位字节低位字节低址单元低址单元, , 高位字节高位字节相邻的高址单元。相邻的高址单元。功能功能: :H H用用DWDW定义的这些单元的属性都是定义的这些单元的属性都是“字字型型”, , 如上例如上例, WNUM , WNUM WNUM+11WNUM+11这这1212个单元的个单元的 属性都是属性都是“字型字型”。 汇编后汇编后WNUM:34 H 12 H 0CH0 042 H41 H43 H0 0X X X X X XX XWNUM+11:功能功能: :H H通知汇编程序把通知汇编程序把DDDD后跟的数存入变量名开始的单元后跟的数存入变量名开始的单元, , 每一个数占每一个数占4 4个

51、字节个字节, ,低位字节低位字节低址单元低址单元, ,高位字高位字 节节高址单元。高址单元。 H H用用DDDD定义的这些单元的属性都是定义的这些单元的属性都是“双字型双字型”, ,上例上例 DNUM DNUM DNUM+3DNUM+3单元单元, ,这些单元都是双字型单元。这些单元都是双字型单元。3. 3. 双字定义伪指令双字定义伪指令 变量名变量名 DDDD 一串用逗号间隔的一串用逗号间隔的4 4字节数字节数 如如: : DNUM DD 12345678H 汇编后汇编后DNUM: 34H78H 56 H 12H5. 5. 等值伪指令等值伪指令 符号常数符号常数 EQUEQU 表达式表达式 如

52、如: : NUM EQU 33 功能功能: : 定义符号常数定义符号常数NUMNUM的值为的值为33 33 6. 6. 等号伪指令等号伪指令 符号常数符号常数= =表达式表达式 如如: : NUM = 33 功能功能: :定义符号常数定义符号常数NUMNUM的值为的值为33 33 4. 4. 多字节定义伪指令多字节定义伪指令 变量名变量名 DFDF 一串用逗号间隔的一串用逗号间隔的6 6字节数字节数 变量名变量名 DQDQ 一串用逗号间隔的一串用逗号间隔的8 8字节数字节数 变量名变量名 DTDT 一串用逗号间隔的一串用逗号间隔的1010字节数字节数功能功能: : 通知汇编程序为通知汇编程序为

53、DF/DQ/DTDF/DQ/DT后跟的每一个数,分配后跟的每一个数,分配 6/8/106/8/10个单元。个单元。 三三. . 常用运算符常用运算符 1. 1. 算术运算符算术运算符: +, -, : +, -, * *, / , / 2. 2. 关系运算符关系运算符: : EQ( EQ(等于等于), NE(), NE(不等于不等于), GT(), GT(大于大于),LT(),LT(小于小于),), GE( GE(大于或等于大于或等于) )例如例如: : NUM EQU 33 MOV AL, NUM;该指令与下条指令等价该指令与下条指令等价 MOV AL , 33区别区别: :H H用用EQU

54、EQU定义的符号常数定义的符号常数, ,其值在后继语句中不能更改其值在后继语句中不能更改H H用用“= =”定义的符号常数定义的符号常数, ,其值在后继语句中可以重新定义其值在后继语句中可以重新定义 应用应用: : H H$ $运算符紧跟在运算符紧跟在 DBDB、DWDW、DDDD伪指令之后伪指令之后, ,统计字符统计字符 串的长度。串的长度。 例如数据段有例如数据段有: : BUF DB THE QUICK BROWN FOX ;字符串长度字符串长度19 LLL EQU $-BUF 汇编后汇编后 符号常数符号常数LLLLLL的值即为的值即为19193. $3. $运算符运算符 H H汇编程序

55、对源程序是逐行汇编的汇编程序对源程序是逐行汇编的,$,$运算符可以返回运算符可以返回 汇编计数器的当前值。汇编计数器的当前值。如如: : MOV AX, SEG DATA MOV DS, AX设设“DATADATA”是数据段的段名是数据段的段名, ,上述两条指令算出数据段上述两条指令算出数据段的段基址的段基址, ,先赋给先赋给AX,AX,再转赋再转赋DSDS。 5.OFFSET5.OFFSET运算符运算符 H H格式:格式:OFFSET OFFSET 变量名或标号名变量名或标号名 H H功能:算出某个变量或标号名所在单元的偏移地址(有效功能:算出某个变量或标号名所在单元的偏移地址(有效地址)。

56、地址)。4. SEG4. SEG运算符运算符 H H格式格式: SEG : SEG 段名或变量名或标号名段名或变量名或标号名 H H功能功能: : 计算某一逻辑段的段基址计算某一逻辑段的段基址 设以设以“DATADATA”为段名的数据段中,存在为段名的数据段中,存在 BUF DB 12 ,34 ,56代码段:代码段: MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET BUF MOV AL,BX ;AL=12以下两条指令等价的:以下两条指令等价的: MOV BX,OFFSET BUF LEA BX,BUF6. PTRPTR运算符运算符 格式格式: : 类型说明符类型

57、说明符 PTR PTR 地址表达式地址表达式 功能功能: : 在在本条指令本条指令中中临时修改临时修改地址表达式的属性地址表达式的属性 内存单元内存单元5 5种寻址方式种寻址方式子程序的名称子程序的名称 BYTE BYTE(字节)(字节) WORDWORD(字)(字) DWORDDWORD(双字)(双字) FARFAR(远)(远) NEARNEAR(近)(近)PTRPTR运算符使用规则运算符使用规则 (1 1) 指令的操作数至少有一个类型属性要确定,否则必须用指令的操作数至少有一个类型属性要确定,否则必须用PTRPTR运算符说明其中的内存操作数的类型运算符说明其中的内存操作数的类型(2 2)若

58、两个操作数的类型属性都确定,则必须保持一致。否)若两个操作数的类型属性都确定,则必须保持一致。否则必须用则必须用PTRPTR运算符改变其中的内存操作数的类型,以保持前运算符改变其中的内存操作数的类型,以保持前后属性一致。后属性一致。类型属性确定的操作数类型属性确定的操作数: 寄存器寄存器 用变量名直接寻址的内存操作数用变量名直接寻址的内存操作数类型属性不确定的操作数:类型属性不确定的操作数: 立即数立即数 间址、基址、变址、基址间址、基址、变址、基址+ +变址寻址的内存操作数变址寻址的内存操作数应用:在下列指令中必须用应用:在下列指令中必须用PTRPTR临时修改或者显示说明临时修改或者显示说明

59、 内存单元的属性内存单元的属性 在双操作数指令中在双操作数指令中( (如如:MOV:MOV,ADDADD,SUB,CMPSUB,CMP) H HH H源操作数为立即数,目标为直接寻址的内存操作数,源操作数为立即数,目标为直接寻址的内存操作数, 但立即数超过内存操作数范围,后者必须用但立即数超过内存操作数范围,后者必须用PTRPTR临时修改临时修改 其属性其属性 。 H H一操作数为寄存器,另一为直接寻址的内存操作数,一操作数为寄存器,另一为直接寻址的内存操作数, 但两者属性不一致,后者必须用但两者属性不一致,后者必须用PTRPTR临时修改临时修改 其属性其属性 。 H H源为单字节源为单字节/

60、 /双字节立即数,目标为间址、变址、基双字节立即数,目标为间址、变址、基址或基址加变址寻址的内存操作数址或基址加变址寻址的内存操作数, ,后者必须用后者必须用PTRPTR显显示说明其属性,以便和源操作数属性一致。示说明其属性,以便和源操作数属性一致。 在单操作数指令中(如在单操作数指令中(如:INC:INC,DECDEC) 操作数为间址、变址、基址或基址加变址寻址的内操作数为间址、变址、基址或基址加变址寻址的内 存操作数,必须用存操作数,必须用PTRPTR说明是字节操作?字操作?还说明是字节操作?字操作?还 是双字操作?是双字操作?举例:设数据段有:举例:设数据段有: BUF DB 11,22

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论