《微型计算机原理与接口技术》第4章

上传人:考试不挂****2941... 文档编号:242948131 上传时间:2024-09-12 格式:PPT 页数:120 大小:2.32MB
返回 下载 相关 举报
《微型计算机原理与接口技术》第4章_第1页
第1页 / 共120页
《微型计算机原理与接口技术》第4章_第2页
第2页 / 共120页
《微型计算机原理与接口技术》第4章_第3页
第3页 / 共120页
点击查看更多>>
资源描述
,微型计算机原理与接口技术,第,4,章 指令系统,4.1,概述,4.2 80486,寻址方式,4.3 80486,标志寄存器,4.4,常用伪指令及运算符,4.5 80486,基本集指令,4., 概述,指令,:通知,CPU,执行某种操作的,“,命令,”,,,CPU,全部指令的,集合,称为指令系统,指令的书写格式,目标指令,(机器指令):用一串,0,,,1,代码书写,注意:硬件只能识别,存储,运行目标指令,符号指令:,用规定的助记符,规定的书写格式书写指令,指令的组成:,操作码,+,操作数,操作码,告诉计算机要执行的操作是什么,如:加、减、逻辑与等。,操作数,执行操作过程所要操作的数,如加运算的两个加数。,3.,指令的组成,汇编语言的符号指令,汇编语言是一种符号语言,它用:,助记符,表示操作码,符号或符号地址,表示操作数或操作数地址,80486,符号指令与机器指令对照表,操作,80486,符号指令,80486,机器指令,1234HAX,MOV AX, 1234H,B8 34 12,AX+BXAX,ADD AX, BX,03 C3,CX-DXCX,SUB CX, DX,2B CA,返回调用程序,RET,C3,MOV: MOVE,传送,ADD:,加,SUB:,减,RET:RETURN,返回,4.,目标程序的生成,汇编,源程序,编辑、编译、链接,可执行的机器指令,程序(目标程序,),5.,指令长度,486,指令长度(机器指令长度)为,1,16,字节,规定:多字节指令占用连续的内存单元,存放指令第,一字节的内存地址,称为,“,指令地址,”,。,CPU,只能识别,存储,运行目标指令,而用机器指,令编程非常困难。于是早期的专家们发明了符号指令,再经过软件把符号指令,机器指令。图示如下:,6.,指令存放,如:,12345H,单元中有一条指令,MOV AX,6789H,67H,89H,B8H,操作码,操作数,6789H,MOV AX,6789H,先写操作码,再写操作数。,多字节操作数连续存放。存放规律,:,低位字节存放在低地址单元,高位字节存放在相邻的高地址单元,12345H:,7.CPU,执行指令的过程,8.,符号指令的 书写格式,标号,:,操作码助记符,空格,操作数助记符,;注释,如,:,NEXT: ADD AX , BX ;AX+BX AX,INC SI,;SI+1 SI,标号:,以字母开头,后跟字母,数字,下划线,长度,31,字符,标号又称符号地址,代表该指令的逻辑地址。可有可,无,设置是为了程序的转向,注解:,以,“,;,”,开头,不执行,打印程序清单时照原样打印,,“,系统保留字,”,不能做标号。,4.2 80486,寻址方式,操作数是指令的操作对象,寻址方式与地址码有密切关系,.,形成操作数地址码的过程就是寻址。,“,寻址方式,”,:通俗的讲,就是通知,CPU,本条指令的操,作数在哪儿?或者说用什么方式才能得到,操作数,。,操作数,存在方式,在微型计算机中,操作数可能以以下三种方式存在:,操作数包含在指令中,即指令的操作数部分就包含着操作数本身。,MOV AX, 1234H ;,ADD AL, 2,操作数包含在,CPU,的某一个内部寄存器中,这时指令中的操作数是,CPU,内部的某一个寄存器,MOV DS, AX,操作数在内存的数据区中,这时指令中的操作数包含着此操作数的地址,MOV AX,2000 ;,MOV BUF , AL,80486,有,3,类,7,种寻址方式,立 即 寻址方式:,获得立即数,寄存器寻址方式:,获得寄存器操作数,存储器寻址方式:,获得内存操作数(存储器操作数),学习重点:,怎样在,符号指令,中,正确的描述各种寻址方式,1.,立即寻址方式,这种寻址方式所提供的操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在代码段区域中。立即数可以是,8,、,16,、,32,位,.,立即寻址主要是用来给寄存器赋初值,.,如,:,MOVEAX ,12345678H,MOVBL ,10101010B,;AAH BL,MOV CL , 4,;FCH CL,MOVDL ,A,;41H DL,ADD AL ,0C8H,MOVSI ,3*5,;15 SI,上例源操作数即为立即寻址, 立即数书写规定:,立即数以数字开头,以开头的,16,进制数,必须前缀,0,。,程序员可以按自己的习惯书写立即数,各种合法的立即数经汇编,后,一律自动转换成等值的二进制数,负数用补码表示。,立即数的数制用后缀表示,B,表示二进制数,H,表示十六进制数,D,或,缺省为十进制数,单引号括起来的字符编译成相应的,ASCII,码 。,可以用,+,* /,组成立即数表达式,2,.,寄存器寻址,操作数在,CPU,的某个寄存器中,符号,指令中直接写出寄存器名称,。,如:,MOV,AX , DS,;DS,内容,AX,INC,SI,;SI+1 SI (Increase,增量,),DEC,DI,;DI 1 DI (Decrease,减量,),如:下述条指令,目标操作数即为寄存器寻址,MOV,EAX,12345678H,MOV,BL,10101010B ;AAH BL,MOV,CL, 4;FCH CL,MOV,DL,5;35H DL,ADD,AL,0C8H,MOV,SI,3*5;15 SI,3.,存储器操作数寻址方式,重申:,在读写内存操作数之前,,CPU,必须知道相关存储单元的物理地址。,程序员的责任仅在于正确的书写逻辑地址表达式,然后由,CPU,自动运,算以求出物理地址。,由于,CPU,对存储器采用分段管理,因此指令格式中只能写出存放操作数,的内存单元的,“,逻辑地址,”,。,操作系统将程序调入内存时才给段寄存器赋实际值。此时,计算出的,20,位地址才是实际的物理地址,程序员给出的逻辑地址形式,段寄存器:,偏移地址,偏移地址,:,有效地址(,EA,),实模式,80X86,的内存地址 :,段基址,+,段内偏移量,存放在,CS,存放 在,BX,、,BP,、,SI,、,DI,中 ,,DS,或,直接地址,如,3000H,中,,,ES,或,上述形式的组合,中。,SS,中,段内偏移量可以由几部分组成,组成后的地址称为,有效地址,EA,EA,可以由以下各种情况构成:,直接地址,包含在指令中的,16,位地址偏移量,。,间接地址,由,CPU,内部某个,16,位寄存器的内容决定,如,BX,、,BP,、,SI,、,DI,。,基址,基址寄存器,BX,或,BP,加上指令中包含的,8,位或,16,位位移量,。,变址,变址寄存器,SI,或,DI,加上指令中包含的,8,位或,16,位位移量,。,基址加变址,由一个基址寄存器,BX,或,BP,加上一个变址寄存器,SI,或,DI,,再加,上指令中包含的,8,位或,16,位位移量,。,(1),直接寻址, 地址表达式的格式,1,:,段寄存器:,偏移地址,地址表达式的格式,2,:,段寄存器:变量名,用变量名代表存储单元的有效地址,如:,MOVAL, ES:2CH,从,ES,附加段偏移地址为,2CH,的单元取数,AL,如:,MOV AX, DS:2000H,从数据段偏移地址为,2000H,的单元取一字,AX,这种格式很少使用, 通常情况下,程序员不知道某单元的偏移地址,设数据段,XX,字节单元的内容为,11H,ES,附加段,YY,字单元的内容为,2233H,MOV AL,DS:XX,;,取数据段,XX,字节单元的内容,AL,或,MOV AL,XX,; AL=11H,MOVAX,ES:YY,;,取,ES,附加段,YY,字单元的内容,AX,或,MOV AX,YY,; AX=2233H,说明:,汇编语言允许为某单元起一个,“,名字,”,这个名字就称为该单元的,“,变量名,”,,经汇编之后,变量名有段基址和偏移量两种属性。,变量名是唯一的,程序中不能有重复的变量名,,“,段寄存器:,”,可以省略。,(2),寄存器间接寻址,寄存器间接寻址又称间接寻址,间址,什么是间接寻址?,操作数在内存单元,该单元的段基址在,段寄存器,中,有效地址在,间址寄存器,中,,CPU,首先进行地址计算,间接寻址的地址表达式,段寄存器:,间址寄存器,某单元的物理地址,=,段寄存器内容,16+,间址寄存器,访问约定的逻辑段 ,间接寻址的地址表达式简,化为:,间址寄存器,某单元的物理地址,=,约定的段寄存器内容,16+,间址寄存器,间址寄存器 和约定访问的逻辑段,486,规定:,间址寄存器,约定访问的逻辑段,BP,堆栈段,16,位寻址方式,BX,SI,DI,数据段,EBP,ESP,堆栈段,32,位寻址方式,EAX,EDX,ESI,EDI,数据段,举例:,设数据段,BUF,字节单元的内容为,55H,取出该数,AL,解,1,:用,BX,间址,MOV DS ,数据段段基址,MOV BX , BUF,单元的有效地址,MOV AL , DS:BX ;AL=55H,等价于,:,MOV AL , BX,由于,BX,间址,约定访问的是数据段, ,“,DS:,”,可省,解,2,:用,BP,间址,MOV DS ,数据段段基址,MOV BP , BUF,单元的有效地址,MOV AL , DS:BP ;AL=55H,不能写成,: MOV AL , BP,由于,BP,间址约定访问的是堆栈段, ,“,DS:,”,不可省,解,3,:用变量名直接寻址,MOV DS,数据段段基址,MOV AL, BUF ;AL=55H,(3),基址寻址,该寻址方式的有效地址由两部分组成。一部分在基址寄存器中,另一部分为常量 。,基址寻址的地址表达式:,段寄存器,:,基址寄存器,+,位移量,物理地址,=,段寄存器内容,16+,基址寄存器,+,位移量,访问约定的逻辑段,简化的地址表达式:,基址寄存器,+,位移量,物理地址,=,约定的段寄存器内容,16+,基址寄存器,+,位移量,基址寄存器和约定访问的逻辑段,基址寄存器,约定访问的逻辑段,BP,堆栈段,16,位寻址方式,BX,数据段,EBP,ESP,堆栈段,32,位寻址方式,EAX,EDX,ESI,EDI,数据段,举例,设数据段,BUF,单元依次有:,78H,56H,34H,12H,则:,MOV,DS,数据段段基址,MOV BX , BUF,单元有效地址,MOV DH ,BX+1,;DH=56H,MOV DX ,BX+2,;DX=1234H,12H,34,H,56,H,78,H,BUF,(4),变址寻址, 有比例因子的变址寻址其地址表达式为,段寄存器:,比例因子*变址寄存器,+,位移量,物理地址,=,段寄存器,16+,比例因子,变址寄存器,+,位移量,没有比例因子的变址寻址其地址表达式为:,段寄存器:,变址寄存器,+,位移量,访问约定的逻辑段可简化为 :,变址寄存器,+,位移量,物理地址,=,约定的段寄存器,16+,变址寄存器,+,位移量,变址寄存器与约定访问的逻辑段,变址寄存器,约定访问的逻辑段,适用于,SI,DI,数据段,无比例因子,16,位,寻址,EBP,堆栈段,有比例因子,32,位,寻址,EAX,EDX,ESI,EDI,数据段,说明:比例因子只能是,1,、,2,、,4,、,8,因此:,MOV AL , 8*SI+15 ;,非法,,16,位寻址不能使用比例因子,MOV AL , 10*ESI+5 ;,非法指令,比例因子错了,MOV AL , ES:SI ;,访问附加段,MOV AL , SI ;,访问数据段,(5),基址加变址寻址,存储单元的有效地址由,3,部分组成,有比例因子的基址加变址的地址表达式为:,段寄存器:,基址寄存器,+,比例因子*变址寄存器,+,位移量,访问约定逻辑段其地址表达式简化为:,基址寄存器,+,比例因子*变址寄存器,+,位移量,无比例因子基址加变址,地址表达式:,段寄存器:,基址寄存器,+,变址寄存器,+,位移量,访问约定逻辑段:,基址寄存器,+,变址寄存器,+,位移量,基址加变址寻址是基址寻址和变址寻址的组合,,,要求,:,基址寄存器和变址寄存器都是,16,位或都是,32,位,否则(,16,位寻址和,32,位寻址混合使用)是非法指令,默认的段寄存器不一致,这样的组合虽然是合法,但容易出错,寻址方式的学习要点:,1.,指令中的操作数有,3,种,:,立即数,寄存器数,内存操作数,访问立即数叫立即寻址方式,;,访问寄存器数叫寄存器寻,址方式,;,访问内存操作数由,5,种寻址方式,:,直接寻址、间址、基址、变址、基址加变址,不同的寻址方式是为了程序员在写指令时通过不同的手,段提供操作数,.,2.,关于,16,位寻址和,32,位寻址,16,位寻址:采用,16,位间址、基址、变址、基址加变址,32,位寻址:采用,32,位间址、基址、变址、基址加变址,3,.,在实模式下,一个逻辑段的体积最大为,64K,,存储 单元的有效地址为,16,位,不可能超过,FFFFH,在实模式下运行的程序通常采用,16,位寻址,4.,关于段约定和段超越,在用间址、基址、变址、基址加变址寻址内存操 作数时,其地址表达式都有,2,种书写格式,有段 前缀和无段前缀,如用,BP,、,EBP,、,ESP,参与寻址,,CPU,自动认为是访问堆栈段, ,段超越前缀,“,SS,:,”,可省,MOV AL , SS,:,BP,;访问,SS,段,用,BP,间址,MOV AL , BP,如用,BP,、,EBP,、,ESP,参与寻址非堆栈段,必须明确写出段超越前缀,如:,MOV AL , DS,:,BP,;访问堆栈段,用,BP,间址,MOV AL , ES,:,BP+2,如用,BX,、,SI,、,DI,、,EAX,EDX,、,ESI,、,EDI,参与寻址, CPU,自动认为是访问数据段,,“,DS,:,”,可省,明确写出,不能省,如:,MOV AL,,,DS,:,BX,MOV AL,,,BX,如用,BX,、,SI,、,DI,、,EAX,、,EDX,、,ESI,、,EDI,参与寻址非数据段,必须明确写出段超越前缀,如:,MOV AL,,,ES,:,BX,MOV AL,,,FS,:,SI+2,5,使用段约定访问内存操作数是最常用的编程风格,明确写出,不能省,4.3,标志寄存器,AC,VM,R,NT,IOPL,O,D,I,T,S,Z,A,P,C,D31 D19 D18 D0,80486,标志寄存器,80486,标志寄存器为,32,位,实际使用,15,位,15,位标志分为两类,:,状态标志,和,控制标志,状态标志记录了当前指令执行后的状态信息,控制标志用来控制微处理器操作,本节首先介绍,6,种状态标志,状态标志寄存器,O D I T S Z A P C,进位标志,C,(,Carry Flag,),当结果的最高位产生一个进位或借位,则,C=1,,否则,C=0,。,溢出标志,O,(,Overflow Flag,),在算术运算中,带符号数的运算结果超出了,8,位或,16,位,带符号数能表达的范围,则,O=1,,否则,O=0,。,8,位(字节)运算,-128 +127,16,位(字) 运算,-32768 +32767,符号标志,S,(,Sign Flag,),结果的最高位(,D,15,或,D,7,)为,1,,则,S=1,,否则,S=0,。,零标志,Z,(,Zero Flag,),若运算的结果为,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,), I=1,,则允许,CPU,接收外部的中断请求,,I=0,,则屏蔽外部中断请求。,追踪标志(,Trace Flag,), T=1,,使处理进入单步方式,以便于调试。,状,态,标,志,控,制,标,志,二,.,复习,:,有关溢出的几个概念,1.,什麽是溢出?,运算结果超出寄存器能表示的范围,称为溢出。,溢出和操作数的性质有关。,8,位无符号数运算,结果,255,有溢出,16,位无符号数运算,结果,65535,有溢出,32,位无符号数运算,结果, 2,32_,1,有溢出,8,位有符号数运算, -128,结果,127,有溢出,16,位有符号数运算, -32768,结果,32767,有溢出,32,位有符号数运算, -2,31,结果, 2,31_,1,有溢出,2. CPU,如何判断溢出,由于溢出和操作数的性质有关,而操作数的性质是由,程序员定义的。,CPU,只能默认一种选择,即,CPU,一律,默认操作数是有符号补码数,并以此来设置溢出标志。,3.,程序员如何判断溢出,有符号数运算,判,O,标志,O,标志为,1,有溢出,无符号数加,/,减,判,C,标志,C,标志为,1,有溢出,例,:,下列指令执行后,AL=?,A.C.O.P.S.Z,为何值,?,MOV AL ,0C8H,ADD AL ,0C8H,AL=90H,如果,C8H,为无符号数,(,值,=200),则有溢出。,如果,C8H,为有符号数,(,值,=-56),则无溢出。,这,6,个标志中,C.O.P.S.Z,可为程序的转移提供测试条件。,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,C=1,S=1,P=1,O=0,Z=0,1,A=1,源程序中的语句类型,一个完整的源程序应包含,2,类语句,:,符号指令、汇编伪指令,(,伪语句,),标号名、变量名、段名、过程名,命名规则,:,以字母开头,后跟字母、数字,长度,31,个字符,符号指令,:,经汇编后,其目标指令通知,CPU,进行什么操作,伪 指 令,:,是非机器指令,是在汇编期间进行操作的。,为汇编程序,链接程序提供汇编链接信息,符号名 伪指令,伪指令,标号,:,符号指令,符号指令,此处无冒号,4.4,常用伪指令及运算符,常用的伪指令,1.,字节字义伪指令,变量名,DB,一串用逗号间隔的单字节数,说明,:,DB,Define Byte,的缩写,“,定义字节,”,。,?,随机数, Dup,Duplicate(,重复,),3 Dup(?),代表,3,个用逗号间隔的随机数,5 Dup (,A),代表,5,个用逗号间隔的,A,的,ASC,码,如,:,N1 DB 12H,64,-1,3*3,DB 01010101B, A , B,DB 0A6H, HELLO,N2 DB ?,?,? ;,与下条等价,N2 DB 3 DUP(?),汇编后,12 H,40 H,FF H,09 H,55 H,41 H,42 H,A6 H,48 H,45 H,4C H,4C H,4F H,X X,X X,X X,N1:,N2:,功能,:,通知汇编程序把,DB,后跟的单字,节数,依次存入从变量,(,如,N1),开始的单元,负数用补码表示,单引号中的字符翻译成,ASC,码。,如,:,N1 DB 12H,64,-1,3*3,DB 01010101B, A , B,DB 0A6H, HELLO,N2 DB ?,?,? ;,与下条等价,N2 DB 3 DUP(?),如,:,N1 DB 12H,64,-1,3*3,DB 01010101B, A , B,DB 0A6H, HELLO,N2 DB ?,?,? ;,与下条等价,N2 DB 3 DUP(?),功能,:,用,DB,定义的这些内存单元,(N1,N1+12,N2,N2+2),的属性均为,“,字节型,”,。,汇编后,12 H,40 H,FF H,09 H,55 H,41 H,42 H,A6 H,48 H,45 H,4C H,4C H,4F H,X X,X X,X X,N1:,N2:,N1+12:,N2+2:,2.,字定义伪指令,变量名,DW,一串用逗号间隔的双字节数,如,:,WNUM DW 1234H,12, AB, C,DW ?,?,DW 2 DUP(?),说明,:,DW,Define Word,“,字定义,”,?,双字节随机数,单引号中只能是一个或两个字符,功能,:,通知汇编程序把,DW,后跟的双字节数,依次存入从变量名开始的单元,每一个数,占,2,个字节,低位字节,低址单元,高位字节,相邻的高址单元。,功能,:,用,DW,定义的这些单元的属性都是,“,字型,”,如上例, WNUM,WNUM+11,这,12,个单元的,属性都是,“,字型,”,。,汇编后,WNUM:,34 H,12 H,0CH,0 0,42 H,41 H,43 H,0 0,X X,X X,X X,X X,WNUM+11:,功能,:,通知汇编程序把,DD,后跟的数存入变量名开始的单元,每一个数占,4,个字节,低位字节,低址单元,高位字,节,高址单元。,用,DD,定义的这些单元的属性都是,“,双字型,”,上例,DNUM,DNUM+3,单元,这些单元都是双字型单元。,3.,双字定义伪指令,变量名,DD,一串用逗号间隔的,4,字节数,如,:,DNUM DD 12345678H,汇编后,DNUM:,34H,78H,56 H,12H,5.,等值伪指令,符号常数,EQU,表达式,如,:,NUM EQU 33,功能,:,定义符号常数,NUM,的值为,33,6.,等号伪指令,符号常数,=,表达式,如,:,NUM = 33,功能,:,定义符号常数,NUM,的值为,33,4.,多字节定义伪指令,变量名,DF,一串用逗号间隔的,6,字节数,变量名,DQ,一串用逗号间隔的,8,字节数,变量名,DT,一串用逗号间隔的,10,字节数,功能,:,通知汇编程序为,DF/DQ/DT,后跟的每一个数,分配,6/8/10,个单元。,三,.,常用运算符,1.,算术运算符,: +, -, *, /,2.,关系运算符,:,EQ(,等于,), NE(,不等于,), GT(,大于,),LT(,小于,),GE(,大于或等于,),例如,:,NUM EQU 33,MOV AL, NUM;,该指令与下条指令等价,MOV AL , 33,区别,:,用,EQU,定义的符号常数,其值在后继语句中不能更改,用,“,=,”,定义的符号常数,其值在后继语句中可以重新定义,应用,:,$,运算符紧跟在,DB,、,DW,、,DD,伪指令之后,统计字符,串的长度。,例如数据段有,:,BUF DB THE QUICK BROWN FOX,;,字符串长度,19,LLL EQU $-BUF,汇编后 符号常数,LLL,的值即为,19,3. $,运算符,汇编程序对源程序是逐行汇编的,$,运算符可以返回,汇编计数器的当前值。,如,:,MOV AX, SEG DATA,MOV DS, AX,设,“,DATA,”,是数据段的段名,上述两条指令算出数据段,的段基址,先赋给,AX,再转赋,DS,。,5.OFFSET,运算符,格式:,OFFSET,变量名或标号名,功能:算出某个变量或标号名所在单元的偏移地址(有效地址)。,4. SEG,运算符,格式,: SEG,段名或变量名或标号名,功能,:,计算某一逻辑段的段基址,设以,“,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,,,BUF,6.,PTR,运算符,格式,:,类型说明符,PTR,地址表达式,功能,:,在,本条指令,中,临时修改,地址表达式的属性,内存单元,5,种寻址方式,子程序的名称,BYTE,(字节),WORD,(字),DWORD,(双字),FAR,(远),NEAR,(近),举例:设数据段有:,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, MOV BUF,,,1234H,MOV WORD PTR BUF,1234H,;BUF,单元为,34H,BUF+1,单元为,12H,汇编后,BUF:,11,22,33,44,XX,XX,XX,XX,FFH,0,FFH,FFH,XX:,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,,,12H,;XX,单元为,12H,MOV WORD PTR BX,,,12H,;XX,单元为,12H,,,XX+1,单元为,0,汇编后,BUF:,11,22,33,44,XX,XX,XX,XX,FFH,0,FFH,FFH,XX:,WBUF:,YY:,4.5 80486,基本集指令,分,6,类,为讲授方便,用,N,代表立即数,,N8,、,N16,、,N32,代表,8,、,16,、,32,位立即数,R,代表寄存器操作数,,R8,、,R16,、,R32,代表,8,、,16,、,32,位寄存器操作数,M,代表内存操作数,,M8,、,M16,、,M32,代表,8,、,16,、,32,位内存操作数,S,代表段寄存器,第一类、 传送类,本类指令执行后,不影响状态标志,1.,通用传送,(1),数据传送,MOV,目 , 源,R / M,,,N,R / M / S,,,R,; 目标不允许是,CS,R / M,,,S,R / S,,,M,; 目标不允许是,CS,功能:,源,目,源不变,不影响,6,种标志,为了深入理解数值定义伪指令、学习,PTR,运算符的使用,请仔细,阅读以下例题。,【,例,】,阅读以下程序,写出指令执行后的目标操作数。,注意事项:,1.,立即数不能直接送段寄存器,MOV DS, 3000H,2.,目标操作数不允许用立即数方式,MOV 2000H, AL,3.,不允许在两个存储单元间传送数据,MOV2000H,3000H,4.,不允许在两个段寄存器之间传送数据,MOV DS, ES,5.,源、目属性要一致,代码段,:,MOV DS,SEG,数据段段基址,;,对,DS,初始化,MOV BL,BNUM ;,BL=?,所以,,BL=12H,数据段经过汇编之后,,设数据段,:,BNUM DB 12H,34H,56H,78H,90H,WNUM DW 1122H,3344H,5566H,DNUM DD 13572468H,87654321H,FNUM DF 112233445566H,BNUM:,12H,34H,56H,78H,90H,代码段,:,MOV DS,SEG,数据段段基址,MOV BX,WNUM+2 ;,BX=?,数据段经过汇编之后,,WNUM:,22H,11H,44H,33H,66H,55H,所以,,BX=3344H,设数据段,:,BNUM DB 12H,34H,56H,78H,90H,WNUM DW 1122H,3344H,5566H,DNUM DD 13572468H,87654321H,FNUM DF 112233445566H,代码段,:,MOV DS,SEG,数据段段基址,MOV BX, WORD PTR BNUM+1 ;,BX=?,所以,,BX=5634H,BNUM:,12H,34H,56H,78H,90H,数据段经过汇编之后,,,设数据段,:,BNUM DB 12H,34H,56H,78H,90H,WNUM DW 1122H,3344H,5566H,DNUM DD 13572468H,87654321H,FNUM DF 112233445566H,代码段,:,MOV,DS,SEG,数据段段基址,MOV BX, WORD PTR DNUM 3 ;,BX=?,数据段经过汇编之后,,所以,,BX=2113H,DNUM:,68H,24H,57H,13H,21H,43H,65H,87H,设数据段,:,BNUM DB 12H,34H,56H,78H,90H,WNUM DW 1122H,3344H,5566H,DNUM DD 13572468H,87654321H,FNUM DF 112233445566H,代码段,:,MOV,DS,SEG,数据段段基址,MOV SI, OFFSET BNUM,MOV BX, SI+1 ;,BX=?,所以,,BX=5634H,BNUM:,12H,34H,56H,78H,90H,数据段经过汇编之后,,设数据段,:,BNUM DB 12H,34H,56H,78H,90H,WNUM DW 1122H,3344H,5566H,DNUM DD 13572468H,87654321H,FNUM DF 112233445566H,(2) LEA,有效地址送寄存器。,LEA,目的操作数 源操作数,(,16,位通用寄存器) (内存操作数),该指令常用来设置一个,16,位的寄存器作为地址指针;,该指令的执行效果与,MOV,目标操作数, OFFSET,内存操作数,相同。,DS=1000h,10100h,00,02,00,20,0100h,BX,BUF,例:,LEA BX, BUF,执行后,BX=100H,MOV BX,OFFSET BUF,2.,堆栈操作指令,堆栈,按照,先进后出,的原则组织的一段内存区域。,8088,中规定堆栈设,置在堆栈段(,SS,段)内,堆栈指针,SP,的初值决定了堆栈的大小。,SP,始终指向堆栈的顶部,即始终指向最后推入堆栈的信息所在,的单元。,00000,SS:0000,SS:SP,堆,栈,段,栈顶:栈区的低地址,栈底:栈区的高地址,堆栈段寄存器,SS,:存放堆栈段段基址,堆栈指针,ESP(SP),:存放栈顶单元的偏移地址,SS,、,ESP(SP),初值,由程序员赋值或,DOS,系统自动赋值,数据进栈过程(以,16,位操作数进栈为例),双字节操作数,高字节,低字节,SP,X X H,X X H,高,8,位,SS,:,SP,1,1 2 H,3 4 H,堆栈区,SP,2,SP,数据进栈过程(以,16,位操作数进栈为例),X X H,X X H,1 2 H,SP,高,8,位,SS,:,SP,1,3 4 H,低,8,位,SS,:,SP,2,1 2 H,双字节操作数,高字节,低字节,堆栈区,SP,2,SP,数据进栈过程(以,16,位操作数进栈为例),高,8,位,SS,:,SP,1,X X H,X X H,1 2 H,低,8,位,SS,:,SP,2,3 4 H,SP,3 4 H,1 2 H,双字节操作数,高字节,低字节,堆栈区,SP,2,SP,SP,高字节,低字节,堆栈区,X X H,X X H,1 2 H,3 4 H,SP,数据出栈过程(以,16,位操作数出栈为例),SS,:,SP,目标,(,目标寄存器,目标单元,),低,8,位,7 8 H,5 6 H,16,位目标寄存器,数据出栈过程(以,16,位操作数出栈为例),SS,:,SP,目标,(,目标寄存器,目标单元,),低,8,位,高字节,低字节,堆栈区,X X H,X X H,3 4 H,SP,SS,:,SP+1,目标高,8,位,1 2 H,3 4 H,5 6 H,16,位目标寄存器,高字节,低字节,堆栈区,X X H,X X H,1 2 H,3 4 H,3 4 H,1 2 H,SP+2,SP,数据出栈过程(以,16,位操作数出栈为例),SS,:,SP,目标,(,目标寄存器,目标单元,),低,8,位,SS,:,SP+1,目标高,8,位,SP,16,位目标寄存器,高字节,低字节,堆栈区,X X H,X X H,1 2 H,3 4 H,3 4 H,1 2 H,SP+2,SP,数据出栈过程(以,16,位操作数出栈为例),SS,:,SP,目标,(,目标寄存器,目标单元,),低,8,位,SS,:,SP+1,目标高,8,位,SP,16,位目标寄存器,80X86,的堆栈是向低地址方向延伸的,栈顶是“浮动”的,注:一次进栈、出栈的数据至少是,2,字节,(2),堆栈指令,进栈指令,PUSH,源操作数,N16 / N32,S / R16 / R32 / M16 / M32,如:,PUSH WORD PTR BX,PUSH DWORD PTR SI+5,说明:非直接寻址的内存操作数,必须用,PTR,说明属性,出栈指令,POP,目标操作数,R16 / R32 / M16 / M32,S,(,CS,非法),如:,PUSH AX,POP BX,;,BX=AX,说明:,非直接寻址的内存操作数,必须用,PTR,说明属性,第二类 算术运算指令,分类,名称,格式,功能,O S Z A P C,加法指令,ADD DST,SRC,加法(字、字节),O S Z A P C,带进位加法指令,ADC DST,SRC,带进位加法,(,字、字节,),O S Z A P C,加,1,指令,INC OPRD,加,1,(字、字节),O S Z A P,减法指令,SUB DST,SRC,减法(字、字节),O S Z A P C,带借位减法指令,SBB DST,SRC,带借位减法,(,字、字节,),O S Z A P C,减,1,指令,DEC OPRD,减,1,(字、字节),O S Z A P,比较指令,CMP DST,SRC,比较(字、字节),O S Z A P C,求补指令,NEG OPRD,求补码,O S Z A P C,无符号数乘法,MUL SRC,不带符号数乘法,(,字,字节,),O C,带符号数乘法,IMUL SRC,带符号数乘法,(,字,字节,),O C,无符号数除法,DIV SRC,不带符号数除法,(,字,字节,),带符号数乘法,IDIV SRC,带符号数除法,(,字,字节,),符号扩展指令,CBW,扩展,AL,中的符号,不影响,符号扩展指令,CWD,扩展,AX,中的符号,不影响,加法指令,减法指令,乘法指令,除法指令,十进制调整指令,1.,加法指令,ADD DST, SRC,源操作数:通用寄存器、存储器、立即数,目的操作数:通用寄存器、存储器,执行的操作:,DST,DST,+,SRC,注:该指令影响标志位,注意: 该指令适合有符号数和无符号数的运算。,DST+SRC,O S Z A P C,0 0 1 0 0,1,0 0,0,ADC DST, SRC,源操作数:通用寄存器、存储器、立即数,目的操作数:通用寄存器、存储器,执行的操作:,DST,DST + SRC + C,功能: 主要用于多字节运算,注:该指令影响标志位,注意: 该指令适合有符号数和无符号数的运算。,DST+SRC+C,O S Z A P C,0 0 1 0 0,1,0 0,0,INC OPRD,操作数:通用寄存器、存储器,(,不能是段寄存器或立即数),执行的操作:,OPRD,OPRD + 1,功能: 用于在循环中修改地址指针及循环次数等。,注:该指令影响标志位,例:,INC BX,INC byte ptr SI,注意:,(1),该指令将操作数视为无符号数;,(2),该指令不影响 进位标志,C,OPRD + 1,O S Z A P,0 0 1 0 0,1,0 0,0,2.,减法指令,SUB DST, SRC,源操作数:通用寄存器、存储器、立即数,目的操作数:通用寄存器、存储器,执行的操作:,DST,DST - SRC,注:该指令影响标志位,注意: 该指令适合有符号数和无符号数的运算。,DST - SRC,O S Z A P C,0 0 1 0 0,1,0 0,0,SBB DST, SRC,源操作数:通用寄存器、存储器、立即数,目的操作数:通用寄存器、存储器,执行的操作:,DST,DST - SRC,C,注:该指令影响标志位,注意: 该指令适合有符号数和无符号数的运算。,DSTSRC-C,O S Z A P C,0 0 1 0 0,1,0 0,0,DEC OPRD,操作数:通用寄存器、存储器,(,不能是段寄存器或立即数),执行的操作:,OPRD,OPRD - 1,功能: 用于在循环中修改地址指针及循环次数等。,注:该指令影响标志位,例:,DEC BX,DEC word ptrSI,注意:,(1),该指令将操作数视为无符号数;,(2),该指令不影响 进位标志,C,OPRD - 1,O S Z A P,0 0 1 0 0,1,0 0,0,NEG OPRD,操作数:通用寄存器、存储器,执行的操作:求补指令,将操作数按位取反后加,1,,再送回操作数。,注:该指令影响标志位,OPRD,O S Z A P C,0 0 1 0 0,1,0 0,0,CMP DST, SRC,源操作数:通用寄存器、存储器、立即数,目的操作数:通用寄存器、存储器,执行的操作:,DST - SRC,注:该指令影响标志位,注意,:,(1),该指令同,SUB ,但其不保存运算结果;,(2),该指令后面通常跟一条转移指令,根据标志位,产生不同的程序分支。,比较指令主要用于两个数之间的关系:,大、小、相等,DST - SRC,O S Z A P C,0 0 1 0 0,1,0 0,0,3.,乘法指令,MUL SRC ,无符号数乘法,源操作数:通用寄存器、存储器(不能是立即数),目的操作数:,EDX, EAX,(隐含),执行的操作:字节操作 (,AH,AL,), (,AL,)(,SRC,),字操作 (,DX,AX,) (,AX,)(,SRC,),双字操作 (,EDX,EAX,) (,EAX,)(,SRC,),注:该指令影响标志位,AL,SRC,O C,0 0 1 0 0,1,0 0,0,注意:若结果的高半部分(字节 相乘为,AH,字相乘为,DX,),为,0,则,C=0,,,O=0,为,1,则,C=1,,,O=1,IMUL SRC ,有符号数乘法,源操作数:通用寄存器、存储器(不能是立即数),目的操作数:,EDX, EAX,(隐含),执行的操作:字节操作 (,AH,AL,), (,AL,)(,SRC,),字操作 (,DX,AX,) (,AX,)(,SRC,),双字操作 (,EDX,EAX,) (,EAX,)(,SRC,),注:该指令影响标志位,AL,SRC,O C,0 0 1 0 0,1,0 0,0,注意:若结果的高半部分不是低半部分的符号扩展的话,则,C=1,,,O=1,否则,C=0,,,O=0,4.,除法指令,DIV SRC ,无符号数除法,IDIV SRC ,有符号数除法,源操作数:通用寄存器、存储器 (不能是立即数),目的操作数:,EDX, EAX,(隐含),执行的操作:字节操作,(AL), (AX) / (SRC) ,商,(AH) (AX) / (SRC) ,余数,字操作,(AX) (DX,AX) / (SRC) ,商,(DX) (DX,AX) / (SRC) ,余数,双字操作,(EAX) (EDX,EAX) / (SRC) ,商,(DEX) (EDX,EAX) / (SRC) ,余数,注:该指令对各标志位均无定义 。,注意:,SRC,的类型决定是字或字节相除。,5.,十进制调整指令,前面提到的所有运算指令都是二进制数的运算指令,怎样得到十进制的运算结果呢?,8088,提供了一套十进制调整指令。,1.,十进制数的表示,BCD,码,用二进制编码的十进制数。,组合,0000 0001 0010 0011
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!