【教学课件】第4章16位和32位微处理器的指令系统及汇编语言编程.ppt
《【教学课件】第4章16位和32位微处理器的指令系统及汇编语言编程.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章16位和32位微处理器的指令系统及汇编语言编程.ppt(200页珍藏版)》请在三一办公上搜索。
1、第4章 16位和32位微处理器的指令系统及汇编语言编程,教学目的和要求 掌握16位微处理器的寻址方式、指令系统及汇编语言编程,了解32位微处理器的指令系统,并结合附录A能够掌握汇编语言编程的上机操作,教学重点 16位微处理器的寻址方式、指令系统及汇编语言编程(完整段模式)32位汇编语言编程(简化段模式),教学难点 微处理器的寻址方式与指令系统 汇编语言编程的基本概念和编程方法,4.0 入 门,指令通常应提供的信息,1.做什么操作 2.操作数从哪里来 3.操作结果放在哪里 4.对于调用和转移指令,还要涉及转移或调用地址的提供方式,指令系统的特点,8086/8088的指令系统完全相同,都能在x86
2、系列CPU上运行指令的特点体现在:格式上、功能上和寻址方式可变长指令,如CISC指令18字节寻址方式多样灵活,处理数据能力强有重复指令和运算指令,扩充了条件指令、移位/循环指令为加强软件中断功能和支持多处理器相同的工作,增设了有关的指令,如test,wait等,指令的组成,操作码(OP)字段 标明计算机要执行什么操作操作数(operand)字段 指出指令在执行过程中所需要的 操作数(值为多少 或者放在什么地方),以及操作结果送到哪里,指令的一般格式,每条指令为字节的整数倍长(指令规整)操作数字段可以有零个、一个、二个或三个操作数,通常称为“一地址”,“二地址”或“三地址”指令。,示例1,无操作
3、数指令(控制类指令),如:HLTLOCKCLCCLDCLIIRET,示例2,单操作数指令,如:加1指令 INC AX 只需要指出加1的操作数,它是“一地址”指令。双操作数指令,如:ADD AX,BX 大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用“三地址”指令:除给出参加运算的两个操作数外,还要指出运算结果的存放地址,操作指令,现代微型计算机中多采用二地址指令,两个操作数分别称为“源操作数”和“目的操作数”,指令执行后,把运算结果放到目的操作数的地址之中。指令的操作码在机器中的表示比较简单,只要对每一种操作指定相应的二进制代码即可;而指令的操作数字段的情形就比较复杂。,编
4、址方式,计算机中的编址设备:Register、系统主存和I/O设备编址方式:三个零地址空间:即对上述三种设备分别进行编址,并分别采用不同的寻址方式,很复杂,如:PC/XT两个零地址空间:对通用寄存器R进行独立编址,主存和I/O统一编址,地址码的地址高端用于I/O地址,64K。优点:简化了指令系统缺点:指令执行过程复杂,编址方式,一个零地址空间:三种设备统一编址,寄存器、主存和I/O对应低地址到高地址无零地址空间:指堆栈计算机CACHE和BUFFER是否需要编址?,寻址方式,寻址方式的定义:指令中如何提供操作数或操作数地址的方式。规定如何对地址字段作出解释以找到操作数。*程序转移时需提供转移地址
5、,这跟提供操作数地址在方法上没有本质区别,因此也归入寻址方式的范畴。,指令系统设计,包括操作码字段和操作数字段一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。需要说明的是,在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的变型或组合:,寻址方式,固定寻址立即寻址(立即数寻址)寄存器寻址直接寻址间接寻址变址寻址,4.1 8086微处理器的寻址方式与指令系统,4.1.1 寻址方式 一条指令包含操作码和操作数两部分,操作码指出该指令要进行的操作,操作数指出该指令需要的操作数或操作数的地址。指令根据一定的方式,找到操作数或操作数的
6、地址,然后取出操作数进行处理。寻找操作数地址的方式称为寻址方式,表4-1 8086/8088的6种寻址方式,一、寄存器寻址,汇编格式:R(R是寄存器名)说明:寻找的操作数在寄存器R中 例【4-1】INC AX,二、寄存器间接寻址,汇编格式:R(R是寄存器名)说明:寄存器R的内容是操作数在内存的EA,先从寄存器R中取出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数,所以称为间接寻址。能用来作间接寻址的寄存器只能是BX、SI、DI或BP四者之一 例【4-2】MOV AX,SI,二、寄存器间接寻址(续),三、变址寻址,汇编格式:XR(R是寄存器名,X表示位移量,其值是用8位或16位二进
7、制补码表示的有符号数)。说明:寄存器R内容和位移量X之和是操作数在内存的EA。先将寄存器R中的值和位移量X相加求出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数。能用来作变址寻址的寄存器只能是BX、SI、DI 或BP四者之一。例【4-3】MOV BX,2BX,三、变址寻址(续),四、基址变址寻址,汇编格式:XBR+IR或XBRIR(BR为基址寄存器,IR为变址寄存器,X表示位移量,其值是用8位或16位二进制补码表示的有符号数)说明:基址寄存器BR、变址寄存器IR的内容和位移量X三者之和是操作数在内存的EA。先将寄存器BR、IR中的值和位移量X相加求出操作数在内存的EA,再根据EA
8、和某段寄存器生成PA寻找操作数。基址寄存器只能用BX或BP,变址寄存器只能用SI或DI,四、基址变址寻址(续),五、立即寻址,汇编格式:n(n是一个常数,称为立即数)说明:指令操作码后面单元的内容为操作数(常数n),操作数在内存代码段。立即寻址所提供的操作数直接放在指令中,它是紧跟在指令操作码后面的一个可用8位或16位二进制补码表示的有符号数。立即寻址主要用来给寄存器或内存单元赋初值 例【4-6】MOV AX,2是将立即数2送到AX中,六、直接寻址,汇编格式:含有变量的地址表达式或段寄存器:EA 说明:在一条指令中直接给出某一内存单元的EA,这个EA经过汇编后放在这条指令的下一个字单元。例【4
9、-7】MOV AX,2000是将数据段中EA为2000的内存单元中的内容送到AX中。,4.1.3 8086指令系统,一、数据传送指令,4.1.3 8086指令系统,一、数据传送指令(续1),4.1.3 8086指令系统,一、数据传送指令(续2),4.1.3 8086指令系统,一、数据传送指令(续3),4.1.3 8086指令系统,二、算术运算指令,4.1.3 8086指令系统,二、算术运算指令(续1),4.1.3 8086指令系统,二、算术运算指令(续2),4.1.3 8086指令系统,三、位操作指令,4.1.3 8086指令系统,三、位操作指令(续1),4.1.3 8086指令系统,三、位操
10、作指令(续2),4.1.3 8086指令系统,四、转移指令,转移指令分条件转移指令和无条件转移指令两大类,其特点是改变程序的执行顺序(即改变指令指针IP的值),但不改变状态标志位的状态。条件转移指令根据条件标志的状态判断是否转移。无条件转移指令则不作任何判断,无条件地转移到指令中指明的目的地址处执行。转移指令共有19条,具体见表4-9,4.1.3 8086指令系统,四、转移指令,4.1.3 8086指令系统,四、转移指令(续1),4.1.3 8086指令系统,四、转移指令(续2),4.1.3 8086指令系统,四、转移指令(续3),4.1.3 8086指令系统,四、转移指令(续4),4.1.3
11、 8086指令系统,五、字符串操作指令,为了方便地实现字符串操作,8086/8088提供了字符串操作指令。只要按规定设置好初始条件,选用正确的字符串操作指令,就可完成规定的操作,这些指令的前面可加重复前缀,能在条件满足的情况下反复执行,而不用考虑指针如何移动、循环次数如何控制等问题,从而简化了程序设计。字符串操作指令在使用格式和使用方法上有许多类似的地方,它们隐含使用的寄存器、标志位和符号见表4-10,4.1.3 8086指令系统,五、字符串操作指令(续1),4.1.3 8086指令系统,五、字符串操作指令(续2),4.1.3 8086指令系统,五、字符串操作指令(续3),系统规定:源串一定要
12、在当前数据段中,目的串只允许在当前附加数据段中。所有的串操作指令均以寄存器间接方式访问源串或目的串中的各元素,并自动修改SI和DI的内容。若DF=0,则每次操作后,SI、DI自动增量(字节操作加1、字操作加2);若DF=1,则每次操作后,SI、DI自动减量(字节操作减1、字操作减2),使之指向下一个元素,4.1.3 8086指令系统,五、字符串操作指令(续4),当指令带有重复前缀时,则指令重复执行,每执行一次,就检查一次重复条件是否成立,如成立,则继续重复;否则终止重复,执行后续指令 REP:重复,即无条件重复CX寄存器中指定的次数 REPE/REPZ:相等/为0时重复,即(CX)0(重复次数
13、还未为0)同时ZF=1(比较时相等)时重复,否则,重复终止。REPNE/REPNZ:不相等/不为0时重复,即(CX)0(重复次数还未为0)同时ZF=0时重复,否则,重复终止,4.1.3 8086指令系统,五、字符串操作指令(续5),4.1.3 8086指令系统,五、字符串操作指令(续6),4.1.3 8086指令系统,五、字符串操作指令(续7),4.1.3 8086指令系统,五、字符串操作指令(续8),4.1.3 8086指令系统,五、字符串操作指令(续9),4.1.3 8086指令系统,五、字符串操作指令(续10),4.1.3 8086指令系统,六、处理机控制指令,4.1.3 8086指令系
14、统,六、处理机控制指令(续1),4.1.3 8086指令系统,六、处理机控制指令(续2),4.2 16位汇编语言编程,4.2.1 伪指令,在汇编源程序中使用一些固定格式的约定符号,这些符号主要用来告诉汇编程序如何工作,这就是汇编控制命令,也称伪指令。伪指令和机器指令(在4.1.3中所讲的指令)最大的区别有2点 伪指令是在汇编源程序汇编期间,被汇编程序识别并解释。主要是为变量申请内存空间、建立堆栈、告诉汇编程序从何处开始汇编以及到何处结束等。而可执行指令是在程序执行期间被CPU译码并执行的,4.2.1 伪指令,汇编结束后伪指令就完成任务,在程序执行期间不再考虑它,因此伪指令不翻译成目标码。而可执
15、行指令经汇编程序汇编后,变成机器可以识别并执行的目标码 一、数据定义伪指令数据定义伪指令见表4-13 格式:变量名 数据定义伪指令 表达式,功能:定义数据存储区,其类型由所使用的数据定义伪指令指定,4.2.1 伪指令,4.2.1 伪指令,二、符号定义伪指令,等价伪指令格式:符号名 EQU 表达式功能:用来为常量、表达式及其他各种符号定义一个等价的符号名,但它并不申请分配存储单元。如果一个常量在程序中使用非常频繁可以用一个符号来表示它,这就是符号常量。如假定学生成绩处理程序中经常使用某班的人数用等价伪指令定义为:N EQU 40。指令MOV AX,N在汇编时用40代替N变成MOV AX,40,4
16、.2.1 伪指令,等号伪指令 格式:符号名=表达式 功能:该语句的功能和EQU相似,不同的是等号伪指令能对所定义的符号名再重新定义,当使用等号语句连续定义同一符号名时,以最后一次定义的值为准,4.2.1 伪指令,三、段定义伪指令 格式:段名 SEGMENT 定位方式组合方式 类别 段名 ENDS 功能:定义了一个以SEGMENT伪指令开始,以ENDS伪指令结束,以段名命名的存储段,4.2.1 伪指令,说明:段名是程序员为该段所起的名字,用来指出为该段分配的存储区起始位置。一个程序模块可以定义为若干段,段名可以各不相同,也可以重复,汇编程序将一个程序中的同名段处理成一个段。段的定义可以嵌套,但不
17、能交叉。定位方式、组合方式和类别是可选项,可省略。数据段(或附加数据段)中一般定义常量和变量,是为程序的代码段提供数据和保存计算结果的。它的一般格式如下:DATA SEGMENT 常量或变量定义 DATA ENDS,4.2.1 伪指令,堆栈段为程序定义堆栈,堆栈的大小依赖于你所编写的程序对堆栈的使用程度。如果你省略堆栈段定义,当你的程序使用堆栈时,系统会自动建立堆栈。并且在汇编时会出现一个警告:“LINK:warning L4021:no stack segment”。对于一般的小程序可省略堆栈段定义,堆栈段的一般格式如下:STACK SEGMENT STACKDB n DUP(0)STACK
18、 ENDS 其中n是堆栈的长度,由程序员根据需要自定,4.2.1 伪指令,代码段是程序对数据进行处理的部分。在一个程序中,数据段、堆栈段和附加数据段都可以省略,代码段不能省略,代码段的一般格式如下:CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:EDATA 假定伪指令 START:可执行语句 MOV AH,4CH INT 21H CODE ENDS END START 程序结束伪指令,五、置汇编地址计数器伪指令ORG,汇编地址计数器用符号“$”表示,它用来记录正在被汇编程序汇编的语句地址,也就是说其内容标出了汇编程序当前的工作位置。在一个源程序中
19、,往往包含了多个段,汇编程序在将该源程序汇编成目标程序时,每遇到一个新段,就为该段分配一个初值为0的汇编地址计数器,然后,再对该段中的语句汇编。在汇编过程中,对凡是需要申请分配存储单元的语句和产生目标代码的语句,汇编地址计数器则按该语句目标代码的长度增值。因此,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。汇编地址计数器符号“$”可出现在表达式中,4.2.1 伪指令,汇编地址计数器的值可以用伪指令ORG进行设置。格式:ORG 数值表达式 功能:将汇编地址计数器设置成数值表达式的值。其中,数值表达式的值应为非负的整数,其值在065535之间,例【4-15】汇编地址计数器和伪指令O
20、RG举例DATA SEGMENTORG 4BUF DB readmeORG$+5NUM DB-2DATA ENDS,4.2.2 汇编语言中的常量、变量及标号,一、常量 常量是指在程序执行期间不变的量。在8086/8088宏汇编语言中可使用的常量见表4-14。常量主要用于伪指令中给变量赋初值,或者用作机器指令语句中的立即操作数、变址寻址和基址变址寻址中的位移量。常量一般可以直接以数值形式出现在汇编语句中,这种常量称数值常量。但对经常使用的数值常量,可以事先为它定义一个名字,然后在语句中用名字来表示该常量,这种常量称符号常量。伪指令EQU和等号“=”可用来实现将数值常量定义成符号常量,4.2.2
21、汇编语言中的常量、变量及标号,4.2.2 汇编语言中的常量、变量及标号,二、变量,在汇编语言中,变量是一个数据单元的名字,即数据存放地址的符号表示。它有3个属性:变量的段属性。指变量所在段的首地址,当需要访问该变量时,它所在段的首地址一定要在某一段寄存器中 变量的偏移属性。指变量所在段的首地址到变量所在的存储单元之间的距离,用字节数表示。它表示变量在某段的相对位置,也就是我们所说的偏移地址(或有效地址)EA 变量的类型。指存取某变量所需要的字节数,变量的定义格式如下:变量名 数据定义伪指令 表达式,汇编语言中的符号常量名、变量名、段名、过程名、标号都称为标识符。标识符是由字母、数字(09)、特
22、殊字符(?、.、_、$)等组成的字符串,但该字符串不能以数字或下划线_作为开始字符。标识符最大长度不能超过31个字符,并且汇编语言对字母的大写和小写没有统一要求,也就是说,汇编语言对标识符中字母的大写和小写不作区分,如ABC、aBc、Abc和aBC都认为是同一个标识符。注意不能使用汇编语言的保留字如算术运算指令名ADD、SUB等做标识符,:数值表达式 ASCII字符串(只有用DB定义变量时,才允许字符串长度超过2个字符)地址表达式。如果该地址表达式为一变量(或标号)名,用DW伪指令是取它的偏移地址来初始化变量,用DD伪指令是取它的段首址和偏移地址来初始化变量,表达式的几种方式,?(表示所定义的
23、变量初值不确定)重复子句 格式:n DUP(表达式)其中,n是重复因子,只能取正整数,它表示定义了n个存储单元,其类型由它前面的数据定义伪指令确定。而每个存储单元中的初值由DUP后面圆括号中的表达式给定,如果是“?”,则表示变量的初值不确定 可以是以上表达式组成的序列,各表达式之间用逗号隔开,例【4-16】有下面的数据段,画出其内存分配图DATA SEGMENTTABLE DB 1,2,3,2 DUP(6,-2)COUNTER EQU$-TABLEVARY DW 1234HCHAR DB 123,3 DUP(1)POINTER1 DW VARYPOINTER2 DD CHARDATA ENDS
24、,标号是机器指令语句存放地址的符号表示,也可以是过程名。过程名实际上是过程入口地址的符号表示,即过程第一条机器指令语句的存放地址 标号的用法有两种:在代码段某一指令的前面,是当前一条指令语句地址的符号表示,用来提供一个转移地址,让其他的指令向此指令转移,一般的机器指令语句前不需要标号 用来表示过程入口地址,三、标号,4.2.3 汇编语言中的运算符号和表达式,数值表达式是利用算术、逻辑、移位或关系运算符将常量连结在一起构成的表达式,它的运算结果是一个数值 算术运算符共有+、-、*、/、MOD 5个,其中*、/、MOD优先级相同,+、-优先级相同,并且*、/、MOD优先级高于+、-。可利用括号改变
25、一个表达式某一部分的优先级。MOD是取余数,如7 MOD 3的值是1 逻辑运算符有AND、OR、XOR、NOT 4个,分别是逻辑与、逻辑或、逻辑异或、逻辑非。逻辑运算是按位进行的,所以运算的结果仍是整数常量,一、数值表达式,移位运算符有左移SHL和右移SHR 2个运算符。SHL表示将常量左移运算符右边常量规定的次数,SHR表示将常量右移运算符右边常量规定的次数,所空的位补0 关系运算符有EQ、NE、GT、LT、GE、LE共6个运算符,分别是等于、不等于、大于、小于、大于或等于、小于或等于。关系运算的结果是两个特殊的量,若关系不成立,则结果为0;否则为0FFFFH,地址表达式的值是段内偏移地址,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 16 32 微处理器 指令系统 汇编语言 编程
链接地址:https://www.31ppt.com/p-5658732.html