汇编语言程序设计复习.ppt

上传人:牧羊曲112 文档编号:6388968 上传时间:2023-10-26 格式:PPT 页数:73 大小:331.32KB
返回 下载 相关 举报
汇编语言程序设计复习.ppt_第1页
第1页 / 共73页
汇编语言程序设计复习.ppt_第2页
第2页 / 共73页
汇编语言程序设计复习.ppt_第3页
第3页 / 共73页
汇编语言程序设计复习.ppt_第4页
第4页 / 共73页
汇编语言程序设计复习.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《汇编语言程序设计复习.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计复习.ppt(73页珍藏版)》请在三一办公上搜索。

1、1,封面,总复习,2,第一章 1.2数据表示,第一章 汇编语言基础知识1.2 数据表示 1.十进制数转换二进制数;整数部分不断除以2,记下每次得到的余数,直到商为零;余数倒排,即最后得到的余数排在最高位,第一个余数排在最低位。例如将十进制数13转换成二进制数:小数部分转换:乘2取整,顺序排列得到的整数。例如将0.8125转换成二进制数,3,数制转换 BCD 码,2.二进制数十六进制数互相转换1101001.101B=68.AH(68.5H)3.BCD 码(8421码、二十进制数)解决十进制数在计算机内部如何表示。BCD码 规定用四位二进制数表示一位十进制数。对多位十进制数,只要把每一位十进制数

2、分别表示为四位二进制数即可。压缩BCD码和非压缩BCD码,4,ASCII码,4.ASCII码解决字母、符号在计算机内部如何表示。基本ASCII码(标准ASCII码)用七位二进制数表示一个符号(共128个);书写:用两位十六进制数书写,如41H-A;种类:1)控制字符(前32个和最后一个):0D-回车,0A-换行;2)其他为打印字符(可显示字符);应记住的ASCII码:30H39H,41H,61H 扩展ASCII码用八位二进制数表示一个符号(共256个)。,5,有符号数表示方法,5.有符号数表示方法原码、反码、补码总结:1)正数的原码反码补码相同;负数的原码反码补码各不相同,但符号位都是1。2)

3、设字长为八位,原码反码的表数范围为-127+127,补码的表数范围为-128+127。3)已知某负数的补码,求该负数的真值,方法如下:符号位不动,其余位求反加一,得到的是该负数的原码;根据原码即可写出该负数的真值。例:X补=11111100B X原=10000011B+1=10000100B X=-0000100=-4,6,1.5 8086微处理器,1.5 8086微处理器 1.8086的功能结构总线接口单元、执行单元、指令预取队列 2.8086的寄存器组8086通用寄存器(1)AX-累加器。(2)BX-基地址寄存器。(3)CX-计数寄存器。(4)DX-数据寄存器。(5)SI-源变址寄存器。(

4、6)DI-目的变址寄存器。(7)BP-栈基地址寄存器。(8)SP-栈顶指针。专用寄存器 IP、标志寄存器FLAG(PSW),7,段寄存器使用规定,3.段寄存器使用规定,8,1.6 8086的寻址方式,1.6 8086的寻址方式 1.立即数寻址方式 2.寄存器寻址方式 3.存储器寻址方式寄存器间接寻址寄存器相对寻址基址变址寻址直接寻址基址变址相对寻址,9,mem操作数的各种形式,mem操作数的各种形式 2050H;VAR_ADDR BX;BP;si;di BX+disp;BP+disp;si+disp;di+disp dispBX;dispBP;dispSI;dispDI BX+SI;BX+DI

5、;BP+SI;BP+DI BXSI;BXDI;BX+SI+disp;BX+DI+disp;BP+SI+disp;BP+DI+disp;,10,第二章 2.1 MOV,第二章 8086的指令系统2.1 数据传送指令 2.1.1 通用数据传送指令 MOV/XCHG/XLAT MOV DEST,SRC 立即数只能作源操作数,且要与目的操作数匹配。两个操作数类型要匹配。如汇编程序无法确定操作类型,要加类型说明符。CS一般不能作目的操作数(用转移指令改变)。如果指令有两个操作数,不允许两个都是存储器数。所有“MOV”类指令均不影响标志。,11,PUSH/POP,2.1.2 堆栈操作指令 PUSH r16

6、/m16/seg POP r16/m16/seg 堆栈操作是字操作指令 在“POP”指令中,“POP CS”为非法指令。堆栈操作指令不影响标志。,12,地址传送指令,2.1.3 标志传送指令 LAHF/SAHF/PUSHF/POPF2.1.4 地址传送指令 LEA/LDS/LES LEA r16,mem 2.1.5 输入输出指令 IN/OUT,13,2.2 算术运算指令,2.2 算术运算指令 ADD/ADC/INC SUB/SBB/DEC/NEG/CMP加法指令对标志的影响:ADD和ADC指令对所有的6个状态标志都有影响,INC指令不影响CF,影响其他五个标志。学习加减法指令要会设置标志、使用

7、标志。加减法运算要注意OF和CF的意义不同,用法不同。注意NEG/CMP指令的用法。,14,MUL/IMUL,MUL/IMUL 指令指定的是乘数,被乘数是隐含的。如乘数类型为字节,则被乘数为AL,16位乘积用AX;如乘数类型为字,则被乘数为AX,32位乘积用DX,AX。影响 CF、OF 标志:如果乘积的高一半为零,或高一半为低一半的符号扩展,则 CF=OF=0,否则,CF=OF=1。对其他标志无定义。单操作数指令,涉及mem时,须指定类型。MUL BYTR PTRBX+SIMUL WORD PTRBX+SI,15,DIV/IDIV,DIV/IDIV 指令指定的是除数,被除数是隐含的;除数为字节

8、,则称为“字节除”,被除数使用AX;除数为字,称为“字除”,被除数使用DX AX。操作数的格式与乘法指令相同。指令对状态标志无定义。当产生除法溢出,CPU自动产生“0号”中断,运行相应中断服务程序。程序设计时,应避免产生除法溢出。,16,CBW/CWD,CBW/CWD 注意符号扩展涉及的对象是AL和AH以及AX和DX,与其他寄存器无关。用来为有符号数除法准备被除数(16位被除数和32位被除数)。为无符号数除法准备被除数,用“0扩展”。DAA/DAS/AAA/AAS/AAM/AAD如果做BCD码加法运算,ADD、ADC指令后应紧跟DAA指令,以保证结果正确。调整对象只能是AL寄存器(BCD码运算

9、只能使用以AL寄存器为目的操作数的8位数运算指令)。对OF标志无定义,设置其他标志,17,2.3 位操作指令,2.3 位操作指令 AND/OR/XOR/TEST/NOT操作数格式同加减法指令。设置CF=OF=0,影响SF、ZF、PF,对AF无定义。TEST不影响目的操作数,只根据运算结果设置标志。NOT reg/mem 不影响任何标志。,18,AND/OR/XOR/TEST/NOT,屏蔽若干位。(常用指令)AND AL,01H;屏蔽AL的D7D1,保留D0 AND AL,0FH;屏蔽AL高4位,保留低4位使若干位置1(常用指令)OR BL,0F0H;使BL高4位置1,低4位不变清除CF、OF

10、或 设置标志 AND AL,AL(AND AL,0FFH;OR BL,BL;);类似指令没有改变目的操作数,但使CF=OF=0,也 可能纯粹以设置其他标志(ZF)为目的。,19,用法/2,求反 NOT AL/NOT WORD PTRBX+DI 对指定位求反 XOR AL,0FH;AL高4位不变,低4位求反 XOR CL,55H;CL偶数位求反,奇数位不变 清除寄存器及CF(常用指令)XOR AX,AX/XOR BX,BX XOR BYTE PTRBX,BYTE PTRBX,20,用法/3,不改变操作数,测试操作数或操作数的指定位TEST AL,0FFH;由ZF标志判断AL是否为零;也可以用CM

11、P指令。TEST AL,01;由ZF标志判断AL的D0是否为零,;ZF=1,则AL.D0=0;ZF=0,则AL.D0=1AND AL,01;也可完成上述功能,但是改变了 目的操作数,21,移位指令,SHL/SAL/SHR/SAR标志设置 AF:对AF无定义;CF:按移入的值或为0或为1;根据移位后的结果设置SF、ZF、PF;OF:当移动一位时,移位后如果符号位发生变化,则OF=1,符号位不发生变化,则OF=0,移位次数大于一时,OF不定。操作数左移一位,相当于乘2(对有符号数同理,只要OF=0,结果就对)。操作数逻辑右移(SHR)一位,相当于无符号数除以2;操作数算术右移(SAR)一位,相当于

12、有符号数除以2。ROL/ROR/RCL/RCR 移位指令和循环移位指令结合,可实现32位数左移右移。,22,2.4 控制转移类指令,2.4 控制转移类指令 2.4.1 无条件转移指令JMP SHORT LABEL;JMP NEAR PTR LABEL;JMP r16;JMP WORD PTR memJMP(FAR PTR)LABELJMP FAR PTR mem(JMP DWORD PTR mem),23,条件转移指令/1,2.4.2 条件转移指令1.判断单个状态标志 助记符 标 志 说 明 JZ/JE ZF=1 结果为0;两数相等 JNZ/JNE ZF=0 不为0;不相等 JC/JB/JNA

13、E CF=1 加有进位;减有借位;其他 JNC/JNB/JAE CF=0 无进位;无借位;其他 JS SF=1 结果为负 JNS SF=0 结果为正 JP/JPE PF=1 结果的低8位含偶数个“1”JNP/JPO PF=0 结果的低8位含奇数个“1”JO OF=1 运算结果溢出 JNO OF=0 运算结果不溢出JCXZ(CX=0)串操作是否处理完所有,24,条件转移指令/2,2.比较无符号数高低(条件为一个标志或标志组合)助记符 标志 说 明 JB/JNAE/JC CF=1 低于/不高于不等于()JNB/JAE/JNC CF=0 不低于/高于或等于()JBE/JNA CF=1或ZF=1 低于

14、或等于/不高于()JNBE/JA CF=0且ZF=0 不低于不等于/高于()3.比较有符号数大小(条件为标志组合)助记符 标志 说 明 JL/JNGE SFOF 小于/不大于且不等于()JNL/JGE SFOF 不小于/大于或等于()JLE/JNG SFOF或ZF=1 小于或等于/不大于()JNLE/JG SFOF且ZF=0 不小于且不等于/大于(),25,循环控制指令,2.4.3 循环控制指令LOOP label;CX0,循环;否则退出LOOPZ/LOOPF label;CX0 且 ZF=1,循环;否则退出LOOPNZ/LOOPNE label;CX0 且 ZF=0,循环;否则退出2.4.4

15、 子程序调用及返回指令CALL near ptr label;段内直接调用CALL r16/word ptr m16;段内间接调用CALL far ptr label;段间直接调用CALL dword ptr mem;段间间接调用RET RET i16,26,中断控制指令/1,2.4.5 中断控制指令1.8086中断类型 外部中断 中断源来自CPU之外(两种)可屏蔽中断:响应与否,受IF标志控制。涉及指令:CLI STI非屏蔽中断:不受IF控制的中断源。(2#),27,中断控制指令/2,内部中断(4种)中断源为:程序执行过程中程序自身引发的事件除法错中断:除数为0或除法溢出。(0#)单步中断:

16、若单步标志TF=1,则每条指令执行 行后产生单步中断。(1#)溢出中断:执行中断指令INTO时,如OF=1,则 产生溢出中断。(4#)指令中断:执行中断调用指令INT n,产生指 令中段,类型号n=0255。,28,中断控制指令/3,2.8086的中断过程中断向量表进入中断服务程序返回断点CPU取类型号;外中断:中断源提供 内中断:指令提供、预定义类型号*4:对应向量在表中的首地址 保护断点:PSW、CS、IP依次入栈从向量表读取服务程序入口地址:IP低位字 CS高位字进入中断服务程序3.8086的中断指令 INT i8/INTO/IRET/CLI/STI,29,系统功能调用,2.4.6 系统

17、功能调用在AH中设置调用的功能号;在指定的寄存器中设置入口参数;执行INT 21H指令,调用功能子程序;1.单个字符的输出 AH=02;入口参数:DL=字符的ASCII码 2.字符串输出 AH=09;入口参数:DS:DX=字符串首地址 字符串必须以(24H)结尾 3.单个字符输入 AH=1;入口参数:无;出口参数:AL=字符ASCII码,30,2.5 串操作指令,2.5 串操作指令 1.串传送指令 MOVSB/MOVSW 2.串存储指令 STOSB/STOSW 3.串读取指令 LODSB/LODSW 4.串比较指令 CMPSB/CMPSW 5.串扫描指令 SCASB/SCASW 6.重复前缀指

18、令 REP REPZ/REPE 和REPNZ/REPNE 1)源数据串可以段跨越,目的串不可。2)DF=0,地址指针+1或+2,DF=1,指针-1或-2。3)注意重复前缀的使用。,31,2.6 处理机控制类指令,2.6 处理机控制类指令 1)NOP(同XCHG AX,AX)预留空间 删除指令 软件延时 2)段超越前缀指令 段寄存器:如 CS:,SS:3)指令封锁前缀指令LOCK(有相应引脚 LOCK):LOCK MUL 4)暂停指令 HLT 反复执行NOP,等待复位或中断信号。(慎用)5)交权指令ESC 将浮点指令交给浮点处理器。6)等待指令WAIT(有相应引脚信号 TEST)用于与8087同

19、步(5T)TEST=1 保持WAIT状态,TEST=0 退出WAIT状态。,32,第三章3.1/3.2,第三章 3.1/3.21.变量定义伪指令 1)字节定义伪指令DB 2)定义字单元伪指令DW 3)定义双字单元伪指令DD 4)其他数据定义伪指令 1)DF、DQ、DT 略 2)MASM6.0建议使用:BYTE/WORD/DWORD等 3)SBYTE/SWORD/SDWORD:有符号数专用。5)DUP/?/,33,2.基数控制伪指令,2.基数控制伪指令(RADIX)RADIX n;n取216内的任意整数。3.符号常数定义伪指令(EQU、=)EQU符号名 EQU 数值表达式符号名 EQU;5.X版

20、用双引号。“=”号伪指令,34,例题,.model small.stack.data bvar db 16 wvar dw 4*3 dvar dd 4294967295 db 1,2,3,4,5 abc db a,b,c msq db hello,13,10,$bbuf db 12 dup(month)dbuf dd 25 dup(?)B1DW BVAR;B1=0000HB2DW WVAR;B2=0001HB3DD WVAR;B3=0001H,B3+2=段地址,35,4.定位伪指令ORG,4.定位伪指令ORG(/EVEN/ALIGN)控制数据或指令的偏移地址。1)ORG 参数 使地址计数器指向

21、参数表达的偏移地址。ORG 100H;从0100H单元开始分配存储器。ORG$+10;$表示地址计数器的当前值,$+10;表示由当前地址向前跳过10个字节。2)EVEN;使它后面的数据或指令从偶地址开始。3)ALIGN n;使它后面的数据或指令从n的整数倍;地址开始(可被n整除)。n是2的乘方(2,4,8)且小于所在段的定位属性值。如“ALIGN 4”,使下一个地址开始于双字边界,36,例题,定位伪指令举例:DATA SEGMENTD01 DB 1,2,3;D01偏移地址为0,=0003HEVEN(ALIGN 2);$为0004HD02 DW 5;D02偏移地址为04H,=0006HALIGN

22、 4;最接近6的、可被4整除的数是8;=0008HD03 DD 6;D03的偏移地址为08H,=000CHORG+10H;000CH+0010H=001CH=001CHD04 DB abc;D04的偏移地址为001CH=001FHLEN EQU D04;LEN=001F001C=3;变量D04所占的字节数。,37,3.3程序段的定义和属性,3.3程序段的定义和属性1.简化段定义标准格式:.model small.stack.data.code.startup.exit 0end,38,2.完整段定义格式,2.完整段定义格式1).段定义伪指令段名 SEGMENT 定位 组合 段字 类别 段名 E

23、NDS定位属性:指定逻辑段的起始地址BYTE:为下一个可用的字节地址(xxxx xxxxB)WORD:为下一个可用的偶数地址(xxxx xxx0B)DWORD:下一个可被4整除的地址(xxxx xx00B)PARA:下一个可被16整除的地址(xxxx 0000B)PAGE:下一个可被256整除的地址(0000 0000B),39,指定段寄存器伪指令,2)指定段寄存器伪指令ASSUME 段寄存器:段名,段寄存器:段名 建立段寄存器与段之间的缺省关系,改变这种缺省关系可使用段跨越前缀。如 ASSUME CS:CODE,DS:DATAASSUME 段寄存器:NOTHING 对指令给出的段寄存器取消已

24、经指定的缺省关系。注意:ASSUME伪指令并不能为段寄存器赋值。,40,段组伪指令,3)段组伪指令组名 GROUP 段名,段名将多个同类但不同名的段合并为一个不超过64KB的物理段,并使用组名统一访问它。可理解为组合属性PUBLIC的补充。.MODEL SMALL具有下面语句的作用:dgroup GROUP _data,_bss,stack4)汇编结束伪指令 END 标号,41,表达式/运算符/操作符,第三章 表达式/运算符/操作符 1.数值表达式及运算符 常数、寄存器、变量及标号等用运算符连接起来即构成表达式,如细分,有算术表达式、逻辑表达式、关系表达式、地址表达式等,但是由于前三种表达式或

25、由它们构成的综合型表达式其结果都是数值,故一律算做数值表达式;如果一个表达式的结果从物理意义来说,代表存储器单元的地址,则称其为地址表达式。常见运算符分成五类:1)算术运算符:+、-、*、/、MOD 2)逻辑运算符:AND、OR、XOR、NOT 3)移位运算符:SHL、SHR 4)关系运算符:EQ、NE、GT、LT、GE、LE 5)高低分离符:HIGH、LOW、HIGHWORD、LOWWORD,42,地址操作符,2.地址操作符及地址表达式OFFSET 变量|标号;返回变量或标号的偏移地址SEG 变量|标号;返回变量或标号的段地址3.类型操作符(数值表达式)对变量或标号的类型属性进行操作。PTR

26、/THIS/LABEL/SHORT/TYPE/SIZEOF/LENGTHOF,43,例题/1,例 3.4 属性及应用.model small.stack.dataV_byte equ this byteV_word dw 3332h,3735hTarget dw 5 dup(20h)Crlf db 0dh,0ah,$Flag db 0N_point dw offset s_label.code.startup mov al,byte ptr v_word dec al mov v_byte,al;v_word=3331h,44,例题/2,N_label:cmp flag,1;flag单元=0

27、jz s_label inc flag;flag=1 jmp short n_labelS_label:cmp flag,2;flag=1 jz next inc flag;flag=2 jmp n_point;段内间接转移,等同于jmp s_labelNext:mov ax,type v_word;ax=0002h mov cx,lengthof target;5个数据项,cx=5 mov si,offset targetW_again:mov si,ax inc si inc si loop w_again;对target填充5个字:0002h,45,例题/3,mov cx,sizeof

28、target;cx=10 mov al,?mov di,offset targetB_again:mov di,al inc di loop b_again;对target填充10个?mov dx,offset v_word mov ah,9 int 21h;显示结果为1357?.exit 0 end,46,3.4 复杂数据结构,3.4 复杂数据结构 3.4.1 结构 结构类型说明、变量定义、引用 3.4.2 记录 记录类型说明、变量定义、引用 1.结构类型的说明结构名 STRUCT(5.0为STRUC);数据定义语句结构名 ENDS 结构中的元素可以是类型不同的变量。结构类型中所含的变量称为

29、结构字段。字段数量不限;字段可以有名或无名;可以有初值或无初值;可以独立存取。,47,结构变量的定义,2.结构变量的定义变量名 结构类型名 3.结构变量及其字段的引用 引用结构变量:结构变量名。引用结构变量的字段:结构变量名.字段名。使用结构类型名分配存储空间。类似“DB 100 DUP(?)”,48,例题/1,.model small.stack 256.dataperson struct number dw 0 pname db abcdefgh sex db 0 birthday db mm/dd/yyyyperson ends array person 100 dup();使用结构类型

30、名分配存储空间。,49,例题/2,.code.startupmov bx,offset arraymov ax,1sub si,simov cx,length arraymov dx,type arrayagain:mov bx+si.person.number,axinc axadd si,dxloop again.exit 0end,50,第四章基本汇编语言程序设计,第四章 基本汇编语言程序设计1.按程序结构分类:4.1 顺序程序设计 4.2 分支程序设计 4.3 循环程序设计 4.4 子程序设计2.按程序功能分类,51,4.2 分支程序设计,4.1 顺序程序设计4.2 分支程序设计1.单

31、分支类型,对同一个问题,根据选择的条件不同,单分支结构的流程图有两种画法,对应的程序也有两种编法。,52,2.双分支程序,2.双分支程序,有些双分支问题可以先假设一种情况,把双分支改成单分支问题。,53,3.多分支程序,3.多分支程序,54,4.3 循环程序设计,4.3 循环程序设计1.两种循环结构1)“先循环、后判断”结构相当于高级语言的“直到型”循环2)“先判断、后循环”结构相当于高级语言的“当型循环”,可实现0次循环。,55,2.循环程序设计,2.循环程序设计编写循环程序的关键在于循环的控制。循环次数已知:可用LOOP指令,CX计数。如教材例4.5。循环次数和ZF标志:可用LOOPZ、L

32、OOPNZ指令。如教材例4.6。循环次数未知:通常要采用比较指令和各类条件转移指令实现循环控制。,56,3.多重循环,3.多重循环:循环程序的嵌套构成多重(多层)循环。最常见的多重循环为两重循环。,57,4.4 子程序设计,4.4 子程序设计 把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序。使用子程序:简化源程序结构;提高编程效率。4.4.1 过程定义伪指令 4.4.2 子程序的参数传递 4.4.3 子程序的嵌套递归重入 4.4.4 子程序的应用,58,1 过程定义伪指令,1 过程定义伪指令 过程名 PROC NEAR|FAR 过程体 RET(RET N)

33、过程名 ENDP 一个完整的子程序,特别是供其他编程人员使用的子程序,必须附有一个详细说明:子程序名(过程名)子程序功能介绍子程序的入口参数子程序的出口参数子程序内使用的寄存器(存储单元)使用该子程序的范例,59,2.子程序的参数传递,2.子程序的参数传递 主程序和子程序之间通常需要传递参数:入口参数(输入参数):主程序提供给子程序出口参数(输出参数):子程序返回给主程序参数的形式:数据本身(传值)数据的地址(传址)传递的方法:寄存器 变量 堆栈,60,按程序功能分类,2.按程序功能分类多精度运算、查表(查代码、特定值等)、排序数据范围判断(09、AZ、az)字母大小写转换;字符串传送、比较等

34、操作求最小最大值、数据求和、统计字符个数ASCII、BCD及十六进制数据间的代码转换,61,二进制数转换成ASCII码,二进制数转换成ASCII码总结:1.二进制数转换成二进制形式的ASCII码 如习题4.16:01000101B30H 31H 30H2.二进制数转换成十六进制形式ASCII码 4位二进制数0-9,A-F3.二进制数转换成十进制形式的ASCII码(二进制数转换成BCD码)二进制数除以10,得到个位,再除以10,得到十位,也可参照习题4.21的方法,先得到最高位,然 后依次得到低位。,62,第五章 高级汇编语言程序设计,5.1 高级语言特性 5.1.1 条件控制伪指令 5.1.2

35、 循环控制伪指令 5.1.3 过程声明和调用伪指令,63,1.条件控制伪指令,1.条件控制伪指令.IF 条件表达式;条件为真,执行分支体1 分支体1.ELSEIF 条件表达式;前面IF及前面ELSEIF为假,分支体2;当前条件为真,执行分支体2.ELSE;前面IF及前面ELSEIF为假,分支体3;执行分支体3.ENDIF;分支结束,64,表达式中的操作符,表达式中的操作符:表5.1列出的操作符用于伪指令的条件表达式,第三章介绍的操作符用于数值表达式和地址表达式(构成指令的操作数),两类操作符不可混淆。操作符可分为:比较、逻辑运算和测试三类,其中测试又可分为:标志测试、位测试、寄存器测试、存储单

36、元测试(regmem)。,65,条件表达式中比较的两个数据可能是无符号数,也可能是有符号数,可分成以下情况:数据为变量:用DB、DW、DD等定义的变量一律作为无符号数,若需要进行有符号数比较,必须使用SBYTE、SWORD、SDWORD定义。数据为寄存器或存储单元:默认为无符号数,若需要进行有符号数比较,必须使用操作符SBYTE PTR或SWORD PTR指明类型。,66,2.循环控制伪指令/1,2.循环控制伪指令.WHILE和.ENDW:当型循环结构.REPEAT和.UNTIL/.REPEAT和.UNTILCXZ:直到型.BREAK:退出循环;.CONTINUE:转向循环体开始 格式 1.W

37、HILE 条件表达式;表达式为真,执行循环体 循环体;.ENDW;循环体结束,67,/2,格式 2.REPEAT;重复执行循环体 循环体.UNTIL 条件表达式;直到条件表达式为真 格式 3.REPEAT;重复执行循环体 循环体.UNTILCXZ 条件表达式;CXCX-1,直到CX=0;或条件表达式结果为真,68,3.带参数的过程定义、过程声明和过程调用伪指令,3.带参数的过程定义、过程声明和过程调用伪指令利用堆栈传递参数为常用方式,但传统的编程方法容易出错。MASM6.X扩充了PROC伪指令的功能,并新增了几条伪指令,使调用子程序具有高级语言的特性。过程声明 PROTO过程名 PROTO 语

38、言类型,参数名:类型,69,过程定义PROC,过程定义PROC 过程名 PROC 语言类型 USES 寄存器列表,形参1:类型,形参2:类型 LOCAL 参数表 过程名 ENDP过程调用伪指令 INVOKEINVOKE 过程名,实参1,实参2,,70,5.2宏结构程序设计,5.2宏结构程序设计 对常用的、具有独立功能的程序段,除了可定义为过程外,还可定义为宏结构或宏指令。宏指令提供了简化程序设计的另一种方法。通常与宏指令配合使用的伪指令还有重复汇编和条件汇编。宏指令、重复汇编和条件汇编统称宏结构。5.2.1 宏汇编 5.2.2 重复汇编 5.2.3 条件汇编,71,宏汇编,宏汇编宏定义宏名 M

39、ACRO 形参1,形参2,宏定义体;指令语句的组合 ENDM宏调用 宏名 实参1,实参2,宏展开 汇编时,用宏体取代宏调用,用实参取代形参,称为宏展开。,72,宏的参数,宏的参数 参数的形式灵活多变,可以是常数、变量、存储单元、指令操作码或它们的一部分,也可以是表达式,使用灵活多变的参数,同一个宏定义甚至可以执行不同的操作。几个宏操作符:替换操作符:用在宏体中。:字符串传递操作符:用在宏调用的实参中。!:转义操作符:用在宏调用的实参中。:表达式操作符:用在宏调用的实参中。,73,宏与子程序,宏与子程序相同点:简化源程序的设计和结构不同点:处理时间段不同。对目标程序的长度影响不同。对目标程序执行速度的影响不同。传递参数的方式不同;传递参数过程中如出现错误,错误的性质不同。(宏:语法;子程序:逻辑)通常,当程序段较短,要求较快执行时,用宏定义。当程序段较长,或为减小目标代码长度,用子程序。从程序的“易读性”考虑,子程序使用的更多。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号