宏汇编初步PPT课件

上传人:cn****1 文档编号:579351362 上传时间:2024-08-26 格式:PPT 页数:45 大小:121.50KB
返回 下载 相关 举报
宏汇编初步PPT课件_第1页
第1页 / 共45页
宏汇编初步PPT课件_第2页
第2页 / 共45页
宏汇编初步PPT课件_第3页
第3页 / 共45页
宏汇编初步PPT课件_第4页
第4页 / 共45页
宏汇编初步PPT课件_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《宏汇编初步PPT课件》由会员分享,可在线阅读,更多相关《宏汇编初步PPT课件(45页珍藏版)》请在金锄头文库上搜索。

1、第七部分 宏汇编初步Assembly Language Programming概要结构结构记录记录宏指令宏指令条件宏汇编条件宏汇编结构结构:逻辑上相互关联的一组数据变量组合在结构:逻辑上相互关联的一组数据变量组合在一起模板或者模式。一起模板或者模式。字段:字段:包含数据的结构成员包含数据的结构成员程序对一个结构的访问程序对一个结构的访问: : 整个结构作为一个整体进行整个结构作为一个整体进行 单个的域单个的域注意:这和注意:这和C/C+C/C+中的结构体相似中的结构体相似结构的定义name STRUCfield-declarationsname ENDS其中,字段为组成结构的各个内部变量,和普

2、通DB/DW等变量的声明是一样的结构的使用结构的使用涉及到三个步骤:1. 1. 定义结构定义结构2. 2. 声明所定义的结构变量声明所定义的结构变量3. 3. 程序对结构变量进行相关的操作程序对结构变量进行相关的操作例:员工结构Employee STRUCIdNum DB 000000000LastName DB 30 DUP(0)Years DW 0SalaryHistory DW 4 DUP(0)Employee ENDS例:坐标结构COORD 结构定义了x, y坐标值COORD STRUCTX DW ? ; offset 00Y DW ? ; offset 02COORD ENDS结构变

3、量的声明结构变量名是用户自定义的名称结构变量名是用户自定义的名称变量名变量名 结构名结构名 在在中插入各个字段的值,以逗号间隔空空 保留结构的初始缺省值保留结构的初始缺省值例如例如: :.datapoint1 COORD point2 COORD worker Employee 初始化使用 DUP 操作符初始化一个或者多个数组字段元素:emp Employee 结构数组结构对象的数组使用DUP初始化NumPoints = 3AllPoints COORD NumPoints DUP()CS_Dept Employee 20 DUP()accounting Employee 10 DUP()结构

4、变量的操作.dataworker Employee mov AX,TYPE Employee ; 49mov AX,SIZE Employee ; 49mov AX,SIZE worker ; 49mov AX,TYPE Employee.SalaryHistory ; 2mov AX,LENGTH Employee.SalaryHistory ; 4mov AX,SIZE Employee.SalaryHistory ; 8Employee STRUC; bytesIdNum DB 000000000; 9LastName DB 30 DUP(0); 30Years DW 0; 2Salar

5、yHistory DW 4 DUP(0); 8Employee ENDS; 49mov dxmov worker.SalaryHistory,2000 ; first salarymov worker.SalaryHistory+4,3000 ; second salarymov si,OFFSET workermov ax,(Employee PTR si).Yearsmov ax,si.Years ; invalid operand (ambiguous)例1:p164学生成绩的结构数组3030名学生名学生7 7门课程的平均成绩门课程的平均成绩编写子程序完成各个学生的平均成绩计算记录记录的

6、概念与定义记录的存储分配和初始化对记录的相关操作概念记录和结构类似,但不同之处是以二进制数的位数 bit 为字段的基本单位。记录的定义格式记录名记录名 RECORD RECORD 字段名字段名: :宽度宽度, ,字段名字段名: :宽度宽度, 其中宽度是所在字段的二进制数的位数其中宽度是所在字段的二进制数的位数分配空间的规则: 记录的所有字段位数之和不超过记录的所有字段位数之和不超过1616。 不足不足8 8位,分配位,分配8 8位;大于位;大于8 8位,不足位,不足1616位,分配位,分配1616位。位。 数据各位填充按数据各位填充按右对齐右对齐进行。进行。 从第一个字段开始,依次对各个字段从

7、高位到低位分从第一个字段开始,依次对各个字段从高位到低位分配位数。配位数。举例REC1 RECORD F1:4, F2:2, F3:6, F4:4REC1 RECORD F1:4, F2:2, F3:6, F4:4REC2 RECORD FE1:2, F2E:4, FE3:1, FE4:1REC2 RECORD FE1:2, F2E:4, FE3:1, FE4:1REC3 RECORD FF1:3, FF2:4, FF3:3, FF4:3REC3 RECORD FF1:3, FF2:4, FF3:3, FF4:3REC4 RECORD FD1:3 =100B, FD2:2 = 2, FD3:1

8、=1REC4 RECORD FD1:3 =100B, FD2:2 = 2, FD3:1=1其中表达式是设定的初值其中表达式是设定的初值记录变量的声明格式记录变量名记录变量名 记录名记录名 举例DA1 REC1 DA1 REC1 DA2 REC2 DA2 REC2 DA3 REC3 5 DUP ()DA3 REC3 5 DUP ()DA4 REC4 DA4 REC4 DA5 REC4 DA5 REC4 DA6 REC4 10 DUP ()DA6 REC4 10 DUP ()记录的运算符宽度运算符宽度运算符 WIDTH WIDTH 记录名或记录的字段名记录名或记录的字段名MOV AL, WIDTH

9、 F3MOV AL, WIDTH F3MOV AL, WIDTH REC1MOV AL, WIDTH REC1移位值运算移位值运算 记录字段名作为操作数,记录字段名作为操作数, 表示该字段处于记录中的位表示该字段处于记录中的位置(置(0 01515)MOV BL, F1MOV BL, F1记录屏蔽运算记录屏蔽运算 MASK MASK 记录的字段名记录的字段名 将所在记录的相应字段的各位设置为将所在记录的相应字段的各位设置为1 1,其他为,其他为0 0MOV AX, MASK F1MOV AX, MASK F1对记录和字段的操作(1/2)对记录变量的操作MOV AX, DA1MOV AX, DA

10、1MOV BL, DA2MOV BL, DA2MOV DA3+4, CXMOV DA3+4, CX作为常数的记录操作数MOV AX, REC1MOV AX, REC1MOV CL, REC4MOV CL, REC4对记录和字段的操作(2/2)对记录字段的操作例例1 1:提取字段:提取字段1 1MOV AX, DA1MOV AX, DA1MOV CL, F1MOV CL, F1SHR AX, CLSHR AX, CL例例2 2:提取字段:提取字段2 2MOV AX, DA1MOV AX, DA1AND AX, MASK F2AND AX, MASK F2MOV CL, F2MOV CL, F2S

11、HR AX, CLSHR AX, CL宏概念宏定义宏调用举例宏的引入例如:经常需要显示单个字符 mov ah,2 mov ah,2 mov dl,c mov dl,c int 21h int 21h若使用过程实现,太短了开销过大若使用过程实现,太短了开销过大若定义了OUTPUT宏,则使用 OUTPUT c OUTPUT c好处:代码简洁清晰、减少重复代码好处:代码简洁清晰、减少重复代码宏的概念宏使用过程:定义、调用和展开宏指的是具有命名的汇编语言语句的指令块,宏指的是具有命名的汇编语言语句的指令块,一次定义,可以被多次调用。一次定义,可以被多次调用。在汇编器预处理的过程中,将各个宏展开拷在汇编

12、器预处理的过程中,将各个宏展开拷贝到程序中。贝到程序中。展开后的代码在汇编过程中处理。展开后的代码在汇编过程中处理。宏定义定义格式无参数和有参数macroname MACRO parameter-1, parameter-2,.statement-listENDM例1:INPUT宏INPUT MACRO MOV AH, 01H INT 21H AND AL, 0FH ENDM定义:.codeINPUT调用:从键盘输入09数字,保存在AL中例2:OUTPUT宏OUTPUT MACRO charPUSH AXMOV AL,charMOV AH,02HINT 21HPOP AXENDM定义:.cod

13、eOUTPUT A调用:从屏幕输出一个字符例3:显示字符串的宏,需要保存寄存器 display display macromacrostringstring pushpushaxax push dxpush dx mov ah,9mov ah,9 mov dx, offset stringmov dx, offset string int 21hint 21h pop dxpop dx pop axpop ax endmendm msg1 msg1 dbdb“begin of test”,0Dh,0Ah,$“begin of test”,0Dh,0Ah,$ msg2 msg2db db “en

14、d of test”,0Dh,0Ah,$ “end of test”,0Dh,0Ah,$ 调用调用 displaydisplay msg1msg1display msg2display msg2宏调用 (1 of 2)当调用宏时,各个实参和形参要对应当宏展开时,各个形参以对应的实参替换当宏展开时,产生汇编语言的源代码举例:P170P170,其中,其中+ +为展开部分为展开部分宏调用 (2 of 2)宏、形参和实参的关系:&与&当实参需要和其它的字符连接起来,需要当实参需要和其它的字符连接起来,需要& &连接连接起来。起来。当一个实参包含空格,逗号等时,用当一个实参包含空格,逗号等时,用包装起包

15、装起来作为整体传递替换来作为整体传递替换LOCAL为了防止宏中所使用的标号或变量名和程序中定义的其它标识符冲突,解决的方法:在宏的开始,利用在宏的开始,利用LOCALLOCAL声明所用的局部标识声明所用的局部标识符符举例:举例:p172p172宏库把一些常用的宏集中在相应的文件中,称为库文件使用时,只需在开始处利用INCLUDE包含库文件进来即可。例:例:p174p174重复汇编REPT伪指令IRP伪指令IRPC伪指令REPT 伪指令REPT 伪指令重复执行指定次数的语句块语法:REPT constExpressionstatementsENDMConstExpression 为无符号整数表达

16、式,决定了重复的次数例1例例1 1:X = 0X = 0REPT 10 REPT 10 ; generate db 1 through db 10; generate db 1 through db 10X = X + 1 X = X + 1 DBDB X XENDMENDM例2iVal = 0REPT 100DW iValiVal = iVal + 10ENDM以下的代码产生 100 个DW数据序列:10, 20, 30, . . . 不定重复重复的次数由实参的个数决定,每次循环时以相应的实参代替形参IRP 形参, statementsENDM例例1NUM = 5NUM = 5IRP M,

17、IRP M, DB NUM*MDB NUM*MENDMENDM例2PUSHREG MACROPUSHREG MACROIRP REG, IRP REG, PUSH REG PUSH REGENDMENDMENDMENDM不定重复字符重复的次数由string的字符个数决定,每次循环时以相应的字符依次代替形参IRPC 形参, stringstatementsENDM例例1:IRPC CHR, ABCDEFHIRPC CHR, ABCDEFHDB &CHR&DB &CHR&ENDMENDM例2:POPREG MACROPOPREG MACROIRPC REG, CBAIRPC REG, CBAPOP

18、 REG&XPOP REG&XENDMENDMENDMENDM条件汇编IF/IFE, ELSE, 和 ENDIF IF, ELSE, 和 ENDIF 伪指令IF boolean-expressionstatementsELSEstatementsENDIFIF若布尔表达式不为0时,相应的语句块被汇编;否则,汇编其它的语句块。IFE若布尔表达式为0时,则汇编举例:p176例:WriteStrinWriteStr MACRO stringIFB ECHO -ECHO * Error: parameter missing in mWriteStrECHO * (no code generated)ECHO -EXITMENDIFPUSH DXMOV DX,OFFSET stringCALL WriteStringPOP DXENDM若string参数为空,汇编时显示消息:The End

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号