




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章16位和32位微处理器的指令系统及汇编语言编程第4章16位和32位微处理器的指令系统及汇编语言编程1教学目的和要求
掌握16位微处理器的寻址方式、指令系统及汇编语言编程,了解32位微处理器的指令系统,并结合附录A能够掌握汇编语言编程的上机操作教学目的和要求2教学重点
16位微处理器的寻址方式、指令系统及汇编语言编程(完整段模式)32位汇编语言编程(简化段模式)
教学重点3教学难点
微处理器的寻址方式与指令系统汇编语言编程的基本概念和编程方法
教学难点44.0入门
4.0入门5指令通常应提供的信息
1.做什么操作2.操作数从哪里来3.操作结果放在哪里4.对于调用和转移指令,还要涉及转移或调用地址的提供方式指令通常应提供的信息6指令系统的特点8086/8088的指令系统完全相同,都能在x86系列CPU上运行指令的特点体现在:格式上、功能上和寻址方式可变长指令,如CISC指令1~8字节寻址方式多样灵活,处理数据能力强有重复指令和运算指令,扩充了条件指令、移位/循环指令为加强软件中断功能和支持多处理器相同的工作,增设了有关的指令,如test,wait等指令系统的特点8086/8088的指令系统完全相同,都能在x7指令的组成操作码(OP)字段--标明计算机要执行什么操作操作数(operand)字段--指出指令在执行过程中所需要的操作数(值为多少或者放在什么地方),以及操作结果送到哪里指令的组成操作码(OP)字段8指令的一般格式每条指令为字节的整数倍长(指令规整)操作数字段可以有零个、一个、二个或三个操作数,通常称为“一地址”,“二地址”或“三地址”指令。操作码操作数。。。操作数指令的一般格式每条指令为字节的整数倍长(指令规整)操作码操作9示例1无操作数指令(控制类指令),如:HLTLOCKCLCCLDCLIIRET示例1无操作数指令(控制类指令),如:10
示例2单操作数指令,如:加1指令INCAX
只需要指出加1的操作数,它是“一地址”指令。
双操作数指令,如:ADDAX,BX
大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用“三地址”指令:除给出参加运算的两个操作数外,还要指出运算结果的存放地址示例2单操作数指令,11操作指令现代微型计算机中多采用二地址指令,两个操作数分别称为“源操作数”和“目的操作数”,指令执行后,把运算结果放到目的操作数的地址之中。指令的操作码在机器中的表示比较简单,只要对每一种操作指定相应的二进制代码即可;而指令的操作数字段的情形就比较复杂。操作指令现代微型计算机中多采用二地址指令,两个操作数分别称为12编址方式计算机中的编址设备:Register、系统主存和I/O设备编址方式:三个零地址空间:即对上述三种设备分别进行编址,并分别采用不同的寻址方式,很复杂,如:PC/XT两个零地址空间:对通用寄存器R进行独立编址,主存和I/O统一编址,地址码的地址高端用于I/O地址,64K。优点:简化了指令系统缺点:指令执行过程复杂编址方式计算机中的编址设备:Register、系统主存和I13编址方式一个零地址空间:三种设备统一编址,寄存器、主存和I/O对应低地址到高地址无零地址空间:指堆栈计算机CACHE和BUFFER是否需要编址?编址方式一个零地址空间:三种设备统一编址,寄存器、主存和I/14
寻址方式寻址方式的定义:指令中如何提供操作数或操作数地址的方式。规定如何对地址字段作出解释以找到操作数。
*程序转移时需提供转移地址,这跟提供操作数地址在方法上没有本质区别,因此也归入寻址方式的范畴。
寻址方式寻址方式的定义:15指令系统设计包括操作码字段和操作数字段一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。需要说明的是,在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的变型或组合:指令系统设计包括操作码字段和操作数字段16寻址方式固定寻址立即寻址(立即数寻址)寄存器寻址直接寻址间接寻址变址寻址
寻址方式固定寻址174.18086微处理器的寻址方式与指令系统
4.1.1寻址方式
一条指令包含操作码和操作数两部分,操作码指出该指令要进行的操作,操作数指出该指令需要的操作数或操作数的地址。指令根据一定的方式,找到操作数或操作数的地址,然后取出操作数进行处理。寻找操作数地址的方式称为寻址方式
4.18086微处理器的寻址方式与指令系统4.1.118表4-18086/8088的6种寻址方式
寻址方式汇编格式操作数位置寄存器寻址R寄存器寄存器间接寻址[R]内存变址寻址X[R]内存基址变址寻址X[BR+IR]内存直接寻址[EA]内存立即寻址n内存代码段表4-18086/8088的6种寻址方式寻址方式汇编格19一、寄存器寻址汇编格式:R(R是寄存器名)说明:寻找的操作数在寄存器R中例【4-1】INCAX
一、寄存器寻址汇编格式:R(R是寄存器名)20二、寄存器间接寻址汇编格式:[R](R是寄存器名)说明:寄存器R的内容是操作数在内存的EA,先从寄存器R中取出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数,所以称为间接寻址。能用来作间接寻址的寄存器只能是BX、SI、DI或BP四者之一例【4-2】MOVAX,[SI]
二、寄存器间接寻址汇编格式:[R](R是寄存器名)21二、寄存器间接寻址(续)表4-2寄存器间接寻址方式物理地址生成段段寄存器EAPA数据段DS[BX](DS)左移4位+EA[SI][DI]附加数据段ES[BX](ES)左移4位+EA[SI][DI]堆栈段SS[BP](SS)左移4位+EA二、寄存器间接寻址(续)表4-2寄存器间接寻址方式物理地22三、变址寻址
汇编格式:X[R](R是寄存器名,X表示位移量,其值是用8位或16位二进制补码表示的有符号数)。说明:寄存器R内容和位移量X之和是操作数在内存的EA。先将寄存器R中的值和位移量X相加求出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数。能用来作变址寻址的寄存器只能是BX、SI、DI或BP四者之一。例【4-3】MOVBX,2[BX]
三、变址寻址汇编格式:X[R](R是寄存器名,X表示位23三、变址寻址(续)
表4-3变址寻址方式物理地址生成段段寄存器EAPA数据段DS[BX]+X(DS)左移4位+EA[SI]+X[DI]+X附加数据段ES[BX]+X(ES)左移4位+EA[SI]+X[DI]+X堆栈段SS[BP]+X(SS)左移4位+EA三、变址寻址(续)表4-3变址寻址方式物理地址生成段24四、基址变址寻址
汇编格式:X[BR+IR]或X[BR][IR](BR为基址寄存器,IR为变址寄存器,X表示位移量,其值是用8位或16位二进制补码表示的有符号数)说明:基址寄存器BR、变址寄存器IR的内容和位移量X三者之和是操作数在内存的EA。先将寄存器BR、IR中的值和位移量X相加求出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数。基址寄存器只能用BX或BP,变址寄存器只能用SI或DI四、基址变址寻址汇编格式:X[BR+IR]或X[BR]25四、基址变址寻址(续)表4-3基址变址寻址方式物理地址生成段段寄存器EAPA数据段DS[BX]+[SI]+X(DS)左移4位+EA[BX]+[DI]+X附加数据段ES[BX]+[SI]+X(ES)左移4位+EA[BX]+[DI]+X堆栈段SS[BP]+[SI]+X(SS)左移4位+EA[BP]+[DI]+X四、基址变址寻址(续)表4-3基址变址寻址方式物理地址生成26五、立即寻址
汇编格式:n(n是一个常数,称为立即数)说明:指令操作码后面单元的内容为操作数(常数n),操作数在内存代码段。立即寻址所提供的操作数直接放在指令中,它是紧跟在指令操作码后面的一个可用8位或16位二进制补码表示的有符号数。立即寻址主要用来给寄存器或内存单元赋初值例【4-6】MOVAX,2是将立即数2送到AX中五、立即寻址汇编格式:n(n是一个常数,称为立即数)27六、直接寻址
汇编格式:含有变量的地址表达式或段寄存器:[EA]说明:在一条指令中直接给出某一内存单元的EA,这个EA经过汇编后放在这条指令的下一个字单元。例【4-7】MOVAX,[2000]是将数据段中EA为2000的内存单元中的内容送到AX中。六、直接寻址汇编格式:含有变量的地址表达式或段寄284.1.38086指令系统
一、数据传送指令表4-6数据传送指令类别操作码格式一般数据传送指令MOVMOVOPD,OPSXCHGXCHGOPD,OPSXLATXLATOPS或XLAT4.1.38086指令系统一、数据传送指令表4-6数据传294.1.38086指令系统
一、数据传送指令(续1)表4-6数据传送指令类别操作码格式堆栈操作指令PUSHPUSHOPSPOPPOPOPD4.1.38086指令系统一、数据传送指令(续1)表4-304.1.38086指令系统
一、数据传送指令(续2)表4-6数据传送指令类别操作码格式标志寄存器传送指令PUSHFPUSHFPOPFPOPFLAHFLAHFSAHFSAHF4.1.38086指令系统一、数据传送指令(续2)表4-314.1.38086指令系统
一、数据传送指令(续3)表4-6数据传送指令类别操作码格式地址传送指令LEALEAOPD,OPSLDSLDSOPD,OPSLESLESOPD,OPS输入输出指令ININOPD,OPSOUTOUTOPD,OPS4.1.38086指令系统一、数据传送指令(续3)表4-324.1.38086指令系统
二、算术运算指令表4-7算术运算指令类别操作码格式加法指令ADDADDOPD,OPSADCADCOPD,OPSINCINCOPD4.1.38086指令系统二、算术运算指令表4-7算术334.1.38086指令系统
二、算术运算指令(续1)表4-7算术运算指令类别操作码格式减法指令SUBSUBOPD,OPSSBBSBBOPD,OPSDECDECOPDNEGNEGOPDCMPCMPOPD,OPS4.1.38086指令系统二、算术运算指令(续1)表4-344.1.38086指令系统
二、算术运算指令(续2)表4-7算术运算指令类别操作码格式乘法指令MULMULOPSIMULIMULOPS除法指令DIVDIVOPSIDIVIDIVOPS4.1.38086指令系统二、算术运算指令(续2)表4-354.1.38086指令系统
三、位操作指令
表4-8位操作指令类别操作码格式逻辑运算指令NOTNOTOPDANDANDOPD,OPSTESTTESTOPD,OPSOROROPD,OPSXORXOROPD,OPS4.1.38086指令系统三、位操作指令表4-8位操364.1.38086指令系统
三、位操作指令(续1)
表4-8位操作指令类别操作码格式算术移位指令SALSALOPD,1或SALOPD,CLSARSAROPD,1或SAROPD,CL逻辑移位指令SHLSHLOPD,1或SHLOPD,CLSHRSHROPD,1或SHROPD,CL4.1.38086指令系统三、位操作指令(续1)表4-374.1.38086指令系统
三、位操作指令(续2)
表4-8位操作指令类别操作码格式不带进位的循环移位指令ROLROLOPD,1或ROLOPD,CLRORROROPD,1或ROROPD,CL带进位的循环移位指令RCLRCLOPD,1或RCLOPD,CLRCRRCROPD,1或RCROPD,CL4.1.38086指令系统三、位操作指令(续2)表4-384.1.38086指令系统
四、转移指令
转移指令分条件转移指令和无条件转移指令两大类,其特点是改变程序的执行顺序(即改变指令指针IP的值),但不改变状态标志位的状态。条件转移指令根据条件标志的状态判断是否转移。无条件转移指令则不作任何判断,无条件地转移到指令中指明的目的地址处执行。转移指令共有19条,具体见表4-94.1.38086指令系统四、转移指令转移指令394.1.38086指令系统
四、转移指令
表4-9转移指令类别指令名称操作码转移条件简单条件转移相等/等于0转JE/JZZF=1不相等/不等于0转JNE/JNZZF=0为负转JSSF=1为正转JNSSF=0溢出转JOOF=1未溢出转JNOOF=04.1.38086指令系统四、转移指令表4-9转移404.1.38086指令系统
四、转移指令(续1)
表4-9转移指令类别指令名称操作码转移条件简单条件转移进位位为1转JCCF=1进位位为0转JNCCF=0偶转移JP/JPEPF=1奇转移JNP/JPOPF=04.1.38086指令系统四、转移指令(续1)表4-414.1.38086指令系统
四、转移指令(续2)
表4-9转移指令类别指令名称操作码转移条件无符号数条件转移高于转移JA/JNBECF=0且ZF=0高于或等于转移JAE/JNBCF=0或ZF=1低于转移JB/JNAECF=1且ZF=0低于或等于转移JBE/JNACF=1或ZF=14.1.38086指令系统四、转移指令(续2)表4-424.1.38086指令系统
四、转移指令(续3)
表4-9转移指令类别指令名称操作码转移条件带符号数条件转移大于转移JG/JNLESF=OF且ZF=0大于或等于转移JGE/JNLSF=OF且ZF=1小于转移JL/JNGESF≠OF且ZF=0小于或等于转移JLE/JNGSF≠OF且ZF=14.1.38086指令系统四、转移指令(续3)表4-434.1.38086指令系统
四、转移指令(续4)
表4-9转移指令类别操作码转移条件无条件转移JMP无4.1.38086指令系统四、转移指令(续4)表4-444.1.38086指令系统
五、字符串操作指令
为了方便地实现字符串操作,8086/8088提供了字符串操作指令。只要按规定设置好初始条件,选用正确的字符串操作指令,就可完成规定的操作,这些指令的前面可加重复前缀,能在条件满足的情况下反复执行,而不用考虑指针如何移动、循环次数如何控制等问题,从而简化了程序设计。字符串操作指令在使用格式和使用方法上有许多类似的地方,它们隐含使用的寄存器、标志位和符号见表4-104.1.38086指令系统五、字符串操作指令454.1.38086指令系统
五、字符串操作指令(续1)
表4-10字符串操作指令使用中的一些隐含约定
源串指示器DS:SI目的串指示器ES:DI重复次数计数器CXSCAS指令的搜索值在AL/AX中LODS指令的目的地址AL/AX4.1.38086指令系统五、字符串操作指令(续1)464.1.38086指令系统
五、字符串操作指令(续2)
表4-10字符串操作指令使用中的一些隐含约定
STOS指令的源地址AL/AX传送方向DF=0,SI、DI自动增量(用CLD指令实现)DF=1,SI、DI自动减量(用STD指令实现)…SB不带操作数的字节操作指令…SW不带操作数的字操作指令4.1.38086指令系统五、字符串操作指令(续2)474.1.38086指令系统
五、字符串操作指令(续3)
系统规定:源串一定要在当前数据段中,目的串只允许在当前附加数据段中。所有的串操作指令均以寄存器间接方式访问源串或目的串中的各元素,并自动修改SI和DI的内容。若DF=0,则每次操作后,SI、DI自动增量(字节操作加1、字操作加2);若DF=1,则每次操作后,SI、DI自动减量(字节操作减1、字操作减2),使之指向下一个元素
4.1.38086指令系统五、字符串操作指令(续3)484.1.38086指令系统
五、字符串操作指令(续4)
当指令带有重复前缀时,则指令重复执行,每执行一次,就检查一次重复条件是否成立,如成立,则继续重复;否则终止重复,执行后续指令①REP:重复,即无条件重复CX寄存器中指定的次数②REPE/REPZ:相等/为0时重复,即(CX)≠0(重复次数还未为0)同时ZF=1(比较时相等)时重复,否则,重复终止。③REPNE/REPNZ:不相等/不为0时重复,即(CX)≠0(重复次数还未为0)同时ZF=0时重复,否则,重复终止
4.1.38086指令系统五、字符串操作指令(续4)494.1.38086指令系统
五、字符串操作指令(续5)
表4-11字符串操作指令
类别操作码格式字符串传送MOVSMOVSOPD,OPSMOVSBMOVSBOVSWMOVSW4.1.38086指令系统五、字符串操作指令(续5)504.1.38086指令系统
五、字符串操作指令(续6)
表4-11字符串操作指令
类别操作码格式字符串比较CMPSCMPSOPD,OPSCMPSBCMPSBCMPSWCMPSW4.1.38086指令系统五、字符串操作指令(续6)514.1.38086指令系统
五、字符串操作指令(续7)
表4-11字符串操作指令
类别操作码格式字符串搜索SCASSCASOPDSCASBSCASBSCASWSCASW4.1.38086指令系统五、字符串操作指令(续7)524.1.38086指令系统
五、字符串操作指令(续8)
表4-11字符串操作指令
类别操作码格式字符串装入LODSLODSOPSLODSBLODSBLODSWLODSW4.1.38086指令系统五、字符串操作指令(续8)534.1.38086指令系统
五、字符串操作指令(续9)
表4-11字符串操作指令
类别操作码格式字符串存储STOSSTOSOPDSTOSBSTOSBSTOSWSTOSW4.1.38086指令系统五、字符串操作指令(续9)544.1.38086指令系统
五、字符串操作指令(续10)
表4-11字符串操作指令
类别操作码功能重复前缀REP用于字符串传送和字符串装入指令前REPE/REPZ用于字符串比较指令、字符串搜索指令前REPNE/REPNZ用于字符串比较指令、字符串搜索指令前4.1.38086指令系统五、字符串操作指令(续10)554.1.38086指令系统
六、处理机控制指令
表4-12处理机控制指令--标志位控制指令
格式功能STC置进位标志,1→CFCLC清除进位标志,0→CFCMC进位标志取反,CF求反→CFSTD置方向标志,1→DFCLD清除方向标志,0→DF4.1.38086指令系统六、处理机控制指令表564.1.38086指令系统
六、处理机控制指令(续1)
表4-12处理机控制指令--标志位控制指令(续1)
格式功能STI置中断标志,1→IFCLI清除中断标志,0→IF4.1.38086指令系统六、处理机控制指令(续1)574.1.38086指令系统
六、处理机控制指令(续2)
表4-12处理机控制指令-CPU状态控制指令格式功能HLT处理器暂停ESCOPD,OPS交权指令,将浮点指令交给浮点处理器执行
WAIT等待指令,8086进入等待状态LOCK使CPU在执行该指令期间封锁总线,禁止其他的总线主设备占用总线
NOP空操作4.1.38086指令系统六、处理机控制指令(续2)584.216位汇编语言编程
4.2.1伪指令
在汇编源程序中使用一些固定格式的约定符号,这些符号主要用来告诉汇编程序如何工作,这就是汇编控制命令,也称伪指令。伪指令和机器指令(在4.1.3中所讲的指令)最大的区别有2点①伪指令是在汇编源程序汇编期间,被汇编程序识别并解释。主要是为变量申请内存空间、建立堆栈、告诉汇编程序从何处开始汇编以及到何处结束等。而可执行指令是在程序执行期间被CPU译码并执行的
4.216位汇编语言编程4.2.1伪指令594.2.1伪指令
②汇编结束后伪指令就完成任务,在程序执行期间不再考虑它,因此伪指令不翻译成目标码。而可执行指令经汇编程序汇编后,变成机器可以识别并执行的目标码一、数据定义伪指令数据定义伪指令见表4-13
格式:[变量名]数据定义伪指令表达式[,…]功能:定义数据存储区,其类型由所使用的数据定义伪指令指定4.2.1伪指令②汇编结束后伪指令就完成604.2.1伪指令表4-13数据定义伪指令伪指令所申请的字节数DB1DW2DD4DF6DQ8DT104.2.1伪指令表4-13数据定义伪指令伪指令所申614.2.1伪指令二、符号定义伪指令
①等价伪指令格式:符号名EQU表达式功能:用来为常量、表达式及其他各种符号定义一个等价的符号名,但它并不申请分配存储单元。如果一个常量在程序中使用非常频繁可以用一个符号来表示它,这就是符号常量。如假定学生成绩处理程序中经常使用某班的人数用等价伪指令定义为:NEQU40。指令MOVAX,N在汇编时用40代替N变成MOVAX,404.2.1伪指令二、符号定义伪指令①等价624.2.1伪指令
②等号伪指令
格式:符号名=表达式功能:该语句的功能和EQU相似,不同的是等号伪指令能对所定义的符号名再重新定义,当使用等号语句连续定义同一符号名时,以最后一次定义的值为准
4.2.1伪指令②等号伪指令634.2.1伪指令
三、段定义伪指令
格式:
段名SEGMENT[定位方式][组合方式]['类别']┇段名ENDS功能:定义了一个以SEGMENT伪指令开始,以ENDS伪指令结束,以段名命名的存储段
4.2.1伪指令三、段定义伪指令644.2.1伪指令
说明:①段名是程序员为该段所起的名字,用来指出为该段分配的存储区起始位置。一个程序模块可以定义为若干段,段名可以各不相同,也可以重复,汇编程序将一个程序中的同名段处理成一个段。段的定义可以嵌套,但不能交叉。②定位方式、组合方式和类别是可选项,可省略。③数据段(或附加数据段)中一般定义常量和变量,是为程序的代码段提供数据和保存计算结果的。它的一般格式如下:DATASEGMENT常量或变量定义DATAENDS
4.2.1伪指令说明:654.2.1伪指令
④堆栈段为程序定义堆栈,堆栈的大小依赖于你所编写的程序对堆栈的使用程度。如果你省略堆栈段定义,当你的程序使用堆栈时,系统会自动建立堆栈。并且在汇编时会出现一个警告:“LINK:warningL4021:nostacksegment”。对于一般的小程序可省略堆栈段定义4.2.1伪指令④堆栈段为程序定义堆栈,堆66堆栈段的一般格式如下:STACKSEGMENTSTACK DBnDUP(0)STACKENDS其中n是堆栈的长度,由程序员根据需要自定堆栈段的一般格式如下:674.2.1伪指令
⑤代码段是程序对数据进行处理的部分。在一个程序中,数据段、堆栈段和附加数据段都可以省略,代码段不能省略4.2.1伪指令⑤代码段是程序对数据进行处68代码段的一般格式如下:CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:EDATA假定伪指令
START:┇ 可执行语句MOVAH,4CHINT21HCODEENDSENDSTART程序结束伪指令代码段的一般格式如下:69五、置汇编地址计数器伪指令ORG
汇编地址计数器用符号“$”表示,它用来记录正在被汇编程序汇编的语句地址,也就是说其内容标出了汇编程序当前的工作位置。在一个源程序中,往往包含了多个段,汇编程序在将该源程序汇编成目标程序时,每遇到一个新段,就为该段分配一个初值为0的汇编地址计数器,然后,再对该段中的语句汇编。在汇编过程中,对凡是需要申请分配存储单元的语句和产生目标代码的语句,汇编地址计数器则按该语句目标代码的长度增值。因此,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。汇编地址计数器符号“$”可出现在表达式中
五、置汇编地址计数器伪指令ORG汇编地址计数器用符号704.2.1伪指令
汇编地址计数器的值可以用伪指令ORG进行设置。格式:ORG数值表达式功能:将汇编地址计数器设置成数值表达式的值。其中,数值表达式的值应为非负的整数,其值在0~65535之间
4.2.1伪指令汇编地址计数器的值可以用伪指令OR71例【4-15】汇编地址计数器和伪指令ORG举例 DATASEGMENT ORG4 BUFDB'readme' ORG$+5 NUMDB-2 DATAENDS例【4-15】汇编地址计数器和伪指令ORG举例724.2.2汇编语言中的常量、变量及标号
一、常量常量是指在程序执行期间不变的量。在8086/8088宏汇编语言中可使用的常量见表4-14。常量主要用于伪指令中给变量赋初值,或者用作机器指令语句中的立即操作数、变址寻址和基址变址寻址中的位移量。常量一般可以直接以数值形式出现在汇编语句中,这种常量称数值常量。但对经常使用的数值常量,可以事先为它定义一个名字,然后在语句中用名字来表示该常量,这种常量称符号常量。伪指令EQU和等号“=”可用来实现将数值常量定义成符号常量
4.2.2汇编语言中的常量、变量及标号一、常量734.2.2汇编语言中的常量、变量及标号表4-148086/8088宏汇编语言中所使用的常量常量分类格式X的取值举例二进制常量XX…XB0或101000001B八进制常量XX…XOXX…XQ0~71234Q十进制常量XX…XXX…XD0~9123,123D十六进制常量
XX…XH
0~9A~F
1234H,0A12FH
字符常量
'XX…X'"XX…X"
ASCII字符
'0123'"readme"
4.2.2汇编语言中的常量、变量及标号表4-14808744.2.2汇编语言中的常量、变量及标号二、变量
在汇编语言中,变量是一个数据单元的名字,即数据存放地址的符号表示。它有3个属性:①变量的段属性。指变量所在段的首地址,当需要访问该变量时,它所在段的首地址一定要在某一段寄存器中②变量的偏移属性。指变量所在段的首地址到变量所在的存储单元之间的距离,用字节数表示。它表示变量在某段的相对位置,也就是我们所说的偏移地址(或有效地址)EA③变量的类型。指存取某变量所需要的字节数4.2.2汇编语言中的常量、变量及标号二、变量在汇编75
变量的定义格式如下:[变量名]数据定义伪指令表达式[,…]汇编语言中的符号常量名、变量名、段名、过程名、标号都称为标识符。标识符是由字母、数字(0~9)、特殊字符(?、.、@、_、$)等组成的字符串,但该字符串不能以数字或下划线‘_’作为开始字符。标识符最大长度不能超过31个字符,并且汇编语言对字母的大写和小写没有统一要求,也就是说,汇编语言对标识符中字母的大写和小写不作区分,如ABC、aBc、Abc和aBC都认为是同一个标识符。注意不能使用汇编语言的保留字如算术运算指令名ADD、SUB等做标识符变量的定义格式如下:76:①数值表达式②ASCII字符串(只有用DB定义变量时,才允许字符串长度超过2个字符)③地址表达式。如果该地址表达式为一变量(或标号)名,用DW伪指令是取它的偏移地址来初始化变量,用DD伪指令是取它的段首址和偏移地址来初始化变量
表达式的几种方式:①数值表达式表达式的几种方式77④?(表示所定义的变量初值不确定)⑤重复子句格式:nDUP(表达式)其中,n是重复因子,只能取正整数,它表示定义了n个存储单元,其类型由它前面的数据定义伪指令确定。而每个存储单元中的初值由DUP后面圆括号中的表达式给定,如果是“?”,则表示变量的初值不确定⑥可以是以上表达式组成的序列,各表达式之间用逗号隔开④?(表示所定义的变量初值不确定)78例【4-16】有下面的数据段,画出其内存分配图DATASEGMENTTABLEDB1,2,3,2DUP(6,-2)COUNTEREQU$-TABLEVARYDW1234HCHARDB’123’,3DUP(1)POINTER1DWVARYPOINTER2DDCHARDATAENDS例【4-16】有下面的数据段,画出其内存分配图79
标号是机器指令语句存放地址的符号表示,也可以是过程名。过程名实际上是过程入口地址的符号表示,即过程第一条机器指令语句的存放地址
标号的用法有两种:①在代码段某一指令的前面,是当前一条指令语句地址的符号表示,用来提供一个转移地址,让其他的指令向此指令转移,一般的机器指令语句前不需要标号
②用来表示过程入口地址
三、标号标号是机器指令语句存放地址的符号表示,也可以是过程名。过程804.2.3汇编语言中的运算符号和表达式
4.2.3汇编语言中的运算符号和表达式81
数值表达式是利用算术、逻辑、移位或关系运算符将常量连结在一起构成的表达式,它的运算结果是一个数值①算术运算符共有+、-、*、/、MOD5个,其中*、/、MOD优先级相同,+、-优先级相同,并且*、/、MOD优先级高于+、-。可利用括号改变一个表达式某一部分的优先级。MOD是取余数,如7MOD3的值是1②逻辑运算符有AND、OR、XOR、NOT4个,分别是逻辑与、逻辑或、逻辑异或、逻辑非。逻辑运算是按位进行的,所以运算的结果仍是整数常量一、数值表达式数值表达式是利用算术、逻辑、移位或关系运算符将常量连结在一82
③移位运算符有左移SHL和右移SHR2个运算符。SHL表示将常量左移运算符右边常量规定的次数,SHR表示将常量右移运算符右边常量规定的次数,所空的位补0④关系运算符有EQ、NE、GT、LT、GE、LE共6个运算符,分别是等于、不等于、大于、小于、大于或等于、小于或等于。关系运算的结果是两个特殊的量,若关系不成立,则结果为0;否则为0FFFFH
③移位运算符有左移SHL和右移SHR2个运算符。83
地址表达式的值是段内偏移地址,它具有段、偏移地址及类型三个属性。地址表达式是由变量、常量、标号、寄存器和运算符组成的有意义的式子地址表达式除可使用数值表达式的运算符外,还可根据需要使用一些特殊运算符二、地址表达式地址表达式的值是段内偏移地址,它具有段、偏移地址及类型三个84
用来指明某个变量、标号或地址表达式的类型属性,或者使它临时兼有与原定义所不同的类型属性,但保持它们原来的段属性和偏移地址属性不变。其格式是:
类型PTR地址表达式根据地址表达式的不同值,类型可以是BYTE、WORD、DWORD、NEAR、FAR
1.类型运算符PTR用来指明某个变量、标号或地址表达式的类型属性,或者使85
为了将源程序中的指令正确地翻译成目标代码,汇编程序要求每个语句中操作数的类型要明确,如果是双操作数指令,还要求源操作数和目的操作数类型一致,既同时为字节类型或同时为字类型。下面分4种情况说明:①对于单操作数指令,操作数的类型必须明确②对于双操作数指令,只要有一个操作数类型明确就可以了③如果两个操作数类型都明确,则它们的类型必须一致④如果两个操作数类型都不明确,就要用PTR来指定类型了为了将源程序中的指令正确地翻译成目标代码,汇编程86
跨段前缀“:”用于临时给变量、标号或地址表达式指定一个段属性,且只能在所出现的语句中有效,它并不改变地址表达式的偏移地址和类型属性,它的格式是:①段寄存器名:地址表达式,②段名:地址表达式MOVAX,[SI]等价于MOVAX,DS:[SI],默认从数据段中取数据。若改为MOVAX,ES:[SI],则从附加数据段中取数据
2.跨段前缀“:”跨段前缀“:”用于临时给变量、标号或地址表达式指定一个段属87
属性分离运算符可分离出变量、标号的段、偏移地址及类型的属性值。其格式是:分离运算符变量或标号,运算结果是一个数值常量
3.属性分离运算符属性分离运算符可分离出变量、标号的段、偏移地址及类型的属性88
①段属性分离运算符SEG。该运算符分离出其后变量或标号所在段的首地址②偏移属性分离运算符OFFSET。该运算符分离出其后变量或标号的偏移地址
③类型分离运算符TYPE该运算符取其后变量或标号的类型。如果是变量,其类型值由变量的类型确定,某一变量类型的类型值和该变量在内存中所占的字节数相同①段属性分离运算符SEG。该运算符分离出其后89
①取变量所含的数据存储单元个数运算符LENGTH,格式:LENGTH变量。它的取值根据定义该变量时,数据定义伪指令后面第一个表达式的形式而定,如果第一个表达式为重复子句“nDUP(表达式)”,则取值为前面的重复因子n,如果为其他形式的表达式,则取值为1②取变量所含的数据存储区大小运算符SIZE,格式:SIZE变量。它的取值为:LENGTH变量*TYPE变量,也就是说,它的取值是一个变量所占内存的实际字节数
4.其他运算符①取变量所含的数据存储单元个数运算符LENGTH,格式90③字节分离运算符HIGH和LOW格式:HIGH常量或地址表达式;LOW常量或地址表达式其中,HIGH分离出其后常量或地址表达式的高8位,LOW分离出其后常量或地址表达式的低8位。汇编语言中的常用的运算符的优先级见表4-17。③字节分离运算符HIGH和LOW914.2.4顺序与分支程序的设计
顺序型结构程序的特征是在程序的指令中无转移指令,计算机从程序的第一条指令开始顺序执行,直到程序的最后一条指令为止
4.2.4顺序与分支程序的设计顺序型结构程序92例【4-29】在一个表中存放着0到9十个数字的立方值,编程从键盘输入0到9之间的任意一个数,查表找出这个数的立方值例【4-29】在一个表中存放着0到9十个数字的立方值,编程从934.2.4顺序与分支程序的设计
有分支控制的程序结构称为分支型结构(或称选择结构)。分支型结构可分为二分支型结构和多分支型结构。在分支程序中,不同的条件往往是通过标志寄存器中条件标志的不同状态反映的。因此分支程序设计中一个至关重要的问题是根据各标志的不同状态选用合适的转移指令。转移指令分条件转移指令和无条件转移指令两大类
4.2.4顺序与分支程序的设计有分支控制的程序结94一、条件转移语句格式:[标号:]操作符短标号功能:如果条件满足,则(IP)+位移量→IP一、条件转移954.2.4顺序与分支程序的设计
在转移指令中,位移量为当前(IP)到转移目的地址处的字节距离。如果当前(IP)到某标号(即转移的目的地址)的位移量在-128~127之间,则该标号称为短标号。当位移量为正时,表示向前转;当位移量为负时,表示向后转,条件转移指令的目的地址均是短标号4.2.4顺序与分支程序的设计在转移指令中,96条件转移指令共有18条,分成以下三类1.简单条件转移指令共有10条,根据单个标志的状态决定是否转移2.无符号数条件转移指令共有4条,根据多个标志的状态决定是否转移,这类指令将比较对象视为无符号数3.带符号数条件转移指令共有4条,根据多个标志的状态决定是否转移,这类指令将比较对象视为带符号数条件转移指令共有18条,分成以下三类974.2.4顺序与分支程序的设计
二、无条件转移无条件转移指令使CPU无条件地转移到指令中指明的目的地址处执行,在程序中用它将各分支的出口重新汇集到一起构成多分支结构,特别是当条件转移指令的转移范围超过-128~127个字节时,往往要借助无条件转移指令实现4.2.4顺序与分支程序的设计二、无条件转984.2.4顺序与分支程序的设计
无条件转移指令和要转移的目的地址可以在同一段,也可以在另一段。前者称为段内转移,后者称为段间转移。段内转移指令只改变指令指针IP的内容,而段间转移指令则要同时改变指令指针IP和代码段寄存器的内容。无条件转移指令可通过各种寻址方式得到要转移的目的地址,常用的有直接寻址和间接寻址两种,表4-18列出了无条件转移指令的格式和功能说明4.2.4顺序与分支程序的设计无条件转移指99微机原理及接口技术第05章课件100无条件转移指令和条件转移指令有两点重要区别:一是前者的转移是无条件的,不做任何判断便转向目的单元;二是前者的转移范围不受限制,而后者只能在-128~127个字节范围内转移无条件转移指令和条件转移指令有两点重要区别:一是前者的转移1014.2.4顺序与分支程序的设计例【4-30】编程实现符号函数
4.2.4顺序与分支程序的设计例【4-30】编程实现符号1024.2.4顺序与分支程序的设计
对于多路分支的程序,如果直接用条件转移指令实现,那么N路分支,就需要N-1条条件转移指令,程序显得冗长繁琐,可用跳转表来实现多路分支例【4-31】对学生的成绩分类,分类标准见表4-19。下面的程序是由入口地址组成跳转表的多路分支程序4.2.4顺序与分支程序的设计对于多路分支的1034.2.5循环程序设计
循环型结构有REPEAT-UNTIL模式(见图4-8)和WHILE模式(见图4-9)。
4.2.5循环程序设计循环型结构有REPEAT-1044.2.5循环程序设计
REPEAT-UNTIL和WHILE两种模式的共同点是都有初始化部分、工作部分、调整部分和控制部分。这四部分的作用是:①初始化部分,又称循环的预置部分。在循环体工作之前,把工作变量(保存中间结果或最后结果)、控制变量(控制循环是否结束)、地址单元、工作寄存器等置初值,为循环做好准备,初始化工作可保征循环程序在正确的初始状态下工作②工作部分,这是整个循环程序的核心部分,它由需要重复操作的指令序列组成,工作部分随求解问题所采用的算法不同而异
4.2.5循环程序设计REPEAT-UNTIL105③调整部分,为了保证工作部分每次在新的意义下工作,每执行一次工作部分,必须对操作数或操作数地址进行修改,为下一次循环作准备,同时控制变量也作相应的调整,为控制部分的条件判定作准备。例如利用计数来控制的循环,每循环一次,计数值都要调整(增加或减少),控制部分根据计数器的值来决定是否退出循环。通常的循环结构是调整和工作部分同步工作,工作部分和调整部分合在一起,统称为循环体。③调整部分,为了保证工作部分每次在新的意义下工作,每执行一106④控制部分:为了能在正确的时机退出循环,要有出口测试,控制部分是用来控制循环程序是继续执行还是终止。控制部分是对修改过的控制变量进行测试,若达到预定要求,则循环结束,否则循环继续执行。控制部分根据实际情况可分为计数控制(又分为正计数和倒计数)和条件控制两种
④控制部分:为了能在正确的时机退出循环,要有出口测试,控制1074.2.5循环程序设计
REPEAT-UNTIL和WHILE两种模式的区别是,REPEAT-UNTIL模式是先执行循环体,再判断条件是否成立,因此对于REPEAT-UNTIL模式不管条件是否成立循环体至少执行一次;WHILE模式是先判断条件是否成立再执行循环体,因此对于WHILE模式循环体可能一次也得不到执行
4.2.5循环程序设计REPEAT-UNTIL1084.2.5循环程序设计
例【4-32】已知有N个数据存放在以BUF为首地址的字节存储区中,编程统计其中负数的个数。
4.2.5循环程序设计例【4-32】已知有N109
在本例中,用到了三个寄存器,这三个寄存器的功能分别是:AX:累加器,用来累加BUF中负数的个数,初值为0BX:地址寄存器,用来指示BUF的地址,初值为BUF的首地址CX:计数器,用计数方式控制循环何时结束,初值为BUF的长度N在本例中,用到了三个寄存器,这三个寄存器的功能分别是:1104.2.5循环程序设计
如何控制循环是循环程序设计中的一个重要环节,下面介绍最常见的两种循环控制方法:计数控制和条件控制一、计数控制当循环次数已知时,通常使用计数控制,计数控制又有正计数和倒计数两种形式①倒计数先将循环次数N送入循环计数器中,每循环1次,计数器减1,直到循环计数器中的内容为0时结束循环
4.2.5循环程序设计如何控制循环是循环程序设计111下面以例【4-32】的代码段为例说明这个问题。 LEABX,BUF MOVCX,N ;初始化部分 MOVAX,0CYCLE: CMPBYTEPTR[BX],0 JGENEXT ;工作部分 INCAXNEXT: INCBX DECCX;修改部分JNZCYCLE;控制部分下面以例【4-32】的代码段为例说明这个问题。1124.2.5循环程序设计
②正计数先将0送入循环计数器中,每循环1次,计数器加1,直到循环计数器中的内容与循环次数N相等时结束循环
下面将例【4-32】的代码段改写为用CX进行正计数来说明这个问题
4.2.5循环程序设计②正计数113
LEABX,BUF MOVCX,0 ;
初始化部分 MOVAX,0CYCLE:CMPBYTEPTR[BX],0 JGENEXT ;
工作部分 INCAXNEXT: INCBX INCCX ;
修改部分 CMPCX,N ;
控制部分 JNZCYCLE
LEABX,BUF1144.2.5循环程序设计二、条件控制有些情况下,循环次数无法事先确定,但它与问题中的某些条件有关,这些条件可以通过指令来测试,如果测试的结果满足循环条件,则继续循环,否则结束循环例【4-33】编程统计AX中1的个数。【分析】每次判断AX的最低位,如果最低位为1则BL加1;否则BL不加1。然后AX逻辑右移1位,左边补0,在某一时刻AX必然为0。因此,可以将AX是否为0作为条件控制循环
4.2.5循环程序设计二、条件控制1154.2.6子程序设计
子程序设计是使程序模块化的一种重要手段。当设计一个比较复杂的程序时,将程序划分为若干个相对独立的模块,确定各模块的入口及出口参数,为各模块分配不同的名字,对每一个模块编制独立的程序段(即子程序),最后将这些子程序根据调用关系连成一个整体。这样既便于分工合作,又可避免重复劳动,节省存储空间,提高程序设计的效率和质量,使程序简洁、清晰、易读,便于修改和扩充
4.2.6子程序设计子程序设计是使程序模块化的一种重1164.2.6子程序设计4.2.6子程序设计117一、定义子程序子程序的定义格式是:子程序名PROC[NEAR/FAR] ┇子程序名ENDP子程序也称为过程,PROC、ENDP是定义子程序时必须使用的保留字,PROC和ENDP相当于一对括号,将子程序的指令包括在内。如果主程序和子程序位于同一代码段,则称为段内调用,此时在PROC后可加NEAR说明此子程序是近过程。如果主程序和子程序不在同一代码段,则称为段间调用,此时在PROC后可加FAR说明此子程序是远过程。如果NEAR和FAR都不写,系统默认该子程序是近过程一、定义子程序子程序的定义格式是:1184.2.6子程序设计
二、子程序的调用和返回
为了实现子程序的调用和返回,可使用子程序调用指令CALL和返回指令RET
1.子程序调用指令CALL子程序调用指令CALL的格式是:CALLOPD。根据OPD寻址方式的不同,又分为直接调用和间接调用。因此,子程序调用指令CALL共有4种组合,见表4-214.2.6子程序设计二、子程序的调用和返回1194.2.6子程序设计
对于段间间接调用,需要双字单元存放子程序的入口地址信息,第一个字单元中放子程序入口的偏移地址,第二个字单元中放子程序所在段的段首址,见表4-22
4.2.6子程序设计对于段间间接调用,需要双字单元120
2.返回指令RETRET指令通常作为子程序的最后一条指令,用来控制CPU返回到主程序的断点处继续向下执行,RET指令的语句格式及功能见表4-232.返回指令RET1214.2.6子程序设计
无论是段内返回还是段间返回,当RET指令执行后,主程序的断点地址信息已送回到IP、CS中,堆栈恢复了转子前的状态
RET指令的另一种格式是:RETN,其中N是偶数。该指令用来废除栈顶N个无用的参数。其操作是在正常RET操作之后再做SP+N→SP
4.2.6子程序设计无论是段内返回还是段间返回,当1224.2.6子程序设计
三、调用子程序前后怎样保存和恢复寄存器
如果在子程序中要用到某些寄存器(或存储单元),就会破坏这些寄存器(或存储单元)在转子前原有的内容。当执行完子程序返回断点继续执行主程序时,只能以被破坏的现场为背景进行工作,这显然是不对的。因此,必须考虑现场的保存和恢复。一般情况下,在子程序的开始安排一些保存现场的指令,在子程序的返回指令之前再恢复现场。例如,若子程序SUBP中改变了寄存器AX、BX、CX的内容,则在子程序的开始处将这些寄存器的内容入栈保存,在子程序的返回指令之前用出栈指令依次恢复,具体实现方法如下:4.2.6子程序设计三、调用子程序前后怎样保存和恢复寄123微机原理及接口技术第05章课件1244.2.6子程序设计四、主程序和子程序间的参数传递
主程序在调用子程序之前,必须把需要子程序处理的原始数据传递给子程序,即为子程序准备入口参数。子程序对入口参数进行一系列处理之后得到处理结果,该结果必须送给调用它的主程序,即提供出口参数以便主程序使用。这种主程序为子程序准备入口参数、子程序为主程序提供处理结果的过程称为主程序和子程序间的参数传递。常用的参数传递方法有寄存器法、约定单元法和堆栈法三种,本节主要讲解前两种方法
4.2.6子程序设计四、主程序和子程序间的参数传递1251.寄存器法寄存器法就是子程序的入口参数和出口参数都在约定的寄存器中。此法的优点是参数传递快,编程也较方便,且节省内存单元。但由于寄存器个数有限,而且在处理过程中要经常使用寄存器,如果要传递的参数很多,将导致无空闲寄存器供编写程序使用。所以寄存器法只适用于要传递参数较少的情况1.寄存器法1264.2.6子程序设计
例【4-34】寄存器法参数传递举例,编写子程序求两个数的最大公约数【分析】X和Y中放着两个整数,在主程序中分别用寄存器AX和BX将这两个整数传递给计算这两个整数最大公约数的子程序GCDP,子程序GCDP将计算结果用寄存器AX传回主程序,存放在GCD中。这道题的核心是求两个整数最大公约数的子程序GCDP,它用的是辗转相减法。当两个整数不相等时用大数减去小数,直到两个数相等为止。假定X、Y的值分别为32、24,处理过程见表4-24
4.2.6子程序设计例【4-34】寄存器法参数传递1274.2.6子程序设计
2.约定单元法约定单元法是把入口参数和出口参数都在约定的存储单元中。此法的优点是每个子程序要处理的数据或送出的结果都有独立的存储单元,编写程序时不易出错。缺点是要占用一定数量的存储单元4.2.6子程序设计2.约定单元法128例【4-35】用约定单元法重写例【4-34】,求两个整数最大公约数和最小公倍数【分析】数据段的变量X、Y、GCD、LCM是约定的存储单元,这些存储单元主、子程序都可使用。参数存放在X、Y中可由GCDP子程序使用,子程序处理结束后将结果存入GCD,主程序计算最小公倍数送LCM,计算X、Y最小公倍数的方法是:LCM=(X*Y)/GCD例【4-35】用约定单元法重写例【4-34】,求两个整数最大1294.2.6子程序设计
子程序也可以不带参数,只是完成某种功能。下面的程序是在屏幕上输出一个空行。NEWLINEPROC PUSHAX PUSHDX MOVAH,2 MOVDL,0DH INT21H
MOVDL,0AH INT21H POPDX POPAX RETNEWLINEENDP4.2.6子程序设计子程序也可以不带参数,只是完成1304.2.7常用的DOS和BIOS调用
我们在编制汇编源程序时,常常希望能从键盘输入字符或在显示器上显示出程序运行的结果。但由于计算机机种的不同、外设型号的差异,控制它们工作的程序也会有差异。如果每次都需要我们根据自己的工作环境来设计控制这些外设工作的程序,则必须要先搞清楚与之有关的设备、电路、接口等各方面的问题,既复杂,效率又低,也没有通用性4.2.7常用的DOS和BIOS调用我们在编制汇编源131正确的做法是:把这些控制过程编写成程序,作为操作系统的一部分事先放在系统盘上,用户在需要时只要按规定的格式设置好参数,直接调用即可。这种方式叫做利用操作系统的标准功能调用进行输入/输出。这样既便于操作系统对外设进行统一管理,也便于用户在编制程序时,不用考虑输入/输出的控制细节,提高了工作效率,使编制出来的程序更具有通用性正确的做法是:把这些控制过程编写成程序,作为操作系统的一部分1324.2.7常用的DOS和BIOS调用
DOS提供了系统功能调用,编号从0~57H,主要分为设备管理、文件管理、目录管理、及其它功能调用四大类在微机的只读存储器ROM中的程序,一部分是BASIC语言解释程序,另一部分是基本输入/输出系统BIOS。BIOS的主要功能是驱动系统中所配置的常用外设,如显示器、键盘、打印机、磁盘驱动器以及异步通信接口等,使程序员不必过多地关心这些设备具体的物理特性和逻辑结构细节(如外设寄存器地址、命令及状态格式等),从而能方便地控制各种输入/输出操作。与DOS的设备管理系统功能调用相比,使用BIOS能完成更复杂的输入/输出操作表4-25中列出了最常用的DOS和BIOS调用,更详细的内容要查阅有关的资料4.2.7常用的DOS和BIOS调用DOS提供了系133
4.3.180286相对8086增加的指令
1.立即数入栈指令格式:PUSHnnnn,功能:将字立即数nnnn压入堆栈2.将所有寄存器的内容压入堆栈指令格式:PUSHA,功能:将8个16位通用寄存器的内容按AX、CX、DX、BX、SP、BP、SI、DI的顺序入栈。
4.332位微处理器的寻址方式与指令系统
4.3.180286相对8086增加的指令4.3134
格式:POPA,功能:将从栈顶开始的8个存储字依次弹出堆栈并按DI、SI、BP、SP、BX、DX、CX、AX的顺序分别传送。
4.扩充的带符号整数乘法指令
格式1:IMULOPD,OPS格式2:IMULOPD,OPS1,OPS2其中,OPD是16位通用寄存器,格式1中的OPS可以是16位通用寄存器、字存储器、8或16位立即数;格式2中的OPS1可以是16位通用寄存器、字存储器,但不能为立即数;格式2中的OPS2只能为8或16位立即数3.弹出堆栈指令格式:POPA,功能:将从栈顶开始的8个存储字依次弹135功能:格式1是OPD乘以OPS,将乘积送OPD;格式2将OPS1乘以OPS2,乘积送OPD5.串输入指令格式1:[REP]INS目标串,DX
格式2:[REP]INSB格式3:[REP]INSW
功能:格式1是OPD乘以OPS,将乘积送OPD;格式2将OP136功能:以DX中的值为外设端口地址,从此端口输入一字符存入由ES:DI(或EDI)所指的存储器中,且根据方向标志DF和串操作的类型来修改DI(或EDI)的值,利用REP前缀可以连续输入串字符存入存储器中,直到CX(或ECX)减到零为止其中,格式1中的目标串为目标操作数的符号地址,该符号地址确定了目标操作数的属性(字或字节),DX寄存器中的内容为外设端口地址。当符号地址的属性为字节时,则该指令每次读入一个字节,DI内容加1或减1;当符号地址的属性为字时,则该指令每次读入一个字,DI内容加2或减2。格式2和格式3中已确定了串操作的类型,并且不带操作数,INSB为字节串输入,INSW为字串输入功能:以DX中的值为外设端口地址,从此端口输入一字符存入由E1374.3.180286相对8086增加的指令6.串输出指令格式1:[REP]OUTSDX,源串格式2:[REP]OUTSB格式3:[REP]OUTSW
功能:该指令与串输入指令的操作刚好相反,该指令中DS:SI(或ESI)指向源串,以DX中的值为外设端口地址。执行时根据DF的值和源串的类型自动修改SI(或ESI)的内容,利用REP前缀可以连续输出源串中的内容,直到CX(或ECX)减到零为止4.3.180286相对8086增加的指令6.串输出指1384.3.180286相对8086增加的指令
7.移位指令格式:SHLOPD,OPS(逻辑左移指令) SHROPD,OPS(逻辑右移指令) SALOPD,OPS(算术左移指令) SAROPD,OPS(算术右移指令) ROLOPD,OPS(不带进位的循环左移指令) ROROPD,OPS(不带进位的循环右移指令)4.3.180286相对8086增加的指令1394.3.180286相对8086增加的指令
RCLOPD,OPS(带进位的循环左移指令)RCROPD,OPS(带进位的循环右移指令)功能:这8条指令的格式和8086/8088的指令是相同的,区别是在8086/8088的指令系统中OPS只能是CL或1,在80286指令系统OPS中可以是任一8位立即数
4.3.180286相对8086增加的指令RCL1408.装入地址指针指令格式:LDSOPD,OPSLESOPD,OPS其中,OPD为16位或32位(80386)的通用寄存器,OPS为存储器。功能:将OPS所指的4或6(80386)个内存单元中的2个字或3个字先后送给OPD和相应的段寄存器中,LDS和LES指令分别隐含DS和ES段寄存器。
4.3.180286相对8086增加的指令8.装入地址指针指令4.3.180286相对8086增加的1414.3.280386的寻址方式和80386相对80286增加的指令
80386微处理器增加了8个32位的通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)和段寄存器FS和GS,不仅兼容80286的16位寻址方式,还新增了32位寻址方式。在这种寻址方式下,有效地址由表中的4个分量计算产生,见表4-26。当基址寄存器为ESP或EBP时默认的段寄存器为SS,其它方式下默认的段寄存器均为DS4.3.280386的寻址方式和80386相对802861424.3.280386的寻址方式和80386相对80286增加的指令4.3.280386的寻址方式和80386相对802861434.3.280386的寻址方式和80386相对80286增加的指令
1.直接寻址指令中给出的位移量就是有效地址2.基址寻址以8个32位的通用寄存器中的任意一个作为基址寄存器形成操作数的有效地址3.基址加位移寻址以8个32位的通用寄存器中的任意一个作为基址寄存器,再加上8、16或32位位移量形成操作数的有效地址
4.3.280386的寻址方式和80386相对802861444.3.280386的寻址方式和80386相对80286增加的指令
4.比例变址和位移寻址选取除ESP外7个通用寄存器中的任意一个作为变址寄存器,将其内容乘以比例常数,再加上8、16或32位位移量,形成操作数的有效地址5.基址加比例变址寻址以8个32位的通用寄存器中的任意一个作为基址寄存器,选取除ESP外7个通用寄存器中的任意一个作为变址寄存器,将变址寄存器的内容乘以比例常数,加上基址寄存器的内容形成操作数的有效地址
4.3.280386的寻址方式和80386相对802861456.基址加比例变址加位移寻址有效地址=基址+(变址╳比例常数)+位移量80386相对80286增加的指令有:1.堆栈操作指令格式1:PUSHOPS/POPOPD扩展功能:PUSH指令可将32位的OPS压入堆栈;POP指令可将栈顶的2个字弹出给32位的通用寄存器或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同欠款起诉费用3篇
- 农产品购买合同的交货条款3篇
- 工程设计施工合同范本的建设周期
- 土地使用权及房屋买卖合同3篇
- 买房授权委托书样本格式3篇
- 劳动合同解除公告3篇
- 学生社会实践承诺函3篇
- 合伙关系终止合同3篇
- 2025基于社区的阿尔茨海默病三级综合防治中国专家共识
- 煤炭加工厂的环境影响评价与环境保护措施考核试卷
- 2024-2025人教PEP版(三起)(2024)小学英语三年级上册(全册)教学设计及反思(完整版P84)
- 苏州市施工图无障碍设计专篇参考样式(试行)2025
- 2025-2030中国锻造(锻件)行业投资策略及规划建议研究研究报告
- 影城员工考核试题及答案
- 新药临床试验合作协议
- 设备部门级安全培训
- 网络舆情分析与应对策略
- 华为经营管理丛书华为的研发管理
- 2025-2030中国低压电器行业市场发展趋势与前景展望战略研究报告
- 个人装载机租赁协议书范本
- 2022年高级经济师《运输经济》试题真题及答案
评论
0/150
提交评论