h3-567控制结构和宏课件.ppt

上传人(卖家):晟晟文业 文档编号:4690211 上传时间:2023-01-01 格式:PPT 页数:36 大小:109.02KB
下载 相关 举报
h3-567控制结构和宏课件.ppt_第1页
第1页 / 共36页
h3-567控制结构和宏课件.ppt_第2页
第2页 / 共36页
h3-567控制结构和宏课件.ppt_第3页
第3页 / 共36页
h3-567控制结构和宏课件.ppt_第4页
第4页 / 共36页
h3-567控制结构和宏课件.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、13 35 5 控制汇编语言程序语句控制汇编语言程序语句 MASM6.X版本提供了控制程序流程的三种汇编语句:IF语句 DOWHILE语句 REPEAT UNTIL语句其表达式常用的运算符见表3.9(P96)。该类伪指令的书写格式与高级语言的书写方式相类似,汇编程序在汇编时会自动增加转移指令和相应的标号。理解并掌握该知识,对将来学习编译原理课程也有一定的帮助。2351 IF语句语句 对IF后面的表达式进行计算后再作为条件进行判断。一般形式IF语句:嵌套形式IF语句:格式1:IF表达式 格式2:IF表达式 语句l 语句1 ELSE ELSEIF表达式 语句2 语句2 ENDIF ELSE 语句n

2、 ENDIF3 例3.52 编程实现将键盘输入的字符、数字转换成十六进制数。MODEL TINY CODE STARTUP MOV AH,1 ;键盘输入 INT 21H IF ALA&ALF ;4146H SUB AL,37H ELSE IF ALa&ALf ;61 66H SUB AL,57H ELSE SUB AL,30H ;30 39H ENDIF EXIT END 4 352 DOWHILE语句语句 对WHILE、BREAK、CONTINUE后面的表达式进行计算后再作为条件进行判断。格式1:WHILE 表达式 语句 ENDW WHILE语句是一种先判断后执行的循环语句。其控制流程是,先

3、计算表达式的值并判断。5 格式2:BREAK IF表达式 控制程序当表达式条件成立时,退出本层循环体。可用于在程序中设置断点。例3.53 BREAK IF EAX=0 ;当测试到EAX=0,则终止循环。6 格式3:CONTINUE IF表达式 控制程序当表达式条件成立时,循环继续进行。否则跳过剩余语句到与它最近的循环条件判断语句。在BREAK、CONTINUE后面的IF表达式不需要ENDIF来结束。与C语言的相应功能一致。例3.54 CONTINUE IF AL=6 ;测试到AL=6时,继续进行循环。7 例3.55 编程实现从BUF缓冲区10个字符中寻找$字符,如找到显示$字符,否则显示0。I

4、F AL$MOV DL,AL ELSE MOV DL,0 ENDIF MOV AH,2 ;显示字符 INT 21H EXIT END(用REPNZ SCASB指令)MODEL SMALL DATA BUF DB ABCDEFGI$K CODE STARTUP MOV CX,10 LEA BX,BUF MOV AL,0 WHILE AL!$MOV AL,BX INC BX DEC CX BREAK IF CX0 ENDW8 353 REPEATUNTIL语句语句 对 UNTIL后面的表达式进行计算后再作为条件进行判断。循环至少执行一次。格式:REPEAT 语句 UNTIL 表达式 例3.56 编

5、程实现将BUF缓冲区100个字节数据传到BLOCK缓冲区。MODEL SMALL DATA BUF DB 10,20,88 ;(100个字节)BLOCK DB 100DUP(?)CODE STARTUP MOV CX,100 LEA BX,BUF LEA SI,BLOCK REPEAT MOV AL,BX MOV SI,AL INC SI INC BX UNTILCXZ ;CXCX1,并判断CX0 EXIT END(用REP MOVSB指令)9 36 结构和记录 汇编语言还提供了用于说明复杂数据类型的伪指令,利用这些伪指令能够描述复杂数据类型,本节介绍结构、联合和记录。原则:原则:先说明、后定

6、义、再访问 3 36 61 1 结构和联合结构和联合 结构是不同数据类型和不同长度数据区间的数据的集合。除了联合中的数据区间可以在内存重叠外,联合和结构是相同的。10 结构中的任何一个数据区间,都具有相对于结构首地址的偏移地址的属性,结构的长度是所有数据区间长度的总和。联合中的任何一个数据区间,其首地址均相同,因此,联合的长度是所有数据区间长度中最长区间的长度。所以联合允许在相同的区间定义不同的数据类型。换句话说,可以在程序中根据需要,改变同一区间的数据类型。原则:先说明、后定义、再访问 11 1结构与联合结构与联合类型说明类型说明 在描述结构与联合类型数据或使用结构与联合型变量之前,需要说明

7、结构与联合类型。一般格式如下:结构名 STRUC|UNION 属性 数据定义语句序列 结构名 ENDS 属性:对齐属性,非独立属性 对齐属性:定义起始边界值,可以是1、2和4,缺省值是1。12例3.57 下列语句说明了一个名为PERSON的结构类型:PERSON STRUC ID DD 0 ;偏移量为0 SCORE DW 60 ;偏移量为4 YEAR DB 10 ;偏移量为6 PERSON ENDS 结构中不同数据区间用不同数据类型来定义变量,数据区间称为结构的字段,相应的变量名称为字段名。一个结构中可以含有多个字段,各字段可以有不同的长度(以字节为基本单位),可以独立地存取任一字段。13 2

8、结构与联合结构与联合变量的定义变量的定义 字段名必须唯一。它代表了从结构的开始到相应字段的偏移。变量的定义变量的定义:变量名 结构类型名 变量名 结构类型名 初值 ,初值 变量名 结构类型名 常数DUP(初值 ,初值 );(同时定义多个结构变量,并赋初值,建立结构数组)在说明结构类型时,可以给字段赋初值,也可以不赋初值。14 例3.58 设已说明了上述结构PERSON,那么可定义如下结构变量:STUDENT1 PERSON ;三个字段都重赋初值 STUDENT2 PERSON ;字段SCORE、YEAR用缺省初值 STUDENT3 PERSON ;三个字段均用缺省初值 PERSON 99DUP

9、(?);定义99个结构变量,初值不变 15例3.59 DISP STRUC ;结构类型说明 A DB?B DB?C DB?DISP ENDS PLAY STRUC ;结构类型说明 ONE DB 100DUP(?)TWO DB NAME THREE DISP ;结构类型说明中定义结构变量 PLAY ENDS PLAY1 PLAY ,TOM,0,0,0 ;字段ONE用缺省初值 16 4结构或联合类型结构或联合类型变量及其字段的访问变量及其字段的访问 通过结构变量名可直接存取结构变量。若要存取结构变量中的某一字段,则可采用如下形式:结构变量名.结构字段名 结构字段的地址偏移值是结构起始地址的偏移值与

10、相应字段偏移值之和。17例3.62 程序实现对结构字段的访问 DATE STRUC ;说明结构类型 YEAR DW?MONTH DB?DAY DB?DATE ENDS SOMEDAY DATE ;定义结构变量 TODAY DATE NEXTDAY DATE MOV AL,SOMEDAYMONTH ;访问结构变量,AL=3 MOV AH,TODAYDAY ;AH=18 MOV CX,NEXTDAYYEAR ;CX=2002 MOV SI,OFFSET SOMEDAY MOV AX,SIYEAR ;AL=2000 18 例:有关结构 PERSON STRUC ;说明结构类型ID DD 0 ;偏移量

11、为0SCORE DW 60 ;偏移量为4YEAR DB 10 ;偏移量为6PERSON ENDS STUDENT1 PERSON ;定义结构变量 STUDENT2 PERSON STUDENT3 PERSON PERSON 99DUP(?);访问结构变量及其字段MOV EAX,STUDENT1 ID ;EAX=100 MOV AX,STUDENT2 SCORE ;AX=60MOV EAX,STUDENT3 YEAR ;AL=10MOV SI,OFFSET STUDENT1MOV AL,SIYEAR ;AL=2019 362 记录记录 记录和结构相似,记录的字段是位字符串,可以作为常数或者表达式

12、使用。可以使用位操作指令进行二进制位数据的存取。1记录类型的说明记录类型的说明 记录名 RECORD 字段 ,字段 字段格式如下:字段名:宽度=表达式 宽度是常数(8位、16位或者32位),表示相应的字段所占的位数;表达式的值将作为相应字段的缺省初值,若不设置默认为0。20例如:COLOR RECORD RED:2,BLUE:4,YELLOW:2 三个字段总宽度正好是8位,所以也称为字节记录类型。如果不正好是8位、16位或32位,那么向右对齐,记录未说明高端用0填充。例如:ABCD RECORD A1:5=11,A2:3=6,A3:2=3 21 2记录变量的定义记录变量的定义 一般格式如下:变

13、量名 记录名 变量名 记录名 变量名 记录名 常数 DUP(初值 ,初值 )记录变量名可以省略,如果省略,那么就不能直接通过符号名访问该记录变量。22例3.64 设已定了记录类型COLOR,COLOR RECORD RED:2,BLUE:4,YELLOW:2 那么可定义如下记录变量:WARNING COLOR ;该字节的值是41H COLOR ;该字节的值是2FH COLORLST COLOR 32DUP();32个字节23 4记录专用操作符WIDTH和MASK (1)操作符WIDTH 返回记录或记录字段的位数。一般格式如下:WIDTH 记录名 或者 WIDTH 记录字段名设记录COLOR如前

14、面说明,那么:MOV AL,WIDTH COLOR ;AL=8 MOV AL,WIDTH RED ;AL=2 MOV AL,WIDTH BLUE ;AL=4 24(2)操作符MASK MASK 记录名 或者 MASK 记录字段名 返回记录或记录字段位的位置状态,返回的二进制数(8位或16位)中相应于指定字段的各位为1,其余各位为0。设记录COLOR如前面说明,那么:例3.66 MOV AL,MASK RED ;AL=11000000B MOV AL,MASK BLUE ;AL=00111100B25 (3)记录字段 记录字段名也可作为一个特殊的操作符,直接返回该字段移到所在记录的最右端所需移动

15、的位数。设记录COLOR如前面说明,那么:例3.67 MOV CL,RED ;CL=6 MOV CL,BLUE ;CL=226 3 37 7 宏宏 宏是宏汇编语言的主要特征之一。在汇编语言源程序中,若某程序片段需要多次使用,为了避免重复书写,则可把它定义为一条宏指令(宏定义)。在写源程序时,程序员用宏指令来表示某个程序片段(宏调用);在汇编时,汇编程序会扫描源程序,检查是否有已说明的宏指令应用在程序中,如果有则将宏指令所代表的内容插入该宏指令位置处(宏展开)。273 37 71 1 宏指令的定义和使用宏指令的定义和使用 (包括:(包括:宏定义、宏调用、宏展开)宏指令在使用之前要先定义。一般格式

16、如下:宏指令名 MACRO 形式参数表 宏定义体(由指令、伪指令和宏指令构成的程序片段)ENDM 宏指令名 宏指令名的指定和一般标号命名规则一致。形式参数表为可选项,由若干参数组成,各形式参数间用逗号分隔。28 在定义宏指令后,可使用宏指令来表示对应的程序片段,这称为宏调用。宏调用的一般格式如下:宏指令名 实参数表 其中,实参数表中的实参数应该与宏定义时的形式参数表中的形式参数相对应。29 例3.68(宏定义)定义一个宏将AL寄存器内的低4位转换为对应的十六进制数ASCII码:CHANGE MACRO AND AL,0FH ADD AL,90H DAA ADC AL,40H DAA ENDM

17、30例3.69 (宏调用)下面的程序片段调用了刚定义的宏。MOV AL,BL;转换并显示高4位 SHR AL,4 CHANGE MOV DL,AL MOV AH,2 INT 21H MOV AL,BL ;转换低4位 CHANGE 31 宏展开:在对源程序汇编时,汇编程序把源程序中的宏指令替换成对应的宏定义体。上述程序片段在汇编时得到的指令如下:MOV AL,BL SHR AL,4 1 AND AL,0FH 1 ADD AL,90H 1 DAA 1 ADC AL,40H 1 DAA MOV DL,AL MOV AH,2 INT 21H MOV AL,BL 1 AND AL,0FH 1 ADD A

18、L,90H 1 DAA 1 ADC AL,40H 1 DAA MOV DL,AL MOV AH,2 INT 21H 32 372 宏指令中参数的使用宏指令中参数的使用 带参数使宏指令更具灵活性。宏指令的参数可以是常数、寄存器、存储单元和操作码,还可以是表达式。例3.70 定义一条宏指令CHAN,实现对指定寄存器的运算。CHAN MACRO REG,COM,NUM AND REG,0FH COM REG,NUM ENDM 此后,可有如下格式的各种宏调用:CHAN BL,OR,30H CHAN AL,SUB,5 在汇编时,宏指令 CHAN BL,OR,30H 扩展成如下的代码:1 AND BL,0

19、FH 1 OR BL,30H33 373 宏与子程序的区别宏与子程序的区别 两种方法均能达到简化源程序的目的,但有质的不同。两者的区别:1关于目标程序。2关于参数传递。宏调用时的参数由汇编程序通过实参替换形参的方式实现传递,所以参数很灵话。子程序调用时的参数须通过寄存器、堆栈或约定的内存单元传递。3关于时间开销。宏调用是在汇编时完成,所以不需要额外的时间开销。子程序调用和子程序返回均需要时间,且还涉及堆栈。4 宏要先定义后调用。宏指令:可简化源程序。当程序片段不长,解决的主要矛盾是速度。子程序:可简化源程序和目标程序。当程序片段较长,额外操作所附加的时间就不明显,解决的主要矛盾是节约存储空间。

20、34 3 37 74 4 与宏有关的局部变量说明伪指令与宏有关的局部变量说明伪指令LOCALLOCAL 在程序中多次使用宏指令时,避免宏展开出现标号重复定义错误,可用伪指令LOCAL说明宏的局部标号。伪指令LOCAL的一般格式如下:LOCAL 标号表 ;逗号分隔 汇编程序在每次展开宏时,总把由LOCAL伪指令说明的标号用唯一的符号(?0000至?FFFF)代替,从而避免标号重定义错误。35 LOCAL伪指令用于宏定义内,作为宏定义伪指令MACRO后的第一条语句,在MACRO和LOCAL伪指令之间不允许有分号。例3.71 CHANGE1 MACRO LOCAL LP AND AL,0FH ;屏蔽高4位 CMP AL,A JB LP ;不大于9时转 ADD AL,7 LP:ADD AL,30H ENDM36 如果在程序中有如下宏调用:CHANGE1 CHANGE1 那么,在汇编时就得到如下宏扩展:1 AND AL,0FH 1 CMP AL,A 1 JB?0000 1 ADD AL,7 1?0000:ADD AL,30H 1 AND AL,0FH 1 CMP AL,A 1 JB?0001 1 ADD AL,7 1?0001:ADD AL,30H

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(h3-567控制结构和宏课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|