《第4章16位和32位微处理器的指令系统及汇编语言编程ppt课件.ppt》由会员分享,可在线阅读,更多相关《第4章16位和32位微处理器的指令系统及汇编语言编程ppt课件.ppt(200页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章16位和32位微处理器的指令系统及汇编语言编程ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望教学目的和要求 掌握掌握1616位微处理器的寻址方式、指位微处理器的寻址方式、指令系统及汇编语言编程,了解令系统及汇编语言编程,了解3232位微处位微处理器的指令系统,并结合附录理器的指令系统,并结合附录A A能够掌能够掌握汇编语言编程的上机操作握汇编语言编程的上机操作教学重点n 1616位微处理器的寻址方式、指令系位微处理器的寻址方式、指令系统及汇编语言
2、编程(完整段模式)统及汇编语言编程(完整段模式)n 32 32位汇编语言编程(简化段模式)位汇编语言编程(简化段模式)教学难点n 微处理器的寻址方式与指令系统微处理器的寻址方式与指令系统 n 汇编语言编程的基本概念和编程方汇编语言编程的基本概念和编程方法法 4.0 入入 门门n 指令通常应提供的信息指令通常应提供的信息 1.做什么操作做什么操作 2.操作数从哪里来操作数从哪里来 3.操作结果放在哪里操作结果放在哪里 4.对对于于调调用用和和转转移移指指令令,还还要要涉涉及及转转移移或调用地址的提供方式或调用地址的提供方式指令系统的特点指令系统的特点n8086/8088的的指指令令系系统统完完全
3、全相相同同,都都能能在在x86系系列列CPU上运行上运行n指令的特点体现在:格式上、功能上和寻址方式指令的特点体现在:格式上、功能上和寻址方式可变长指令,如可变长指令,如CISC指令指令18字节字节寻址方式多样灵活,处理数据能力强寻址方式多样灵活,处理数据能力强有有重重复复指指令令和和运运算算指指令令,扩扩充充了了条条件件指指令令、移移位位/循环指令循环指令为为加加强强软软件件中中断断功功能能和和支支持持多多处处理理器器相相同同的的工工作作,增设了有关的指令,如增设了有关的指令,如test,wait等等指令的组成指令的组成n操作码操作码(OP)字段字段 标明计算机要执行什么操作标明计算机要执行
4、什么操作n操作数(操作数(operand)字段)字段 指出指令在执行过程中所需要的指出指令在执行过程中所需要的 操操作作数数(值值为为多多少少 或或者者放放在在什什么么地地方)方),以及操作结果送到哪里以及操作结果送到哪里指令的一般格式指令的一般格式n每条指令为字节的整数倍长(指令规整)每条指令为字节的整数倍长(指令规整)n操操作作数数字字段段可可以以有有零零个个、一一个个、二二个个或或三三个个操操作作数数,通通常常称称为为“一一地地址址”,“二二地地址址”或或“三地址三地址”指令。指令。操作码操作数。操作数示例示例1n无操作数指令(控制类指令),如:无操作数指令(控制类指令),如:HLTLO
5、CKCLCCLDCLIIRET 示例示例2单操作数指令,如:单操作数指令,如:加加1指令指令 INC AX 只只需需要要指指出出加加1的的操操作作数数,它它是是“一一地地址址”指令。指令。双操作数指令,如:双操作数指令,如:ADD AX,BX 大大多多数数运运算算型型指指令令都都是是双双操操作作数数指指令令,对对这这种种指指令令,有有的的机机器器(大大中中型型)使使用用“三三地地址址”指指令令:除除给给出出参参加加运运算算的的两两个个操操作作数数外外,还还要指出运算结果的存放地址要指出运算结果的存放地址操作指令操作指令n现现代代微微型型计计算算机机中中多多采采用用二二地地址址指指令令,两两个个
6、操操作作数数分分别别称称为为“源源操操作作数数”和和“目目的的操操作作数数”,指指令令执执行行后后,把把运运算算结结果果放放到到目目的的操作数的地址之中。操作数的地址之中。n指指令令的的操操作作码码在在机机器器中中的的表表示示比比较较简简单单,只只要要对对每每一一种种操操作作指指定定相相应应的的二二进进制制代代码码即即可可;而指令的操作数字段的情形就比较复杂。而指令的操作数字段的情形就比较复杂。编址方式编址方式n计计算算机机中中的的编编址址设设备备:Register、系系统统主主存存和和I/O设备设备n编址方式:编址方式:n三三个个零零地地址址空空间间:即即对对上上述述三三种种设设备备分分别别
7、进进行行编编址址,并并分分别别采采用用不不同同的的寻寻址址方方式式,很很复复杂杂,如:如:PC/XTn两两个个零零地地址址空空间间:对对通通用用寄寄存存器器R进进行行独独立立编编址址,主主存存和和I/O统统一一编编址址,地地址址码码的的地地址址高高端端用于用于I/O地址,地址,64K。n优点:简化了指令系统优点:简化了指令系统n缺点:指令执行过程复杂缺点:指令执行过程复杂编址方式n一一个个零零地地址址空空间间:三三种种设设备备统统一一编编址址,寄寄存存器、主存和器、主存和I/O对应低地址到高地址对应低地址到高地址n无零地址空间:指堆栈计算机无零地址空间:指堆栈计算机nCACHE和和BUFFER
8、是否需要编址?是否需要编址?寻址方式寻址方式n寻址方式的定义:寻址方式的定义:n指令中如何提供操作数或操作数地址的方式。指令中如何提供操作数或操作数地址的方式。n规定如何对地址字段作出解释以找到操作数。规定如何对地址字段作出解释以找到操作数。*程程序序转转移移时时需需提提供供转转移移地地址址,这这跟跟提提供供操操作作数数地地址址在在方法上没有本质区别,因此也归入寻址方式的范畴方法上没有本质区别,因此也归入寻址方式的范畴。指令系统设计指令系统设计n包括操作码字段和操作数字段包括操作码字段和操作数字段n一一个个指指令令系系统统能能够够提提供供哪哪些些寻寻址址方方式式,能能否否为为编编制制程程序序提
9、提供供方方便便,这这是是指指令令系系统统设设计计的的关键。关键。n需需要要说说明明的的是是,在在不不同同的的计计算算机机系系统统中中,寻寻址址方方式式的的名名称称和和分分类类并并不不统统一一,但但基基本本可可以以归结为以下几种方式或它们的变型或组合:归结为以下几种方式或它们的变型或组合:寻址方式寻址方式n固定寻址固定寻址n立即寻址(立即数寻址)立即寻址(立即数寻址)n寄存器寻址寄存器寻址n直接寻址直接寻址n间接寻址间接寻址n变址寻址变址寻址 4.1 80864.1 8086微处理器的寻址方式与指令系统微处理器的寻址方式与指令系统 4.1.1 寻址方式寻址方式 一条指令包含操作码和操作数两部分,
10、操作码指一条指令包含操作码和操作数两部分,操作码指出该指令要进行的操作,操作数指出该指令需要的出该指令要进行的操作,操作数指出该指令需要的操作数或操作数的地址。指令根据一定的方式,找操作数或操作数的地址。指令根据一定的方式,找到操作数或操作数的地址,然后取出操作数进行处到操作数或操作数的地址,然后取出操作数进行处理。寻找操作数地址的方式称为寻址方式理。寻找操作数地址的方式称为寻址方式 表4-1 8086/8088的6种寻址方式 寻址方式 汇编格式 操作数位置 寄存器寻址 R 寄存器 寄存器间接寻址 R 内存 变址寻址 XR 内存 基址变址寻址 XBR+IR 内存 直接寻址 EA 内存 立即寻址
11、 n 内存代码段 一、寄存器寻址 汇编格式:汇编格式:R R(R R是寄存器名)是寄存器名)说明:寻找的操作数在寄存器说明:寻找的操作数在寄存器R R中中 例【例【4-14-1】INC AXINC AX 二、寄存器间接寻址 汇编格式:汇编格式:RR(R R是寄存器名)是寄存器名)说说明明:寄寄存存器器R R的的内内容容是是操操作作数数在在内内存存的的EAEA,先先从从寄寄存存器器R R中中取取出出操操作作数数在在内内存存的的EAEA,再再根根据据EAEA和和某某段段寄寄存存器器生生成成PAPA寻寻找找操操作作数数,所所以以称称为为间间接接寻寻址址。能能用用来来作作间间接接寻寻址址的的寄寄存存器
12、器只只能能是是BXBX、SISI、DIDI或或BPBP四者之一四者之一 例【例【4-24-2】MOV AXMOV AX,SISI 二、寄存器间接寻址(续)表4-2 寄存器间接寻址方式物理地址生成 段 段寄存器 EA PA 数据段 DS BX(DS)左移4位+EA SI DI 附加数据段 ES BX(ES)左移4位+EA SI DI 堆栈段 SSBP(SS)左移4位+EA 三、变址寻址 汇编格式:汇编格式:XRXR(R R是寄存器名,是寄存器名,X X表示位移量,表示位移量,其值是用其值是用8 8位或位或1616位二进制补码表示的有符号数)。位二进制补码表示的有符号数)。说明:寄存器说明:寄存器
13、R R内容和位移量内容和位移量X X之和是操作数在内之和是操作数在内存的存的EAEA。先将寄存器。先将寄存器R R中的值和位移量中的值和位移量X X相加求出操相加求出操作数在内存的作数在内存的EAEA,再根据,再根据EAEA和某段寄存器生成和某段寄存器生成PAPA寻寻找操作数。能用来作变址寻址的寄存器只能是找操作数。能用来作变址寻址的寄存器只能是BXBX、SISI、DI DI 或或BPBP四者之一。四者之一。例【例【4-34-3】MOV BXMOV BX,2BX2BX 三、变址寻址(续)表4-3 变址寻址方式物理地址生成 段 段寄存器 EA PA 数据段 DS BX+X(DS)左移4位+EA
14、SI+X DI+X 附加数据段 ES BX+X(ES)左移4位+EA SI+X DI+X 堆栈段 SSBP+X(SS)左移4位+EA 四、基址变址寻址 汇编格式:汇编格式:XBR+IRXBR+IR或或XBRIRXBRIR(BRBR为基址寄存为基址寄存器,器,IRIR为变址寄存器,为变址寄存器,X X表示位移量,其值是用表示位移量,其值是用8 8位位或或1616位二进制补码表示的有符号数)位二进制补码表示的有符号数)说明:基址寄存器说明:基址寄存器BRBR、变址寄存器、变址寄存器IRIR的内容和位的内容和位移量移量X X三者之和是操作数在内存的三者之和是操作数在内存的EAEA。先将寄存器。先将寄
15、存器BRBR、IRIR中的值和位移量中的值和位移量X X相加求出操作数在内存的相加求出操作数在内存的EAEA,再,再根据根据EAEA和某段寄存器生成和某段寄存器生成PAPA寻找操作数。基址寄存寻找操作数。基址寄存器只能用器只能用BXBX或或BPBP,变址寄存器只能用,变址寄存器只能用SISI或或DIDI四、基址变址寻址(续)表4-3基址变址寻址方式物理地址生成段 段寄存器 EA PA 数据段 DS BX+SI+X(DS)左移4位+EA BX+DI+X 附加数据段 ES BX+SI+X(ES)左移4位+EA BX+DI+X 堆栈段 SSBP+SI+X(SS)左移4位+EA BP+DI+X五、立即
16、寻址 汇编格式:汇编格式:n n(n n是一个常数,称为立即数)是一个常数,称为立即数)说说明明:指指令令操操作作码码后后面面单单元元的的内内容容为为操操作作数数(常常数数n n),操操作作数数在在内内存存代代码码段段。立立即即寻寻址址所所提提供供的的操操作作数数直直接接放放在在指指令令中中,它它是是紧紧跟跟在在指指令令操操作作码码后后面面的的一一个个可可用用8 8位位或或1616位位二二进进制制补补码码表表示示的的有有符符号号数数。立立即寻址主要用来给寄存器或内存单元赋初值即寻址主要用来给寄存器或内存单元赋初值 例【例【4-64-6】MOV AXMOV AX,2 2是将立即数是将立即数2 2
17、送到送到AXAX中中六、直接寻址 汇汇编编格格式式:含含有有变变量量的的地地址址表表达达式式或或段段寄存器寄存器:EA:EA 说说明明:在在一一条条指指令令中中直直接接给给出出某某一一内内存存单单元元的的EAEA,这这个个EAEA经经过过汇汇编编后后放放在在这这条条指指令令的下一个字单元。的下一个字单元。例例【4-74-7】MOV MOV AXAX,20002000是是将将数数据据段段中中EAEA为为20002000的内存单元中的内容送到的内存单元中的内容送到AXAX中。中。4.1.3 80868086指令系统指令系统 一、数据传送指令一、数据传送指令表4-6数据传送指令 类别 操作码 格式
18、一般数据传送指令 MOV MOV OPD,OPS XCHG XCHG OPD,OPS XLAT XLAT OPS或XLAT 4.1.3 80868086指令系统指令系统 一、数据传送指令一、数据传送指令(续续1)1)表4-6数据传送指令 类别 操作码 格式 堆栈操作指令 PUSH PUSH OPS POP POP OPD 4.1.3 80868086指令系统指令系统 一、数据传送指令一、数据传送指令(续续2)2)表4-6数据传送指令 类别 操作码 格式 标志寄存器传送指令 PUSHF PUSHF POPFPOPF LAHF LAHF SAHF SAHF 4.1.3 80868086指令系统指令
19、系统 一、数据传送指令一、数据传送指令(续续3)3)表4-6数据传送指令 类别 操作码 格式 地址传送指令 LEA LEA OPD,OPS LDS LDS OPD,OPS LES LES OPD,OPS 输入输出指令 ININ OPD,OPS OUTOUT OPD,OPS 4.1.3 80868086指令系统指令系统 二、算术运算指令二、算术运算指令表4-7 算术运算指令 类别 操作码 格式 加法指令 ADDADD OPD,OPS ADCADC OPD,OPS INCINC OPD 4.1.3 80868086指令系统指令系统 二、算术运算指令二、算术运算指令(续续1)1)表4-7 算术运算指
20、令 类别 操作码 格式 减法指令 SUBSUB OPD,OPS SBBSBB OPD,OPS DECDEC OPD NEGNEG OPD CMPCMP OPD,OPS 4.1.3 80868086指令系统指令系统 二、算术运算指令二、算术运算指令(续续2)2)表4-7 算术运算指令 类别 操作码 格式 乘法指令 MULMUL OPS IMULIMUL OPS 除法指令 DIVDIV OPS IDIVIDIV OPS 4.1.3 80868086指令系统指令系统 三、位操作指令三、位操作指令 表4-8 位操作指令类别 操作码 格式 逻辑运算指令 NOTNOT OPDANDAND OPD,OPST
21、ESTTEST OPD,OPSOROR OPD,OPS XORXOR OPD,OPS 4.1.3 80868086指令系统指令系统 三、位操作指令三、位操作指令(续续1)1)表4-8 位操作指令类别 操作码 格式 算术移位指令 SALSAL OPD,1或SAL OPD,CL SARSAR OPD,1或SAR OPD,CL 逻辑移位指令 SHLSHL OPD,1或SHL OPD,CL SHRSHR OPD,1或SHR OPD,CL 4.1.3 80868086指令系统指令系统 三、位操作指令三、位操作指令(续续2)2)表4-8 位操作指令类别 操作码 格式 不带进位的循环移位指令 ROLROL
22、OPD,1或ROL OPD,CL RORROR OPD,1或ROROPD,CL 带进位的循环移位指令 RCLRCL OPD,1或RCL OPD,CL RCRRCR OPD,1或RCR OPD,CL 4.1.3 80868086指令系统指令系统 四、转移指令四、转移指令 转移指令分条件转移指令和无条件转移转移指令分条件转移指令和无条件转移指令两大类,其特点是改变程序的执行顺序指令两大类,其特点是改变程序的执行顺序(即改变指令指针(即改变指令指针IPIP的值),但不改变状态的值),但不改变状态标志位的状态。条件转移指令根据条件标志标志位的状态。条件转移指令根据条件标志的状态判断是否转移。无条件转移
23、指令则不的状态判断是否转移。无条件转移指令则不作任何判断,无条件地转移到指令中指明的作任何判断,无条件地转移到指令中指明的目的地址处执行。转移指令共有目的地址处执行。转移指令共有1919条,具体条,具体见表见表4-94-94.1.3 80868086指令系统指令系统 四、转移指令四、转移指令 表4-9 转移指令 类别 指令名称 操作码 转移条件 简单条件转移 相等/等于0转 JE/JZ ZF=1 不相等/不等于0转 JNE/JNZ ZF=0 为负转 JS SF=1 为正转 JNS SF=0 溢出转 JO OF=1 未溢出转 JNO OF=04.1.3 80868086指令系统指令系统 四、转移
24、指令四、转移指令(续续1)1)表4-9 转移指令 类别 指令名称 操作码 转移条件 简单条件转移 进位位为1转 JC CF=1 进位位为0转 JNC CF=0偶转移 JP/JPE PF=1 奇转移 JNP/JPO PF=04.1.3 80868086指令系统指令系统 四、转移指令四、转移指令(续续2)2)表4-9 转移指令 类别 指令名称 操作码 转移条件 无符号数条件转移 高于转移 JA/JNBE CF=0且ZF=0 高于或等于转移 JAE/JNB CF=0或ZF=1 低于转移 JB/JNAE CF=1且ZF=0 低于或等于转移 JBE/JNA CF=1或ZF=1 4.1.3 8086808
25、6指令系统指令系统 四、转移指令四、转移指令(续续3)3)表4-9 转移指令 类别 指令名称 操作码 转移条件 带符号数条件转移 大于转移 JG/JNLE SF=OF且ZF=0 大于或等于转移 JGE/JNL SF=OF且ZF=1 小于转移 JL/JNGE SFOF且ZF=0 小于或等于转移 JLE/JNG SFOF且ZF=1 4.1.3 80868086指令系统指令系统 四、转移指令四、转移指令(续续4)4)表4-9 转移指令 类别 操作码 转移条件 无条件转移 JMP无4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令 为了方便地实现字符串操作,为了方便地实
26、现字符串操作,8086/80888086/8088提供了提供了字符串操作指令。只要按规定设置好初始条件,选字符串操作指令。只要按规定设置好初始条件,选用正确的字符串操作指令,就可完成规定的操作,用正确的字符串操作指令,就可完成规定的操作,这些指令的前面可加重复前缀,能在条件满足的情这些指令的前面可加重复前缀,能在条件满足的情况下反复执行,而不用考虑指针如何移动、循环次况下反复执行,而不用考虑指针如何移动、循环次数如何控制等问题,从而简化了程序设计。字符串数如何控制等问题,从而简化了程序设计。字符串操作指令在使用格式和使用方法上有许多类似的地操作指令在使用格式和使用方法上有许多类似的地方,它们隐
27、含使用的寄存器、标志位和符号见表方,它们隐含使用的寄存器、标志位和符号见表4-4-10104.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续1)1)表4-10 字符串操作指令使用中的一些隐含约定 源串指示器 DS:SI 目的串指示器 ES:DI 重复次数计数器 CXSCAS指令的搜索值 在AL/AX中 LODS指令的目的地址 AL/AX 4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续2)2)表4-10 字符串操作指令使用中的一些隐含约定 STOS指令的源地址 AL/AX 传送方向 DF=0,SI、DI自动增量(用C
28、LD指令实现)DF=1,SI、DI自动减量(用STD指令实现)SB不带操作数的字节操作指令 SW不带操作数的字操作指令 4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续3)3)系统规定:源串一定要在当前数据段中,系统规定:源串一定要在当前数据段中,目的串只允许在当前附加数据段中。所有的串目的串只允许在当前附加数据段中。所有的串操作指令均以寄存器间接方式访问源串或目的操作指令均以寄存器间接方式访问源串或目的串中的各元素,并自动修改串中的各元素,并自动修改SISI和和DIDI的内容。若的内容。若DF=0DF=0,则每次操作后,则每次操作后,SISI、DIDI
29、自动增量(字节自动增量(字节操作加操作加1 1、字操作加、字操作加2 2);若);若DF=1DF=1,则每次操作,则每次操作后,后,SISI、DIDI自动减量(字节操作减自动减量(字节操作减1 1、字操作、字操作减减2 2),使之指向下一个元素),使之指向下一个元素 4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续4)4)当当指指令令带带有有重重复复前前缀缀时时,则则指指令令重重复复执执行行,每每执执行行一一次次,就就检检查查一一次次重重复复条条件件是是否否成成立立,如如成成立立,则则继继续续重重复复;否否则则终止重复,执行后续指令终止重复,执行后续指令
30、 REP REP:重复,即无条件重复:重复,即无条件重复CXCX寄存器中指定的次数寄存器中指定的次数 REPE/REPZREPE/REPZ:相相等等/为为0 0时时重重复复,即即(CXCX)00(重重复复次次数数还还未未为为0 0)同同时时ZF=1ZF=1(比比较较时时相相等等)时时重重复复,否否则则,重重复复终终止。止。REPNE/REPNZ REPNE/REPNZ:不相等:不相等/不为不为0 0时重复,即(时重复,即(CXCX)00(重复次数还未为(重复次数还未为0 0)同时)同时ZF=0ZF=0时重复,否则,重复终止时重复,否则,重复终止 4.1.3 80868086指令系统指令系统 五
31、、字符串操作指令五、字符串操作指令(续续5)5)表4-11字符串操作指令 类别 操作码 格式 字符串传送 MOVSMOVS OPD,OPS MOVSBMOVSB OVSWMOVSW4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续6)6)表4-11字符串操作指令 类别 操作码 格式 字符串比较 CMPSCMPS OPD,OPS CMPSB CMPSB CMPSWCMPSW4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续7)7)表4-11字符串操作指令 类别 操作码 格式 字符串搜索 SCASSCAS OPD SCAS
32、B SCASB SCASWSCASW4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续8)8)表4-11字符串操作指令 类别 操作码 格式 字符串装入 LODSLODS OPS LODSB LODSB LODSWLODSW4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续9)9)表4-11字符串操作指令 类别 操作码 格式 字符串存储 STOSSTOS OPD STOSB STOSB STOSWSTOSW4.1.3 80868086指令系统指令系统 五、字符串操作指令五、字符串操作指令(续续10)10)表4-11字符串
33、操作指令 类别 操作码 功能 重复前缀 REP 用于字符串传送和字符串装入指令前 REPE/REPZ 用于字符串比较指令、字符串搜索指令前 REPNE/REPNZ 用于字符串比较指令、字符串搜索指令前 4.1.3 80868086指令系统指令系统 六、六、处理机控制指令处理机控制指令 表4-12处理机控制指令-标志位控制指令 格式功能 STC 置进位标志,1CF CLC 清除进位标志,0CF CMC 进位标志取反,CF求反CF STD 置方向标志,1DF CLD 清除方向标志,0DF 4.1.3 80868086指令系统指令系统 六、六、处理机控制指令处理机控制指令(续续1)1)表4-12处理
34、机控制指令-标志位控制指令(续1)格式功能 STI 置中断标志,1IF CLI 清除中断标志,0IF 4.1.3 80868086指令系统指令系统 六、六、处理机控制指令处理机控制指令(续续2)2)表4-12处理机控制指令CPU状态控制指令 格式功能 HLT 处理器暂停 ESC OPD,OPS 交权指令,将浮点指令交给浮点处理器执行 WAIT 等待指令,8086进入等待状态 LOCK 使CPU在执行该指令期间封锁总线,禁止其他的总线主设备占用总线 NOP 空操作 4.2 16位汇编语言编程位汇编语言编程 4.2.1 4.2.1 伪伪指令指令 在汇编源程序中使用一些固定格式的约定符号,在汇编源程
35、序中使用一些固定格式的约定符号,这些符号主要用来告诉汇编程序如何工作,这就是这些符号主要用来告诉汇编程序如何工作,这就是汇编控制命令,也称伪指令。伪指令和机器指令汇编控制命令,也称伪指令。伪指令和机器指令(在(在4.1.34.1.3中所讲的指令)最大的区别有中所讲的指令)最大的区别有2 2点点 伪指令是在汇编源程序汇编期间,被汇编伪指令是在汇编源程序汇编期间,被汇编程序识别并解释。主要是为变量申请内存空间、建程序识别并解释。主要是为变量申请内存空间、建立堆栈、告诉汇编程序从何处开始汇编以及到何处立堆栈、告诉汇编程序从何处开始汇编以及到何处结束等。而可执行指令是在程序执行期间被结束等。而可执行指
36、令是在程序执行期间被CPUCPU译译码并执行的码并执行的 4.2.1 伪指令伪指令 汇编结束后伪指令就完成任务,在程序执行汇编结束后伪指令就完成任务,在程序执行期间不再考虑它,因此伪指令不翻译成目标码。而期间不再考虑它,因此伪指令不翻译成目标码。而可执行指令经汇编程序汇编后,变成机器可以识别可执行指令经汇编程序汇编后,变成机器可以识别并执行的目标码并执行的目标码 一、数据定义伪指令一、数据定义伪指令数据定义伪指令见表数据定义伪指令见表4-13 4-13 格格式式:变变量量名名 数数据据定定义义伪伪指指令令 表表达达式式,功能:定义数据存储区,其类型由所使用的数据定功能:定义数据存储区,其类型由
37、所使用的数据定义伪指令指定义伪指令指定 4.2.1 伪指令伪指令表4-13 数据定义伪指令 伪指令 所申请的字节数 DB1DW2DD4DF6DQ8DT104.2.1 伪指令伪指令二、符号定义伪指令二、符号定义伪指令 等价伪指令等价伪指令格式格式:符号名符号名 EQU 表达式表达式功功能能:用用来来为为常常量量、表表达达式式及及其其他他各各种种符符号号定定义义一一个个等等价价的的符符号号名名,但但它它并并不不申申请请分分配配存存储储单单元。元。如果一个常量在程序中使用非常频繁可以用如果一个常量在程序中使用非常频繁可以用一个符号来表示它,这就是符号常量。如假定学一个符号来表示它,这就是符号常量。如
38、假定学生成绩处理程序中经常使用某班的人数用等价伪生成绩处理程序中经常使用某班的人数用等价伪指令定义为:指令定义为:N EQU 40。指令。指令MOV AX,N在在汇编时用汇编时用40代替代替N变成变成MOV AX,404.2.1 伪指令伪指令 等号伪指令等号伪指令 格式:符号名格式:符号名=表达式表达式 功功能能:该该语语句句的的功功能能和和EQUEQU相相似似,不不同同的的是是等等号号伪伪指指令令能能对对所所定定义义的的符符号号名名再再重重新新定定义义,当当使使用用等等号号语语句句连连续续定定义义同同一一符号名时,以最后一次定义的值为准符号名时,以最后一次定义的值为准 4.2.1 伪指令伪指
39、令 三、段定义伪指令三、段定义伪指令 格式:格式:段段名名 SEGMENT 定定位位方方式式组组合合方方式式 类类别别 段名段名 ENDS 功功能能:定定义义了了一一个个以以SEGMENT伪伪指指令令开开始始,以以ENDS伪指令结束,以段名命名的存储段伪指令结束,以段名命名的存储段 4.2.1 伪指令伪指令说明:说明:段段名名是是程程序序员员为为该该段段所所起起的的名名字字,用用来来指指出出为为该该段段分分配配的的存存储储区区起起始始位位置置。一一个个程程序序模模块块可可以以定定义义为为若若干干段段,段段名名可可以以各各不不相相同同,也也可可以以重重复复,汇汇编编程程序序将将一一个个程程序序中
40、中的的同同名名段段处处理理成成一一个个段段。段段的的定定义义可可以以嵌嵌套套,但但不不能能交交叉叉。定定位位方方式式、组组合合方方式式和和类类别别是是可可选选项项,可可省省略略。数数据据段段(或或附附加加数数据据段段)中中一一般般定定义义常常量量和和变变量量,是是为为程程序序的的代代码码段段提提供供数数据据和和保保存存计计算算结结果果的的。它它的的一一般般格式如下:格式如下:DATA SEGMENT 常量或变量定义常量或变量定义 DATA ENDS 4.2.1 伪指令伪指令 堆堆栈栈段段为为程程序序定定义义堆堆栈栈,堆堆栈栈的的大大小小依依赖赖于于你你所所编编写写的的程程序序对对堆堆栈栈的的使
41、使用用程程度度。如如果果你你省省略略堆堆栈栈段段定定义义,当当你你的的程程序序使使用用堆堆栈栈时时,系系统统会会自自动动建建立立堆堆栈栈。并并且且在在 汇汇 编编 时时 会会 出出 现现 一一 个个 警警 告告:“LINK:warning L4021:no stack segment”。对于一般的小程序可省略堆栈段定义对于一般的小程序可省略堆栈段定义堆栈段的一般格式如下:堆栈段的一般格式如下:STACK SEGMENT STACKDB n DUP(0)STACK ENDS 其中其中n是堆栈的长度,由程序员根据需要自定是堆栈的长度,由程序员根据需要自定4.2.1 伪指令伪指令 代代码码段段是是程
42、程序序对对数数据据进进行行处处理理的的部部分分。在在一一个个程程序序中中,数数据据段段、堆堆栈栈段段和和附附加数据段都可以省略,代码段不能省略加数据段都可以省略,代码段不能省略代码段的一般格式如下:代码段的一般格式如下:CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:EDATA 假定伪指令假定伪指令 START:可执行语句可执行语句 MOV AH,4CH INT 21H CODE ENDS END START 程序结束伪指令程序结束伪指令 五、置汇编地址计数器伪指令五、置汇编地址计数器伪指令ORGORG 汇汇编编地地址址计计数数器器用用符符号号“
43、$”表表示示,它它用用来来记记录录正正在在被被汇汇编编程程序序汇汇编编的的语语句句地地址址,也也就就是是说说其其内内容容标标出出了了汇汇编编程程序序当当前前的的工工作作位位置置。在在一一个个源源程程序序中中,往往往往包包含含了了多多个个段段,汇汇编编程程序序在在将将该该源源程程序序汇汇编编成成目目标标程程序序时时,每每遇遇到到一一个个新新段段,就就为为该该段段分分配配一一个个初初值值为为0的的汇汇编编地地址址计计数数器器,然然后后,再再对对该该段段中中的的语语句句汇汇编编。在在汇汇编编过过程程中中,对对凡凡是是需需要要申申请请分分配配存存储储单单元元的的语语句句和和产产生生目目标标代代码码的的
44、语语句句,汇汇编编地地址址计计数数器器则则按按该该语语句句目目标标代代码码的的长长度度增增值值。因因此此,段段内内定定义义的的所所有有标标号号和和变变量量的的偏偏移移地地址址就就是是当当前前汇汇编编地地址址计计数数器器的的值值。汇汇编编地地址址计计数数器器符符号号“$”可可出出现现在在表达式中表达式中 4.2.1 伪指令伪指令 汇汇编编地地址址计计数数器器的的值值可可以以用用伪伪指指令令ORG进进行设置。行设置。格式:格式:ORG 数值表达式数值表达式 功功能能:将将汇汇编编地地址址计计数数器器设设置置成成数数值值表表达达式式的的值值。其其中中,数数值值表表达达式式的的值值应应为为非非负负的的
45、整数,其值在整数,其值在065535之间之间 例【例【4-15】汇编地址计数器和伪汇编地址计数器和伪指令指令ORG举例举例DATA SEGMENTORG 4BUF DB readmeORG$+5NUM DB-2DATA ENDS4.2.2 4.2.2 汇编语言中的常量、变量及标号汇编语言中的常量、变量及标号 一、常量一、常量 常常 量量 是是 指指 在在 程程 序序 执执 行行 期期 间间 不不 变变 的的 量量。在在8086/80888086/8088宏宏汇汇编编语语言言中中可可使使用用的的常常量量见见表表4-144-14。常常量量主主要要用用于于伪伪指指令令中中给给变变量量赋赋初初值值,或
46、或者者用用作作机机器器指指令令语语句句中中的的立立即即操操作作数数、变变址址寻寻址址和和基基址址变变址址寻寻址址中中的的位位移移量量。常常量量一一般般可可以以直直接接以以数数值值形形式式出出现现在在汇汇编编语语句句中中,这这种种常常量量称称数数值值常常量量。但但对对经经常常使使用用的的数数值值常常量量,可可以以事事先先为为它它定定义义一一个个名名字字,然然后后在在语语句句中中用用名名字字来来表表示示该该常常量量,这这种种常常量量称称符符号号常常量量。伪伪指指令令EQUEQU和和等等号号“=”“=”可可用用来实现将数值常量定义成符号常量来实现将数值常量定义成符号常量4.2.2 4.2.2 汇编语
47、言中的常量、变量及标号汇编语言中的常量、变量及标号表4-14 8086/8088宏汇编语言中所使用的常量 常量分类 格式 X的取值 举例 二进制常量 XXXB 0或1 01000001B 八进制常量 XXXO XXXQ 07 1234Q 十进制常量 XXX XXXD 09 123,123D 十六进制常量 XXXH 09 AF 1234H,0A12FH 字符常量 XXXXXX ASCII字符 0123readme 4.2.2 4.2.2 汇编语言中的常量、变量及标号汇编语言中的常量、变量及标号二、变量二、变量在在汇汇编编语语言言中中,变变量量是是一一个个数数据据单单元元的的名名字字,即即数据存放
48、地址的符号表示。它有数据存放地址的符号表示。它有3个属性:个属性:变变量量的的段段属属性性。指指变变量量所所在在段段的的首首地地址址,当当需需要要访访问问该该变变量量时时,它它所所在在段段的的首首地地址址一一定定要要在在某一段寄存器中某一段寄存器中 变变量量的的偏偏移移属属性性。指指变变量量所所在在段段的的首首地地址址到到变变量量所所在在的的存存储储单单元元之之间间的的距距离离,用用字字节节数数表表示示。它它表表示示变变量量在在某某段段的的相相对对位位置置,也也就就是是我我们们所所说说的的偏移地址(或有效地址)偏移地址(或有效地址)EA 变量的类型。指存取某变量所需要的字节数变量的类型。指存取
49、某变量所需要的字节数 变量的定义格式如下:变量的定义格式如下:变量名变量名 数据定义伪指令数据定义伪指令 表达式表达式,汇汇编编语语言言中中的的符符号号常常量量名名、变变量量名名、段段名名、过过程程名名、标标号号都都称称为为标标识识符符。标标识识符符是是由由字字母母、数数字字(09)、特特殊殊字字符符(?、.、_、$)等等组组成成的的字字符符串串,但但该该字字符符串串不不能能以以数数字字或或下下划划线线_作作为为开开始始字字符符。标标识识符符最最大大长长度度不不能能超超过过31个个字字符符,并并且且汇汇编编语语言言对对字字母母的的大大写写和和小小写写没没有有统统一一要要求求,也也就就是是说说,
50、汇汇编编语语言言对对标标识识符符中中字字母母的的大大写写和和小小写写不不作作区区分分,如如ABC、aBc、Abc和和aBC都都认认为为是是同同一一个个标标识识符符。注注意意不不能能使使用用汇汇编编语语言言的的保保留留字字如算术运算指令名如算术运算指令名ADD、SUB等做标识符等做标识符:数值表达式数值表达式 ASCIIASCII字字符符串串(只只有有用用DBDB定定义义变变量量时,才允许字符串长度超过时,才允许字符串长度超过2 2个字符)个字符)地地址址表表达达式式。如如果果该该地地址址表表达达式式为为一一变变量量(或或标标号号)名名,用用DWDW伪伪指指令令是是取取它它的的偏偏移移地地址址来