IBM-PC汇编语言程序设计第13章 高级宏汇编语言技术

合集下载

IBMPC汇编语言程序设计第5版课程设计

IBMPC汇编语言程序设计第5版课程设计

IBMPC汇编语言程序设计第5版课程设计一、引言IBM PC机可以说是计算机发展史上的里程碑,随着计算机技术的发展,计算机硬件和软件得到了前所未有的发展。

IBM PC机的出现改变了人们的生活方式,它不仅是一种计算机,更是一种文化。

汇编语言是计算机语言中最接近硬件的语言,它是一种用途广泛的编程语言。

在计算机科学和工程领域,汇编语言是编写高效、优化程序的必备语言。

本文将介绍IBM PC机的汇编语言程序设计第5版课程设计。

二、课程设计目标1.通过学习IBM PC机的汇编语言,掌握基本的编程技能2.熟悉汇编程序的运行机制,了解程序性能优化方法3.掌握汇编语言中基本的指令、寄存器和内存访问方式4.实践中应用知识,提高编程能力和思考问题的能力三、课程设计内容1.汇编语言基础知识–汇编程序的结构和组成部分–汇编语言的语法和指令–寄存器和内存访问方式–DOS环境下的汇编语言程序开发2.汇编语言高级编程技术–程序性能优化方法–基于中断和子程序的程序设计–DOS调用BIOS和DOS的API函数3.课程设计实践–前期设计、开发和调试汇编语言程序的能力–开发和实现一个汇编语言程序,具体任务根据学生兴趣定制四、课程设计实验任务1.实现一个计算器程序,能进行加、减、乘、除和开方运算,并输出运算结果。

2.模拟银行账户管理系统,实现账户开户、存款、取款、查询、销户等基本功能。

3.实现一个简单的2048游戏,能够实现基本操作,如上下左右滑动、得分计算、游戏结束等。

五、课程设计评分1.作业成绩占50分,包括实验报告和实验代码。

2.课堂表现占20分,包括课堂提问、讨论、思维活动等。

3.期末考试占30分,主要考察汇编语言知识的掌握程度。

六、结语本文介绍了IBM PC机的汇编语言程序设计第5版课程设计,包括课程设计目标、内容、实验任务和评分。

通过学习该课程,可以掌握基本的编程技能和汇编程序运行机制,提高编程能力和思考问题的能力。

最后,希望学生们能够通过本课程,取得优秀的成绩。

汇编语言IBM-PC绪论

汇编语言IBM-PC绪论
程序可读性差
由于缺乏高级语言的抽象,汇 编语言程序难以理解和维护。
与机器语言紧密相关
汇编语言直接对应于机器语言 的指令,因此执行效率高。
依赖特定处理器架构
每种处理器架构都有其对应的 汇编语言。
汇编语言的应用领域
系统软件
操作系统、编译器等核心软件通常使用汇编语言 编写,以提高执行效率。
游戏开发
某些游戏引擎和图形渲染部分可能使用汇编语言 优化性能。
IBM-PC汇编语言的编程模型
编程模型
IBM-PC汇编语言的编程模型包括程 序计数器、堆栈指针、寄存器等,这 些是汇编语言编程的基本概念。
程序结构
一个典型的IBM-PC汇编语言程序包 括程序头、程序主体和程序尾,其中 程序主体包含程序的指令序列。
03
IBM-PC汇编语言编程基础
汇编语言的基本语法
调试和优化汇编程序
调试汇编程序
掌握使用调试工具进行程序调试的方法,如设置断点、单步执行、查看寄存器和内存等,以便找出程 序中的错误和问题。
优化汇编程序
了解如何优化汇编程序的性能,如使用更快的指令、减少内存访问次数、优化循环结构等,以提高程 序的执行效率。
应用实例和案例分析
文件加密程序
通过编写一个简单的文件加密程序,了 解如何使用汇编语言实现加密算法,并 熟悉文件操作的相关指令和伪指令。
分支结构
使用跳转指令实现程序的 分支控制。例如,JMP、 JZ、JNZ等。
循环结构
使用循环指令实现程序的 循环控制。例如,LOOP、 LOOPZ、LOOPNZ等。
04
IBM-PC汇编语言进阶编程
子程序和中断的使用
子程序
子程序是一种封装特定功能的代码块,可以在程序中多次调 用。使用子程序可以减少代码重复,提高代码可维护性和可 读性。在IBM-PC汇编语言中,子程序的定义和调用需要使用 特定的伪指令。

《汇编语言程序设计》第十二章:高级汇编语言技术

《汇编语言程序设计》第十二章:高级汇编语言技术
;对STUDENT不分配存储单元 对 不分配存储单元 ;NAME字段,偏移量为0,缺省值为 个空格 字段,偏移量为 缺省值为 缺省值为6个空格 字段 ;NUM字段,偏移量为6,缺省值为’000’ 字段,偏移量为 ,缺省值为’ 字段 ;MATH字段,偏移量为9 字段,偏移量为 字段 ;CHINESE字段,偏移量为10 字段,偏移量为 字段 ;ENGLISH字段,偏移量为11 字段,偏移量为 字段 ;SUM字段,偏移量为12 字段,偏移量为 字段
若有如下定义: 若有如下定义: S STUDENT <’ZHANG’,’001’,,,,> 则会出现汇编错误提示“ 则会出现汇编错误提示“Field cannot be overridden”。 。 因为NAME是多重字段不能被修改。 是多重字段不能被修改。 因为 是多重字段不能被修改
利用DUP伪指令可以定义结构类型的数组。 伪指令可以定义结构类型的数组。 利用 伪指令可以定义结构类型的数组 例如: 例如: ARRAY1 STUDENT 10 DUP(< >);定义 定义STUDENT类型的数组,数组的大小为 类型的数组, 定义 类型的数组 数组的大小为10 ARRAY2 STUDENT 3 DUP(<’ZHANG’,,,,,>);定义数组 定义数组ARRAY2,数组中每个元素 定义数组 , ;的NAME字段初始值改为’ZHANG’ 字段初始值改为’ 的 字段初始值改为
;字段为’001’,其余字段为缺省值 字段为’ 字段为 其余字段为缺省值
S3 STUDENT<’LI’,,90,90,90,>;定义变量 ,NAME字段为’LI’,MATH字段、 定义变量S3, 字段为’ , 字段、 定义变量 字段为 字段
;CHINESE字段和 字段和ENGLISH字段都为 ,NUM字段和 字段都为90, 字段和SUM字段为缺省值。 字段为缺省值。 字段和 字段都为 字段和 字段为缺省值

第13章 高级宏汇编语言技术

第13章  高级宏汇编语言技术
13.1 结构
13.2 记录 13.3 宏汇编 13.4 重复汇编 11.5 条件汇编
第 1页
汇编语言程序设计
第 13 章 高级宏汇编语言技术
13.1 结构
MASM支持结构,其直接引用高级语言的结构数据概念。 13.1.1 结构的定义 结构名 STRUC 【例】 定义一个与时间有关的结构。 TIMERS STRUC YEAR_STR DB 'CURRENT DATE:','$' YEAR DW ? MONTH DB ? DAY DB ? TIME_STR DB 'CURRENT TIME:','$' HOUR DB ? MINUTE DB ? SEC DB ? TIMERS ENDS
COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1 START:MOV AX,DATA MOV DS,AX ┇ PUSH4 ;宏指令语句 + PUSH AX + PUSH BX + PUSH CX + PUSH DX ┇ EXCHANGE DA_W01,DA_W02,CX ;宏指令语句 + MOV CX, DA_W01 + XCHG CX, DA_W02 + MOV DA_W01,CX ┇ COSEG ENDS END START
;设置代码段 【例】宏指令使用的过程 : 注意:宏指令的使用不会减少程序的目标代码长度 ;宏定义 PUSH4 MACRO PUSH AX PUSH BX PUSH CX PUSH DX ENDM EXCHANGE MACRO MEM1,MEM2,REG MOV REG,MEM1 XCHG REG,MEM2 MOV MEM1,REG ENDM ;设置数据段 DATA SEGMENT DA_W01 DW 1234H DA_W02 DW 5678H DATA ENDS ;设置堆栈段 STACK1 SEGMENT PARA STACK DW 20H DUP(?) STACK1 ENDS

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学.

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学.

I B M-P C汇编语言程序设计(第二版)课后习题答案(清华大学.------------------------------------------作者xxxx------------------------------------------日期xxxx您正在查看 "ibm-pc汇编语言程序设计(第二版课后习题答案" 分类下的文章IBM-PC汇编语言程序设计(第二版课后习题答案(清华大学出版社(沈美明,温冬蝉著第三章答案1-222006-11-02 22:56IBM-PC汇编语言程序设计(第二版课后习题答案(清华大学出版社(沈美明,温冬蝉著答案1。

.(1立即寻址没有(2直接寻址 7237H(3使用BX的寄存器寻址没有(4使用BX的间接寻址 637DH(5使用BX的寄存器相对寻址 0D5F0H(6 基址变址寻址 8E18H(7相对基址变址 004FH2。

根据下列要求,写出相应的汇编指令。

(1ADD DX,BX(2 ADD AL,[BX][SI](3 ADD [BX][0B2H], CX(4 MOV AX,2A59H ADD [0524H] ,AX(5 ADD AL ,0B5H3。

(1寄存器间接寻址MOV BX,OFFSET [BLOCK][0AH]MOV DX ,[BX](2寄存器相对寻址MOV SI,OAHMOV DX,[BLOCK][SI](3基址变址寻址MOV BX ,BLOCKMOV SI,OAHMOV DX,[BX][SI]没人来看,还是要写~~4。

现有(DS=2000H,(BX=0100H,(SI=0002H,(20100=12H,(20101=34H,(20102=56H,(20103=7 8H,(21200=2 AH,(20201=4CH,(21202=B7H,(21203=65H,试说明下列各条指令执行完后,AX寄存器的内容。

(1MOV AX,1200H 1200H(2 MOV AX,BX 0100H(3 MOV AX,[1200] 4C2AH 注意,是字单元!!(4MOV AX,[BX] 3412H 同上(5MOV 1100[BX] 4C2AH(6 MOV AX,[BX][SI] 7856H(7 MOV AX,1100[BX][SI] 65B7H5。

IBM-PC汇编语言程序设计实验报告

IBM-PC汇编语言程序设计实验报告

目录实验1 利用DEBUG调试汇编语言程序段 (1)实验2 初级程序的编写与调试实验(一) (5)实验3 初级程序的编写与调试实验(二) (14)实验4 汇编语言程序上机过程 (19)实验5 分支程序实验 (22)实验6 循环程序实验 (26)实验7 子程序实验 (30)实验1 利用DEBUG调试汇编语言程序段一.实验目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。

二.实验环境PC微机DOS操作系统、Windows操作系统三.实验内容1.进入和退出DEBUG程序;1)开始—运行,输入cmd,点确定进入命令窗口2)在命令窗口中输入dubug进入debug程序3)进入debug窗口后,输入q命令退出debug2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)-D100 ;显示DS段, 0100开始的128个字节内容-D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H)-D DS:100 ;显示DS段, 0100H开始的128个字节内容-D CS:200 ;显示CS段, 0200H开始的128个字节内容-D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容-D 200 ;显示DS段, 0200H开始的128个字节内容-D 100 L 10 ;显示DS段, 100H开始的100H个字节内容2)E命令(修改指定内存)-E DS:100 F3 ‘AB’ 8D ; 把DS段中0100H开始的四个字节修改为F3 ‘AB’(A和B的ASCII 码) 8D也可以按下面的方式实现3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。

)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al单步执行上述指令6)G命令等的使用(执行A命中输入的汇编指令)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al int 3然后使用g命令执行上面的例子设断点在100H处然后用T命令单步执行实验2 初级程序的编写与调试实验(一)一.实验目的1.进一步熟悉DEBUG命令;2.掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;3.熟悉数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP;4.掌握简单的汇编语言程序编写与调试。

IBM-PC汇编语言程序设计答案

IBM-PC汇编语言程序设计答案

附录:《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

《IBM-PC汇编语言程序设计》教案及答案(第二版)

《IBM-PC汇编语言程序设计》教案及答案(第二版)

《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:20XX年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。

它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。

3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。

(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。

(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。

(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。

(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。

(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。

(7).第九章说明BIOS和DOS系统功能调用的使用方法。

(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。

附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,20XX年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (6)1.1进位计数制与不同基数的数之间的转换 (6)1.2二进制数和十六进制数的运算 (8)1.3计算机中数和字符的表示 (8)1.4几种基本的逻辑运算 (9)第 2 章80X86计算机组织 (10)2.180X86微处理器 (10)2.2基于微处理器的计算机系统构成 (11)2.3中央处理机 (11)2.4存储器 (13)2.5外部设备 (15)第 3 章80X86的指令系统和寻址方式 (16)3.180X86的寻址方式 (16)3.2程序占有的空间和执行时间 (18)3.380X86的指令系统 (19)第 4 章汇编语言程序格式 (41)4.1汇编程序功能 (41)4.2伪操作 (41)4.3汇编语言程序格式 (46)4.4汇编语言程序的上机过程 (50)第 5 章循环与分支程序设计 (53)5.1循环程序设计 (53)5.2分支程序设计 (54)5.3如何在实模式下发挥80386及其后继机型的优势 (54)第 6 章子程序结构 (56)6.1子程序的设计方法 (56)6.2子程序的嵌套 (58)6.3子程序举例 (58)第7 章高级汇编语言技术 (59)7.1宏汇编 (59)7.2重复汇编 (60)7.3条件汇编 (61)第8 章输入/输出程序设计 (63)8.1I/O设备的数据传送方式 (63)8.2程序直接控制I/O方式 (64)8.3中断传送方式 (64)第9 章BIOS和DOS中断 (68)9.1键盘I/O (69)9.2显示器I/O (71)9.3打印机I/O (72)9.4串行通信口I/O (73)第10 章图形与发声系统的程序设计 (75)10.1显示方式 (75)10.2视频显示存储器 (75)10.3EGA/VGA图形程序设计 (76)10.4通用发声程序 (77)10.5乐曲程序 (79)第11 章磁盘文件存取技术 (80)11.1磁盘的记录方式 (80)11.2文件代号式磁盘存取 (82)11.3字符设备的文件代号式I/O (83)11.4BIOS磁盘存取功能 (83)附录:《IBM—PC汇编语言程序设计》习题参考答案 (85)第一章.习题 (85)第二章.习题 (86)第三章.习题 (88)第四章.习题 (106)第五章.习题 (113)第六章.习题 (136)第七章.习题 (153)第八章.习题 (161)第九章.习题 (168)第十章.习题 (172)第十一章.习题 (186)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

《汇编语言程序设计》作业习题

《汇编语言程序设计》作业习题

《汇编语言程序设计》作业习题第1章汇编语言基础知识习题1.1 什么是汇编语言?汇编语言的特点是什么?1.2 把下列十进制数转换成二进制数、八进制数、十六进制数。

① 127 ② 1021 ③ 0.875 ④ 6.251.3把下列二进制数转换成十进制数。

① 1001.11 ② 101011.10011 ③ 111.011 ④ 1011.11.4 把下列八进制数转换成十进制数。

① 573.06 ② 75.23 ③ 431.7 ④ 123.451.5 把下列十六进制数转换成十进制数。

① 0D5.F4 ② 8BA.7C ③ 0B2E.3A ④ 6EC.2D1.6 把下列英文单词转换成ASCII编码的字符串。

① Upper ② Blow ③ Computer ④ What1.7 求下列带符号十进制数的8位基2码补码。

① +127 ②−2 ③−128 ④ +21.8 求下列带符号十进制数的16位基2码补码。

① +628 ②−9 ③−1234 ④ +32491.9 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

①68+(―53)②68―53 ③68―(―53)④(―68)―531.10 汉字在输入、存储、输出过程中所使用的汉字编码是否一样?使用的是什么编码?第2章 IBM-PC系统结构习题2.1什么是微型计算机?微型计算机主要由哪几部分组成?其主要功能是什么?2.2 8086/8088CPU由哪两部分组成?它们的主要功能是什么?2.3 8086/8088CPU有哪些寄存器?各有什么用途?2.4 8086/8088CPU哪些寄存器可以用来指示存储器地址?2.5标志寄存器中有哪些状态标志和控制标志?它们每一位所表示的含义是什么?2.6有两个16位数3A4BH和10EFH分别存放在2000H和2004H存储单元中,请用图表示出它们在存储器里的存放情况。

2.7一个存储单元的物理地址、段地址、偏移地址三者之间有何关系?2.8在DEBUG程序中,一条指令语句表示为2000:0030 MOV AL,8。

IBM-PC汇编语言程序设计

IBM-PC汇编语言程序设计

各个寄存器的对应高 低字节可单独使用
– AH, AL, BH, etc.
高 8位 AX AH BH CH DH 低 8位 AL BL CL DL
BX
CX DX
内存组织
物理地址
8086寻址范围1MB (220 bytes)
每个字节的地址从 00000h 到 FFFFFh编码, 并且编址是唯一确定的
10011111 00100110 01001000 10000011 01011100 10100010
- 0001,0110,1011,1000b
不要忘记负号!
补码的加减运算
加法运算
1111,0000,1101 + 0111,0110,1001 0110,0111,0110 结果为正数
减法运算
F23C - 2CF0 ? 结果为负数 F23C + D310 C54C
请大家动手转换成十进制运算,检验结果
– 数字以H结尾
大家思考:
– 为何引入十六进制数?
二进制和十六进制
Binary Hex
– 4位一组划分 (从最低位 开始) – 最后一组不足4位补0 – 每组对应的数据转换成 对应的数字
Hex Binary
– 相反的方法每个数字展 成4 bits
可以忽略前面的若干的0
0100 1110b = 4Eh 37h = 0011 0111b
编写汇编程序,需要计算机硬件和软件两方面的 知识。 该部分侧重于最为基础的硬件和软件知识介绍。
1 数据表示
Assembly Language Programming
二进制数字
1101101b
– 数位从左到右依次排列 b6b5b4b3b2b1b0 – 下标表示位值(place value )

高级汇编语言

高级汇编语言
<>
CALL_F MACRO
FR,SUBN
LOCAL EXIT
JN&FR EXIT ;根据实参的值确定FR的标志是什么
CALL SUBN ;调用第二个实参说明的子程序
EXIT: NOP
ENDM
CSEG SEGMENT
ASSUME CS:CSEG
START:MOV
AL,45H
SUB CALL_F
AL,64 C,SUB1
例10-3:
CALL_F MOV INT
Z,SUB2 AH,4CH 21H
<>
2.宏定义的功能
宏定义的功能在于,将宏体中的程序段作为一条宏指令,以便在其后的 程序中通过对这一条宏指令的调用来代替整个程序段(宏体)的书写。换 言之,就是写一条宏指令相当于将整个宏的程序段插入到程序中。
例10-1: 定义一个宏实现16位通用寄存器(除DX)或16位存储单元内 容乘以10的功能。
宏扩展后的程序段加入的指令代码
PUSH SAL MOV SAL SAL ADD POP
DX BX,1 DX,BX BX,1 BX,1 BX,DX DX
PUSH SAL MOV SAL SAL ADD POP
DX BUFF,1 DX,BUFF BUFF,1 BUFF,1 BUFF,DX DX
<>
1.1.3 宏汇编中参数的使用
在使用参数时,有以下规定:
● 实参与形参的个数一般是一一对应的,但也可以不一致。若实参个数 大于形参个数,则多余的实参被忽略;若形参个数大于实参个数,则多余 的形参作“空”处理。 ● 形参可以作为宏体中指令的助记符、操作数及标号,宏调用时,用实 参取代形参时必须保证所产生的指令是有效的。 ● 可以使用宏运算符,包括:&,<>,%和!,以及宏伪指令LOCAL、 PURGE
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

13.1.1 结构的定义 要在程序段中引用结构,必须先使用结构伪指令先定义。结构伪指令的使用格 式为:
结构名 STRUC <数据定义语句序列> 结构名 ENDS 其中,“结构名”不能缺省,且在同一个源程序中必须是唯一的。“数据定义语 句序列”是用DB、DW或DD定义结构中各字段(Fields),这些语句中的变量名 称叫做结构字段名。 每一个结构字段名都有局部偏移量及其类型的属性。局部偏移量是指结构字段 的第一个字节与结构起点之间的字节数,类型仍然是指字节、字或双字。 【例13-1】定义一个结构
可以用其它字符串进行修改。而存在多项(多重)变量的结构 字段初值如【例13-1】中的DA3不能修改。具有多项或多重的 结构字段,如由以下形式所示:
DB 20H DUP(?) DW 34H,5678H,1234H DB ‘1234’,‘ABCD’ DW COUT,BUFF 结构变量名的STR4同时预置16个结构副本。每一个副本中都是 仅修改第一个字段初值,其余保留不变。这16个结构数据在分 配存储空间时,将会依次存储。
标代码,因而也没有分配存储单元。这是与数据段中的数据定义不同之处。
13.1.2 结构的预置与存储单元的分配 当结构定义后,我们可在程序中直接引用结构名,为结构预置副本,设置结构变
量,分配存储空间。结构变量预置语句的格式为: 结构变量名 结构名 <字段值表>
其中,“结构名”是已用STRUC/ENDS伪指令定义结构时的结构名。 “结构变量名”是结构副本的标识符,它和其它变量一样也都具有三个属性:段属 性、偏移属性和类型属性。段与偏移属性体现结构变量的地址,类型属性是表示结 构的总字节数。
STRDAT STRUC
DA1 DB ?
DA2 DB 33H DA3 DW 10H DUP(?) DA4 DW BUFF ;可用字符作为结构字段的初值
DA5 DB ‘ABCD’
STRDAT ENDS 结构定义中的DA1,DA2,DA3,DA4,DA5分别是结构STRDAT的结构字段 名,它们的局部偏移量分别是0,1,2,22H,24H。这里,对局部偏移量的确定 与数据段中的变量所代表的偏移量计算方法相同。结构中各字段可以指定具体的 数值或字符作为结构字段的初值。用伪指令STRUC/ENDS定义的结构,不产生目
MOV BX, TYPE STRD2 ;BX=1AH
;结构变量预置
DATA SEGMENT
;结构变量预置数据段
STRD1 STRDSS <‘99008-1’,8,‘YU MEING’>
STRD2 STRDSS <‘99008-2’,16,‘LIU XING’>
DATA ENDS
本例结构预置时,有两个结构字段是字符串。通常希望预置的字符个数与字段
初值的个数相同。若预置的字符个数少于初值的个数,那么汇编程序将用“空格”
第13章 高级宏汇编语言技术
13.1 结构 结构(structures)是IBM_PC机宏汇编程序MASM最具特色的功能,它允许提 供颇有价值的编程环境。它直接引用了某些高级程序设计语言的结构数据的概念。 结构就是把逻辑上具有相互关联的一组数据,以某种形式组合在一起。如果在 一个程序段中,需要多次使用相同的一组数据格式,那我们就可以把这一组数据 格式定义为一个结构。例如,为了建造学生的学籍档案,只须确定一名学生的学 籍档案的数据格式,比如,使用几个字节记录相关科目的考试成绩等项目。这个 数据格式本身并不需要占据内存单元。它仅在一旦确定了为某个班(如该班有40 名学生)建立档案时,就可以按照事先定义的结构格式,在存储单元中布局40个 相同的数据格式。这就是,当引用该结构时,它就会与存储器中的特定区域发生 联系。 请读者注意:在程序中使用结构数据,必须对结构先定义,然后进行结构数据 的预置与存储分配。只有这样才能对结构中各相关数据进行存取、修改和操作。
填充右边的空间;若预பைடு நூலகம்的字符个数多于初值的个数,则汇编程序将给出错误的
信息。
13.1.3 结构变量及字段的操作
结构变量与一般变量一样,可做为指令的操作数,但使用某些运算符时有不同
的含意。当结构变量前面使用运算符时,运算符TYPE所表示的是结构所占的总字
节数。其它运算符,如OFFSET ,LENGTH ,SIZE等所表示的意义与一般变量的
结构变量名STR4对字段名为DA3中同时预置16个结构副本所进行的修改。
按【例13-2】的结构预置,结构变量STR1,STR2和STR3的存 储空间分配情况如图13-1所示的结构变量预置与存储单元的分 配情况。
对结构字段初值的修改,并非所有字段中的初值都是可以修
改的,只有简单结构字段和字符串字段的初值才可以修改。所 谓简单结构字段就是由伪指令DB、DW或DD定义的单项变量, 如【例13-1】中的结构 STRDAT内DA1,DA2,DA4就是只有 单项的简单结构字段。而DA5是用DB伪指令定义的字符串,也
使用相同。
【例13-4】针对【例13-3】的结构定义和预置,以下是每条指令汇编结果的示
例(假设每条指令都为单独指令)。
MOV AX,OFFSET STRD1 ;AX=0
MOV AX, OFFSET STRD2 ;AX=1AH ;按结构定义的字节数定偏移量
MOV BX, TYPE STRD1 ;BX=1AH ;是结构变量所占的总字节数
<字段值表>是为结构副本中的各字段进行预置。结构的预置既可以保留所有字 段的初值,也可以修改某些字段的初值,无论对字段的初值是否进行过修改,结构 名后头的尖括号都是不能省略的。
【例13-2】对【例13-1】的结构进行引用的例子,即对结构的预置。
STR1 STRDAT < >
STR2 STRDAT <44H> STR3 STRDAT <44H,66H,COUT,‘5678’> STR4 STRDAT 10H DUP(<44H>) 在本例的结构预置中: 结构变量名STR1对结构中所有字段都不加修改,保留各字段的初值; 结构变量名STR2仅修改第一字段,其它各字段仍保留其初值; 结构变量名STR3除了第三个字段(字段名为DA3)外,其余字段均进行了修改。
相关文档
最新文档