微机课件第4章_第1页
微机课件第4章_第2页
微机课件第4章_第3页
微机课件第4章_第4页
微机课件第4章_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

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

文档简介

1、第第4 4章章 指令系统指令系统 4.1 4.1 概述概述 4.2 804864.2 80486寻址方式寻址方式 4.3 804864.3 80486标志寄存器标志寄存器 4.4 4.4 汇编语言语法规则之一汇编语言语法规则之一 4.5 804864.5 80486基本集指令基本集指令 4. 4. 概述概述 1.1. 指令指令:通知:通知 CPUCPU执行某种操作的执行某种操作的“命令命令”,CPUCPU全部全部指令的集合,称为指令系统指令的集合,称为指令系统2.2. 指令的书写格式指令的书写格式H 目标指令(机器指令)用一串目标指令(机器指令)用一串0 0,1 1代码书写代码书写 注意:硬件

2、只能识别,存储,运行目标指令注意:硬件只能识别,存储,运行目标指令H 符号指令:用规定的助记符符号指令:用规定的助记符, ,规定的书写格式书写规定的书写格式书写 的指令的指令大多数指令由操作码和地址码大多数指令由操作码和地址码2部分组成部分组成 操作码:操作码:通知通知CPU执行什么操作执行什么操作(唯一唯一) 地址码:地址码:指令的操作对象所存放的位置指令的操作对象所存放的位置(根据根据 操作对象的多样性其表现形式很多操作对象的多样性其表现形式很多) 教材上把地址码称为操作数教材上把地址码称为操作数3.3.指令的组成指令的组成 用相应的编码规则对指令进行编码用相应的编码规则对指令进行编码 操

3、作码的编码操作码的编码 地址码的编码地址码的编码 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, DXSUB CX, DX 2B CA 2B CA 返回调用程序返回调用程序 RETRET C3C3MOV: MOVEM

4、OV: MOVE传送传送 ADD:ADD:加加 SUB:SUB:减减 RET:RETURN RET:RETURN 返回返回4.4.目标程序的生成目标程序的生成 汇编汇编源程序源程序编辑、编译、链接编辑、编译、链接可执行的机器指令可执行的机器指令程序(目标程序程序(目标程序) )5.5.指令长度指令长度 486 486指令长度(机器指令长度)为指令长度(机器指令长度)为1 11616字节字节规定:多字节指令占用连续的内存单元,存放指令第规定:多字节指令占用连续的内存单元,存放指令第 一字节的内存地址,称为一字节的内存地址,称为“指令地址指令地址”。 CPUCPU只能识别,存储,运行目标指令,而用

5、机器指只能识别,存储,运行目标指令,而用机器指令编程非常困难。于是早期的专家们发明了符号指令,令编程非常困难。于是早期的专家们发明了符号指令,再经过软件把符号指令再经过软件把符号指令机器指令。图示如下:机器指令。图示如下:6.6.指令存放指令存放 如:如:12345H12345H单元中有一条指令单元中有一条指令 MOV AX,6789HMOV AX,6789H67H67H89H89HB8HB8H12345H:12345H:操作码操作码操作数操作数6789H6789HMOV AX,6789H 先写操作码,再写操作数。多字节操作数连续存放。先写操作码,再写操作数。多字节操作数连续存放。存放规律存放

6、规律: : 低位字节存放在低地址单元,高位字节存放低位字节存放在低地址单元,高位字节存放在相邻的高地址单元在相邻的高地址单元7. 符号指令的符号指令的 书写格式书写格式标号标号: : 操作码助记符操作码助记符 空格空格 操作数助记符操作数助记符;注释;注释 如如:NEXT: ADD AX , BX ;AX+BX NEXT: ADD AX , BX ;AX+BX AX AX INC SI INC SI ;SI+1 ;SI+1 SI SI 标号:标号:以字母开头以字母开头, ,后跟字母后跟字母, ,数字数字, ,下划线下划线, ,长度长度3131字符字符 标号又称符号地址标号又称符号地址, ,代表

7、该指令的逻辑地址。可有可代表该指令的逻辑地址。可有可 无,设置是为了程序的转向无,设置是为了程序的转向注解:注解:以以“ “ ;”开头,不执行,打印程序清单时照原样打印,开头,不执行,打印程序清单时照原样打印,“系统保留字系统保留字”不能做标号。不能做标号。4.2 4.2 486486寻址方式寻址方式 操作数是指令的操作对象,寻址方式与地址码有操作数是指令的操作对象,寻址方式与地址码有密切关系密切关系. . 形成操作数地址码的过程就是寻址。形成操作数地址码的过程就是寻址。“寻址方式寻址方式”:通俗的讲,就是通知:通俗的讲,就是通知CPUCPU本条指令的操本条指令的操作数在哪儿?或者说用什么方式

8、才能得到操作数。作数在哪儿?或者说用什么方式才能得到操作数。微机系统有微机系统有3 3类操作数:类操作数:H立即数:立即数:操作数包含在本条指令中操作数包含在本条指令中, ,是指令的一部分是指令的一部分。H寄存器寄存器操作数:操作数:CPUCPU内部的通用寄存器,段寄存器内容。内部的通用寄存器,段寄存器内容。H内存操作数:内存操作数:操作数在存储单元中。操作数在存储单元中。486486有有3 3类类7 7种寻址方式种寻址方式立即寻址方式:获得立即数立即寻址方式:获得立即数寄存器寻址方式:获得寄存器操作数寄存器寻址方式:获得寄存器操作数存储器寻址方式:获得存储器操作数(内存操作数)存储器寻址方式

9、:获得存储器操作数(内存操作数)H学习重点:学习重点:怎样在符号指令中,正确的描述各种寻怎样在符号指令中,正确的描述各种寻址方式址方式1.1.立即寻址立即寻址操作数包含在本条指令中操作数包含在本条指令中, ,是指令的一是指令的一部分部分, ,完整地取出该条指令,也就获得了操作数。完整地取出该条指令,也就获得了操作数。 如如:MOVEAX,12345678H MOVBL,10101010B ;AAH BL MOV CL, 4;FCH CL MOVDL,A;41H DL ADD AL,0C8H MOVSI,3*5;15 SI上例源操作数即为立即寻址,上例源操作数即为立即寻址, 立即数书写规定:立即

10、数书写规定:H立即数以数字开头,以开头的立即数以数字开头,以开头的1616进制数,必须前缀进制数,必须前缀0 0。程序员可以按自己的习惯书写立即数,各种合法的立即数经汇程序员可以按自己的习惯书写立即数,各种合法的立即数经汇编后,一律自动转换成等值的二进制数,负数用补码表示。编后,一律自动转换成等值的二进制数,负数用补码表示。H立即数的数制立即数的数制用后缀表示用后缀表示,B,B表示二进制数表示二进制数,H,H表示十六进制数表示十六进制数, , D D或缺省为十进制数,单引号括起来的字符编译成相应的或缺省为十进制数,单引号括起来的字符编译成相应的 ASCIIASCII码码 。H可以用可以用+ +

11、 * * / / 组成立即数表达式组成立即数表达式2. 寄存器寻址寄存器寻址操作数在操作数在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

12、 ADD AL,0C8H MOVSI,3*5;15 SI3.3.存储器操作数寻址方式存储器操作数寻址方式 重申:重申:H 在读写内存操作数之前,在读写内存操作数之前,CPUCPU必须知道相关存储单必须知道相关存储单 元的物理地址。元的物理地址。H 程序员的责任仅在于正确的书写逻辑地址表达式,程序员的责任仅在于正确的书写逻辑地址表达式, 然后由然后由CPUCPU自动运算以求出物理地址。自动运算以求出物理地址。 H 由于由于CPUCPU对存储器采用分段管理对存储器采用分段管理, , 因此指令格式中因此指令格式中 只能写出存放操作数的内存单元的只能写出存放操作数的内存单元的“逻辑地址逻辑地址”。H

13、存储单元逻辑地址表达式的一般形式存储单元逻辑地址表达式的一般形式 段寄存器:段寄存器:偏移地址偏移地址有有5 5种寻址方式种寻址方式段超越前缀助记符,访问约定的逻辑段可以省略段超越前缀助记符,访问约定的逻辑段可以省略H 实模式下,物理地址实模式下,物理地址= =段寄存器段寄存器2 24 4 + +偏移地址偏移地址(1) (1) 直接寻址直接寻址 地址表达式的格式地址表达式的格式1 1:段寄存器:段寄存器: 偏移地址偏移地址 地址表达式的格式地址表达式的格式2 2: 段寄存器:变量名段寄存器:变量名 用变量名代表存储单元的有效地址用变量名代表存储单元的有效地址 如:如:MOVMOVAL, ES:

14、2CHAL, ES:2CH 从从ESES附加段偏移地址为附加段偏移地址为2CH2CH的单元取数的单元取数ALAL如:如:MOV AX, DS:1234HMOV AX, DS:1234H 从数据段偏移地址为从数据段偏移地址为1234H1234H的单元取一字的单元取一字AXAX这种格式很少使用,这种格式很少使用, 通常情况下,程序员不知道通常情况下,程序员不知道某单元的偏移地址某单元的偏移地址 设数据段设数据段XXXX字节单元的内容为字节单元的内容为11H11H ES ES附加段附加段YYYY字单元的内容为字单元的内容为2233H2233H MOV AL, DS:XX ; MOV AL, DS:X

15、X ;取数据段取数据段XXXX字节单元的内容字节单元的内容ALAL 或或 MOV AL, XX ; MOV AL, XX ; AL=11HAL=11H MOV MOV AX, ES:YY ; AX, ES:YY ;取取ESES附加段附加段YYYY字单元的内容字单元的内容AXAX 或或 MOV MOV AX, YY ; AX, YY ; AX=2233HAX=2233H说明:说明:H汇编语言允许为某单元起一个汇编语言允许为某单元起一个“名字名字”, ,这个名字就称为该单这个名字就称为该单元的元的“变量名变量名”,经汇编之后,变量名有段基址和偏移量两种,经汇编之后,变量名有段基址和偏移量两种属性。

16、属性。H变量名是唯一的,程序中不能有重复的变量名,变量名是唯一的,程序中不能有重复的变量名, “段寄存器:段寄存器:”可以省略。可以省略。 (2)(2)寄存器间接寻址寄存器间接寻址 寄存器间接寻址又称间接寻址,间址寄存器间接寻址又称间接寻址,间址 什么是间接寻址?什么是间接寻址? 操作数在内存单元,该单元的段基址在操作数在内存单元,该单元的段基址在段寄存器段寄存器中中, , 有效地址在有效地址在间址寄存器间址寄存器中,中,CPUCPU首先进行地址计算首先进行地址计算 间接寻址的地址表达式间接寻址的地址表达式 段寄存器:段寄存器: 间址寄存器间址寄存器 某单元的物理地址某单元的物理地址= =段寄

17、存器内容段寄存器内容16+16+间址寄存器间址寄存器 访问访问约定的逻辑段约定的逻辑段 ,间接寻址的地址表达式简,间接寻址的地址表达式简 化为:化为: 间址寄存器间址寄存器 某单元的物理地址某单元的物理地址= =约定的段寄存器内容约定的段寄存器内容16+16+间址寄存器间址寄存器 间址寄存器间址寄存器 和约定访问的逻辑段和约定访问的逻辑段486486规定:规定:间址寄存器间址寄存器约定访问的逻辑段约定访问的逻辑段BPBP堆栈段堆栈段 1616位寻址方式位寻址方式BX,SI,DIBX,SI,DI数据段数据段EBP,ESPEBP,ESP堆栈段堆栈段 3232位寻址方式位寻址方式EAXEAXEDX,

18、ESI,EDIEDX,ESI,EDI数据段数据段举例:举例:设数据段设数据段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

19、2:用:用BPBP间址间址 MOV DS , MOV DS , 数据段段基址数据段段基址 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=5

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

21、移量 基址寄存器和约定访问的逻辑段基址寄存器和约定访问的逻辑段基址寄存器基址寄存器约定访问的逻辑段约定访问的逻辑段BPBP堆栈段堆栈段 1616位寻址方式位寻址方式BXBX数据段数据段EBP,ESPEBP,ESP堆栈段堆栈段 3232位寻址方式位寻址方式EAXEAXEDX,ESI,EDIEDX,ESI,EDI数据段数据段 举例举例设数据段设数据段BUFBUF单元依次有:单元依次有:78H,56H,34H,12H78H,56H,34H,12H则:则:MOVMOV DS , , 数据段段基址数据段段基址MOV BX , BUFMOV BX , BUF单元有效地址单元有效地址MOV DH , BX+

22、1 ;DH=56HMOV DH , BX+1 ;DH=56HMOV DX , BX+2 ;DX=1234HMOV DX , BX+2 ;DX=1234H12H34H56H78HBUF(4) (4) 变址寻址变址寻址 有比例因子的变址寻址其地址表达式为有比例因子的变址寻址其地址表达式为 段寄存器:段寄存器: 比例因子比例因子* *变址寄存器变址寄存器+ +位移量位移量 物理地址物理地址= =段寄存器段寄存器16+16+比例因子比例因子变变址寄存器址寄存器+ +位移量位移量 没没有比例因子的变址寻址其地址表达式为:有比例因子的变址寻址其地址表达式为: 段寄存器:段寄存器: 变址寄存器变址寄存器+

23、+位移量位移量 访问约定的逻辑段可简化为访问约定的逻辑段可简化为 : 变址寄存器变址寄存器+ +位移量位移量 物理地址物理地址= =约定的段寄存器约定的段寄存器16+16+变变址寄存器址寄存器+ +位移量位移量 变址寄存器与约定访问的逻辑段变址寄存器与约定访问的逻辑段变址寄存器变址寄存器约定访问的逻辑段约定访问的逻辑段适用于适用于SI,DISI,DI数据段数据段无比例因子无比例因子,16,16位位寻址寻址EBPEBP堆栈段堆栈段有比例因子有比例因子,32,32位位寻址寻址EAXEAXEDX,ESI,EDIEDX,ESI,EDI数据段数据段说明:说明:比例因子只能是比例因子只能是1 1、2 2、

24、4 4、8 8 因此因此: MOV AL , 8MOV AL , 8* *SI+15 ;SI+15 ;非法,非法,1616位寻址不能使用比例因位寻址不能使用比例因子子 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部分组成部分组成 有比例因子的基址加变址的地址表达式为:有

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

26、基址加变址寻址是基址寻址和变址寻址的组合,要求要求基址寄存器和变址寄存器都是基址寄存器和变址寄存器都是1616位或都是位或都是3232位,否位,否 则(则(1616位寻址和位寻址和3232位寻址混合使用)是非法指令位寻址混合使用)是非法指令默认的段寄存器不一致,这样的组合虽然是合法,默认的段寄存器不一致,这样的组合虽然是合法, 但容易出错但容易出错如:如:BP+SIBP+SI,BP+DIBP+DIBPBP约定的逻辑段为堆栈段,而约定的逻辑段为堆栈段,而SISI、DIDI约定的逻辑段约定的逻辑段为数据段,它们组合之后约定访问的逻辑段是谁?为数据段,它们组合之后约定访问的逻辑段是谁?实验证明是堆栈

27、段实验证明是堆栈段,这样的组合最好要加段前缀。这样的组合最好要加段前缀。 寻址方式的学习要点寻址方式的学习要点:1.1.指令中的操作数有指令中的操作数有3 3种种: :立即数立即数, ,寄存器数寄存器数, ,内存操作数内存操作数 访问立即数叫立即寻址方式访问立即数叫立即寻址方式; ;访问寄存器数叫寄存器寻访问寄存器数叫寄存器寻 址方式址方式; ; 访问内存操作数由访问内存操作数由5 5种寻址方式种寻址方式: : 直接寻址、间址、基址、变址、基址加变址直接寻址、间址、基址、变址、基址加变址 不同的寻址方式是为了程序员在写指令时通过不同的手不同的寻址方式是为了程序员在写指令时通过不同的手 段提供操

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

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

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

31、XEDX、ESIESI、EDIEDI参与参与寻址非数据段,必须明确写出段超越前缀,如:寻址非数据段,必须明确写出段超越前缀,如:MOV AL, ES:BXMOV AL, FS:SI+25 5使用段约定访问内存操作数是最常用的编程风使用段约定访问内存操作数是最常用的编程风格格明确写出,不能省明确写出,不能省 4.3 标志寄存器标志寄存器AC VM RNT IOPL ODITSZAPC D31 D19 D18 D080486标志寄存器标志寄存器80486标志寄存器为标志寄存器为32位位,实际使用实际使用15位位 15位标志分为两类位标志分为两类:状态标志状态标志和和控制标志控制标志 H状态标志记录

32、了当前指令执行后的状态信息状态标志记录了当前指令执行后的状态信息 H控制标志用来控制微处理器操作控制标志用来控制微处理器操作本节首先介绍本节首先介绍6种状态标志种状态标志一状态标志一状态标志1. C标志标志进位进位/借位标志借位标志H 字节加字节加/减减,最高位最高位(D7)产生进位产生进位/借位时借位时: C标志置标志置1,否则置否则置0H 字加字加/ /减减, ,最高位最高位(D15)产生进位产生进位/ /借位时借位时: : C标志置标志置1, ,否则置否则置0 H 双字加双字加/ /减减, ,最高位最高位(D31)产生进位产生进位/ /借位时借位时: : C标志置标志置1, ,否则置否则

33、置02. A2. A标志标志辅助进位辅助进位/ /辅助借位标志辅助借位标志H 字节加字节加/ /减减, ,D3位产生进位位产生进位/ /借位时借位时: : A A标志置标志置1, ,否则置否则置0 H 字加字加/ /减减, ,D7位产生进位位产生进位/ /借位时借位时: : A A标志置标志置1,1,否则置否则置0 0 H 双字加双字加/ /减减,D15,D15位产生进位位产生进位/ /借位时借位时: : A A标志置标志置1,1,否则置否则置0 03. S S标志标志符号标志符号标志H字节运算后字节运算后, ,结果的最高位结果的最高位D7位为位为1,1, S S标志置标志置1,1,否则置否则

34、置0 0H字运算后字运算后, ,结果的最高位结果的最高位D15D15位为位为1,1, S S标志置标志置1,1,否则置否则置0 0H双字运算后双字运算后, ,结果的最高位结果的最高位D31D31位为位为1,1, S S标志置标志置1,1,否则置否则置0 04. Z标志标志结果标志结果标志 运算结果为全运算结果为全0时时,Z标志置标志置1,1,否则置否则置0 0 5.P.P标志标志奇偶标志奇偶标志( (实际上是偶标志实际上是偶标志) ) 运算结果中运算结果中,“1”,“1”的个数为偶数个的个数为偶数个( (没没 有有“1”1”也是偶数也是偶数),P),P标志置标志置1,1,否则置否则置0 06.

35、 O O标志标志溢出标志溢出标志 运算结果产生溢出运算结果产生溢出, ,则则O O标志置标志置1,1,否则置否则置0 0二二 .复习复习:有关溢出的几个概念有关溢出的几个概念 1. 什麽是溢出?什麽是溢出? 运算结果超出寄存器能表示的范围运算结果超出寄存器能表示的范围,称为溢出。称为溢出。 溢出和操作数的性质有关。溢出和操作数的性质有关。 8位无符号数运算位无符号数运算, 结果结果255 有溢出有溢出16位无符号数运算位无符号数运算, 结果结果65535 有溢出有溢出32位无符号数运算位无符号数运算, 结果结果 232_1 有溢出有溢出8位有符号数运算位有符号数运算, -128结果结果127

36、有溢出有溢出16位有符号数运算位有符号数运算, -32768结果结果32767 有溢出有溢出32位有符号数运算位有符号数运算, -231结果结果 231_1 有溢出有溢出2. CPU如何判断溢出如何判断溢出 由于溢出和操作数的性质有关由于溢出和操作数的性质有关,而操作数的性质是由而操作数的性质是由 程序员定义的。程序员定义的。CPU只能默认一种选择只能默认一种选择,即即CPU一律一律 默认操作数是有符号补码数默认操作数是有符号补码数,并以此来设置溢出标志。并以此来设置溢出标志。 3.3.程序员如何判断溢出程序员如何判断溢出H 有符号数运算有符号数运算, ,判判O O标志标志,O,O标志为标志为

37、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为有符号数为有符号数( (值值=-56),=-56),则无溢出。则无溢出。 这这6 6个标志中个标志中,C.O.P.S.Z,C.O.P.S.Z可为程序的转移

38、提供测可为程序的转移提供测 试条件。试条件。000010011000 100 110 01 0 0 1 1 0C=1S=1P=1 O=0Z=01A=1 4.4 4.4 汇编语言语法规则汇编语言语法规则为了在介绍指令的过程中为了在介绍指令的过程中, ,穿插一些例题穿插一些例题, ,有必要先有必要先介绍一些汇编语言的语法规则,本节内容参看教材介绍一些汇编语言的语法规则,本节内容参看教材5.1,5.2,5.35.1,5.2,5.3和和16.116.1节。节。一一. .概述概述 1.1.可执行文件的生成可执行文件的生成 编辑编辑 编编 辑辑汇编源程序汇编源程序. ASM文件文件调编辑程序调编辑程序如如

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

40、段名、过程名命名规则命名规则: :以字母以字母开头开头, ,后跟字母、数字后跟字母、数字长度长度3131个字符个字符H符号指令符号指令: :经汇编后经汇编后, ,其目标指令通知其目标指令通知CPUCPU进行什进行什 么操作么操作H伪指令伪指令: :为汇编程序为汇编程序, ,链接程序提供汇编链接信息链接程序提供汇编链接信息此处无冒号此处无冒号二二. .常用的伪指令常用的伪指令1.1.字节字义伪指令字节字义伪指令 变量名变量名 DB DB 一串用逗号间隔的单字节数一串用逗号间隔的单字节数 说明说明: :v DB DB Define Byte Define Byte 的缩写的缩写,“,“定义字节定义

41、字节”。v ? ? 随机数随机数, Dup , Dup Duplicate(Duplicate(重复重复) )v 3 Dup(?) 3 Dup(?) 代表代表3 3个用逗号间隔的随机数个用逗号间隔的随机数v 5 Dup (5 Dup (A) A) 代表代表5 5个用逗号间隔的个用逗号间隔的A A的的ASCASC码码如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLO N2 DB ?,?,? ;与下条等价与下条等价 N2 DB 3 DUP(?)汇编后汇编后12 H40 HFF H09 H55 H41 H42 HA6 H48 H4

42、5 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 ?,?,? ;与下条等与下条等价价N2 DB 3 DUP(?)如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A

43、, 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.2.字定义伪指令字定义伪指令 变量名变量名 DWDW 一串用逗号间隔的双字节数一串用逗号间隔的双字节数如如: :WNUM DW 1234H

44、,12, AB, C DW ?,? DW 2 DUP(?)说明说明: : H H DW DW Define Word “ Define Word “字定义字定义” H H ? ? 双字节随机数双字节随机数 H H 单引号中只能是一个或两个字符单引号中只能是一个或两个字符 功能功能: : H H通知汇编程序把通知汇编程序把DWDW后跟的双字节数后跟的双字节数, , 依次存入从变量名开始的单元依次存入从变量名开始的单元, ,每一个数每一个数 占占2 2个字节个字节, ,低位字节低位字节低址单元低址单元, , 高位字节高位字节相邻的高址单元。相邻的高址单元。功能功能: :H H用用DWDW定义的这些

45、单元的属性都是定义的这些单元的属性都是“字型字型”, , 如上例如上例, 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个字节个字节, ,低位字节低位字节低址单元低址单元, ,高位字高位字 节节高址单元。高址单元。 H H用用DDDD定义的这些单元的属性都是

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

47、指令 符号常数符号常数= =表达式表达式 如如: : NUM = 33 功能功能: :定义符号常数定义符号常数NUMNUM的值为的值为33 33 4. 4. 多字节定义伪指令多字节定义伪指令 变量名变量名 DFDF 一串用逗号间隔的一串用逗号间隔的6 6字节数字节数 变量名变量名 DQDQ 一串用逗号间隔的一串用逗号间隔的8 8字节数字节数 变量名变量名 DTDT 一串用逗号间隔的一串用逗号间隔的1010字节数字节数功能功能: : 通知汇编程序为通知汇编程序为DF/DQ/DTDF/DQ/DT后跟的每一个数,分配后跟的每一个数,分配 6/8/106/8/10个单元。个单元。 三三. . 常用运算

48、符常用运算符 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用用EQUEQU定义的符号常数定义的符号常数, ,其值在后继语句中不能更改其值在后继语句中不能更改H H用用“=”=”定义的符号常数定义的符号常数,

49、 ,其值在后继语句中可以重新定其值在后继语句中可以重新定义义 应用应用: : H H$ $运算符紧跟在运算符紧跟在 DBDB、DWDW、DDDD伪指令之后伪指令之后, ,统计字符统计字符 串的长度。串的长度。 例如数据段有例如数据段有: : BUF DB THE QUICK BROWN FOX ;字符串长度字符串长度19 LLL EQU $-BUF 汇编后汇编后 符号常数符号常数LLLLLL的值即为的值即为19193. $3. $运算符运算符 H H汇编程序对源程序是逐行汇编的汇编程序对源程序是逐行汇编的,$,$运算符可以返回运算符可以返回 汇编计数器的当前值。汇编计数器的当前值。如如: :

50、MOV AX, SEG DATA MOV DS, AX设设“DATA”DATA”是数据段的段名是数据段的段名, ,上述两条指令算出数据段上述两条指令算出数据段的段基址的段基址, ,先赋给先赋给AX,AX,再转赋再转赋DSDS。 5.OFFSET5.OFFSET运算符运算符 H H格式:格式:OFFSET OFFSET 变量名或标号名变量名或标号名 H H功能:算出某个变量或标号名所在单元的偏移地功能:算出某个变量或标号名所在单元的偏移地址(有效地址)。址(有效地址)。4. SEG4. SEG运算符运算符 H H格式格式: SEG : SEG 段名或变量名或标号名段名或变量名或标号名 H H功能

51、功能: : 计算某一逻辑段的段基址计算某一逻辑段的段基址 设以设以“DATA”DATA”为段名的数据段中,存在为段名的数据段中,存在 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运算符运算符 格式格式: : 类型说明符类型说明符 PTR PTR 地址表达式地址表达式 功能功能: : 在在本条指令本条指令中中临时修改临时修改地址表达式的属性地址表达式的属性

52、 内存单元内存单元5 5种寻址方式种寻址方式子程序的名称子程序的名称 BYTE BYTE(字节)(字节) WORDWORD(字)(字) DWORDDWORD(双字)(双字) FARFAR(远)(远) NEARNEAR(近)(近)举例:设数据段有举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0 代码段:代码段: MOV AX,BUF MOV AL,BUF MOV AX,WORD PTR BUF ; AH=22,AL=11 MOV BUF,12H MO

53、V BUF,1234H MOV WORD PTR BUF,1234H ;BUF单元为单元为34H,BUF+1单元为单元为12H 汇编后汇编后BUF:11 223344XXXXXXXXFFH 0 FFHFFHXX:WBUF:YY:举例:设数据段有举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0 MOV BX,OFFSET XX MOV SI,OFFSET YY MOV DI,OFFSET ZZ MOV BX,12H MOV BYTE PTR BX,1

54、2H ;XX单元为单元为12H MOV WORD PTR BX,12H ;XX单元为单元为12H, XX+1单元为单元为0 汇编后汇编后BUF:11 223344XXXXXXXXFFH 0 FFHFFHXX:WBUF:YY:举例:设数据段有:举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0 MOV SI,1234H MOV WORD PTR SI,1234H MOV AX,BX MOV AL,SI INC BX INC SI INC DI INC

55、BYTE PTR BX ;XX单元单元=0 INC WORD PTR SI ;YY,YY+1单元单元=0 INC DWORD PTR DI ;ZZ ZZ+2单元单元=0,ZZ+3=1 汇编后汇编后BUF:11 223344XXXXXXXXFFH 0 FFHFFHXX:WBUF:YY:7.7.方括号方括号用方括号括起来的地址表达式是访问内存操作用方括号括起来的地址表达式是访问内存操作数常用的寻址方式,方括号的另一用途是标注数常用的寻址方式,方括号的另一用途是标注数组元素的下标,下标从数组元素的下标,下标从0 0开始。开始。 数组下标数组下标变量名就变量名就是数组名是数组名代码段:代码段: MOV

56、 AL,BUF3;AL=44 BUF DB 11,22,33,44 WBUF DW ?,?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0 如上例数据段如上例数据段:4.5 804864.5 80486基本集指令基本集指令分分6 6类,为讲授方便,用类,为讲授方便,用N 代表立即数,代表立即数,N8、N16、N32代表代表8、16、32位立即数位立即数R 代表寄存器操作数,代表寄存器操作数,R8、R16、R32代表代表8、16、32位寄存器操作数位寄存器操作数M 代表内存操作数,代表内存操作数,M8、M16、M32代表代表8、

57、16、32位内存操作数位内存操作数S 代表段寄存器代表段寄存器总说明:总说明:源、目操作数不可同为内存操作数源、目操作数不可同为内存操作数源、目操作数属性一致(长度相同)源、目操作数属性一致(长度相同)当目标操作数为间址、变址、基址、基当目标操作数为间址、变址、基址、基+变变址的内存操作数,而源操作数为单字节址的内存操作数,而源操作数为单字节/双双字节立即数,则目标操作数必须用字节立即数,则目标操作数必须用PTR说说明类型明类型若操作数为间、变、基、基若操作数为间、变、基、基+变的内存操作变的内存操作数,则必须用数,则必须用PTR说明类型说明类型2. 对于单操作数指令(如:对于单操作数指令(如

58、:I NC,DEC)1. 对于双操作数指令(如:对于双操作数指令(如:MOV,ADD,CMP)第一类、第一类、 传送类传送类本类指令执行后,不影响状态标本类指令执行后,不影响状态标志志1. 通用传送通用传送(1) 数据传送数据传送MOV 目目 , 源源 R / M , N R / M / S , R ; 目标不允许是目标不允许是CS R / M , S R / S , M ; 目标不允许是目标不允许是CS功能:功能:源源目,源不变,不影响目,源不变,不影响6种标志种标志H HCSCS不能做目标,不能向段寄存器写入立即数不能做目标,不能向段寄存器写入立即数H H禁止禁止2 2个内存单元直接传送个

59、内存单元直接传送H H源、目属性要一致源、目属性要一致说明:说明: 为了深入理解数值定义伪指令、学习为了深入理解数值定义伪指令、学习PTRPTR运算符的使运算符的使 用用, ,请仔细阅读以下例题。请仔细阅读以下例题。 【例】【例】阅读以下程序阅读以下程序, ,写出指令执行后的目标操作写出指令执行后的目标操作 数。数。 代码段代码段: MOV DS,SEG 数据段段基址数据段段基址 ;对对DS初始化初始化 MOV BL,BNUM ;BL=? 所以,所以,BL=12H数据段经过汇编之后,数据段经过汇编之后,设数据段设数据段:BNUM DB 12H,34H,56H,78H,90HWNUM DW 11

60、22H,3344H,5566HDNUM DD 13572468H,87654321HFNUM DF 112233445566H BNUM:12H34H56H78H90H 代码段代码段: MOV DS,SEG 数据段段基址数据段段基址 MOV BX,WNUM+2 ;BX=?数据段经过汇编之后,数据段经过汇编之后,WNUM:22H11H44H33H66H55H所以,所以,BX=3344H设数据段设数据段:BNUM DB 12H,34H,56H,78H,90HWNUM DW 1122H,3344H,5566HDNUM DD 13572468H,87654321HFNUM DF 11223344556

温馨提示

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

评论

0/150

提交评论