




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七部分 宏汇编初步,Assembly Language Programming,概要,结构 记录 宏指令 条件宏汇编,结构,结构:逻辑上相互关联的一组数据变量组合在一起模板或者模式。 字段:包含数据的结构成员 程序对一个结构的访问: 整个结构作为一个整体进行 单个的域 注意:这和C/C+中的结构体相似,结构的定义,name STRUC field-declarations name ENDS,其中,字段为组成结构的各个内部变量,和普通DB/DW等变量的声明是一样的,结构的使用,结构的使用涉及到三个步骤: 1. 定义结构 2. 声明所定义的结构变量 3. 程序对结构变量进行相关的操作,例:员工结构,Employee STRUC IdNum DB “000000000“ LastName DB 30 DUP(0) Years DW 0 SalaryHistory DW 4 DUP(0) Employee ENDS,例:坐标结构,COORD 结构定义了x, y坐标值,COORD STRUCT X DW ? ; offset 00 Y DW ? ; offset 02 COORD ENDS,结构变量的声明,结构变量名是用户自定义的名称 变量名 结构名 在中插入各个字段的值,以逗号间隔 空 保留结构的初始缺省值 例如:,.data point1 COORD point2 COORD worker Employee ,初始化,使用 DUP 操作符初始化一个或者多个数组字段元素:,emp Employee ,结构数组,结构对象的数组使用DUP初始化,NumPoints = 3 AllPoints COORD NumPoints DUP() CS_Dept Employee 20 DUP() accounting Employee 10 DUP(),结构变量的操作,.data worker Employee mov AX,TYPE Employee ; 49 mov AX,SIZE Employee ; 49 mov AX,SIZE worker ; 49 mov AX,TYPE Employee.SalaryHistory ; 2 mov AX,LENGTH Employee.SalaryHistory ; 4 mov AX,SIZE Employee.SalaryHistory ; 8,Employee STRUC ; bytes IdNum DB “000000000“ ; 9 LastName DB 30 DUP(0) ; 30 Years DW 0 ; 2 SalaryHistory DW 4 DUP(0) ; 8 Employee ENDS ; 49,mov dx,worker.Years mov worker.SalaryHistory,2000 ; first salary mov worker.SalaryHistory+4,3000 ; second salary mov dx,OFFSET worker.LastName mov si,OFFSET worker mov ax,(Employee PTR si).Years mov ax,si.Years ; invalid operand (ambiguous),例1:p164,学生成绩的结构数组 30名学生7门课程的平均成绩 编写子程序完成各个学生的平均成绩计算,记录,记录的概念与定义 记录的存储分配和初始化 对记录的相关操作,概念,记录和结构类似,但不同之处是以二进制数的位数 bit 为字段的基本单位。,记录的定义,格式 记录名 RECORD 字段名:宽度,字段名:宽度, 其中宽度是所在字段的二进制数的位数 分配空间的规则: 记录的所有字段位数之和不超过16。 不足8位,分配8位;大于8位,不足16位,分配16位。 数据各位填充按右对齐进行。 从第一个字段开始,依次对各个字段从高位到低位分配位数。,举例,REC1 RECORD F1:4, F2:2, F3:6, F4:4 REC2 RECORD FE1:2, F2E:4, FE3:1, FE4:1 REC3 RECORD FF1:3, FF2:4, FF3:3, FF4:3 REC4 RECORD FD1:3 =100B, FD2:2 = 2, FD3:1=1 其中表达式是设定的初值,记录变量的声明,格式 记录变量名 记录名 举例 DA1 REC1 DA2 REC2 DA3 REC3 5 DUP () DA4 REC4 DA5 REC4 DA6 REC4 10 DUP (),记录的运算符,宽度运算符 WIDTH 记录名或记录的字段名 MOV AL, WIDTH F3 MOV AL, WIDTH REC1 移位值运算 记录字段名作为操作数, 表示该字段处于记录中的位置(015) MOV BL, F1 记录屏蔽运算 MASK 记录的字段名 将所在记录的相应字段的各位设置为1,其他为0 MOV AX, MASK F1,对记录和字段的操作(1/2),对记录变量的操作 MOV AX, DA1 MOV BL, DA2 MOV DA3+4, CX 作为常数的记录操作数 MOV AX, REC1 MOV CL, REC4,对记录和字段的操作(2/2),对记录字段的操作 例1:提取字段1 MOV AX, DA1 MOV CL, F1 SHR AX, CL 例2:提取字段2 MOV AX, DA1 AND AX, MASK F2 MOV CL, F2 SHR AX, CL,宏,概念 宏定义 宏调用 举例,宏的引入,例如:经常需要显示单个字符 mov ah,2 mov dl,c int 21h 若使用过程实现,太短了开销过大 若定义了OUTPUT宏,则使用 OUTPUT c 好处:代码简洁清晰、减少重复代码,宏的概念,宏使用过程:定义、调用和展开 宏指的是具有命名的汇编语言语句的指令块,一次定义,可以被多次调用。 在汇编器预处理的过程中,将各个宏展开拷贝到程序中。 展开后的代码在汇编过程中处理。,宏定义,定义格式 无参数和有参数,macroname MACRO parameter-1, parameter-2,. statement-list ENDM,例1:INPUT宏,INPUT MACRO MOV AH, 01H INT 21H AND AL, 0FH ENDM,定义:,.code INPUT,调用:,从键盘输入09数字,保存在AL中,例2:OUTPUT宏,OUTPUT MACRO char PUSH AX MOV AL,char MOV AH,02H INT 21H POP AX ENDM,定义:,.code OUTPUT A,调用:,从屏幕输出一个字符,例3:显示字符串的宏,需要保存寄存器,display macro string push ax push dx mov ah,9 mov dx, offset string int 21h pop dx pop ax endm msg1 db “begin of test”,0Dh,0Ah,$ msg2 db “end of test”,0Dh,0Ah,$ 调用 display msg1 display msg2,宏调用 (1 of 2),当调用宏时,各个实参和形参要对应 当宏展开时,各个形参以对应的实参替换 当宏展开时,产生汇编语言的源代码 举例: P170,其中+为展开部分,宏调用 (2 of 2),宏、形参和实参的关系:,&与,& 当实参需要和其它的字符连接起来,需要&连接起来。 当一个实参包含空格,逗号等时,用包装起来作为整体传递替换,LOCAL,为了防止宏中所使用的标号或变量名和程序中定义的其它标识符冲突,解决的方法: 在宏的开始,利用LOCAL声明所用的局部标识符 举例: p172,宏库,把一些常用的宏集中在相应的文件中,称为库文件 使用时,只需在开始处利用INCLUDE包含库文件进来即可。 例:p174,重复汇编,REPT伪指令 IRP伪指令 IRPC伪指令,REPT 伪指令,REPT 伪指令重复执行指定次数的语句块 语法:,REPT constExpression statements ENDM,ConstExpression 为无符号整数表达式,决定了重复的次数,例1,例1: X = 0 REPT 10 ; generate db 1 through db 10 X = X + 1 DB X ENDM,例2,iVal = 0 REPT 100 DW iVal iVal = iVal + 10 ENDM,以下的代码产生 100 个DW数据序列:10, 20, 30, . . .,不定重复,重复的次数由实参的个数决定,每次循环时以相应的实参代替形参,IRP 形参, statements ENDM,例,例1 NUM = 5 IRP M, DB NUM*M ENDM 例2 PUSHREG MACRO IRP REG, PUSH REG ENDM ENDM,不定重复字符,重复的次数由string的字符个数决定,每次循环时以相应的字符依次代替形参,IRPC 形参, string statements ENDM,例,例1: IRPC CHR, ABCDEFH DB &CHR& ENDM 例2: POPREG MACRO IRPC REG, CBA POP REG&X ENDM ENDM,条件汇编,IF/IFE, ELSE, 和 ENDIF,IF, ELSE, 和 ENDIF 伪指令,IF boolean-expression statements ELSE statements ENDIF,IF若布尔表达式不为0时,相应的语句块被汇编;否则,汇编其它的语句块。 IFE若布尔表达式为0时,则汇编,举例:p176,例:WriteS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤矿招工考试题及答案
- 招教考编考试试题及答案
- 应急调度面试题及答案
- 无菌技术考试题及答案
- 一级律师知识考试试题及答案
- 新零售考试试题及答案
- 2025年桂林市火炬中学招聘考试试题(含答案)
- 2025年广西河池学院招聘教职人员工作人员考试笔试试题(含答案)
- 北京知名财务知识培训班课件
- 儿科N0-N1季度理论考试题(含答案)
- 信息平台造价管理办法
- DG-TJ08-2202-2024 建筑信息模型技术应用标准(城市轨道交通)
- 2025年度学校国际交流合作计划
- 2025年注册土木工程师专业基础考试题(附答案)
- 安全管理目标及责任书
- 阀门配送方案模板(3篇)
- 激光切割安全操作规程
- 海事管理培训课件
- 《曾国藩传》读书分享课件
- 十五五林业发展规划(完整版)
- 厂区安保巡逻管理制度
评论
0/150
提交评论