《汇编语言之第9章.ppt》由会员分享,可在线阅读,更多相关《汇编语言之第9章.ppt(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第9 9章章 高级宏汇编语言高级宏汇编语言 w结构结构w记录记录w宏指令宏指令w重复汇编和条件汇编重复汇编和条件汇编12/20/202280 x86汇编语言程序设计9、1 结构w汇编语言能够识别的数据有常数、变量、标号,而宏汇编语言除此之外还有结构和记录两种高级数据。w结构就是把逻辑上互相关联的一组数据以某种形式组合在一起。w在程序中,若要多次使用相同的一组数据格式,那么我们就可以把这一组数据格式定义为一个结构数据。w例如,为了建造学生学籍档案,首先确定一名学生学籍档案的数据格式,如用几个字节分别记载相关考试成绩等。这个数据格式就是一个结构。这个数据格式本身并不需要占用存储单元。确定一个数据
2、格式的结构后,当引用改结构时,它就越存储器中特定的区域发生联系。12/20/202280 x86汇编语言程序设计结 构 w在程序中使用结构数据,必须对结构先定义,然后进行结构数据的预置与存储分配。w一、结构的定义一、结构的定义w 使用伪指令STRUC与ENDS。形式如下:w结构名 STRUCTw;数据定义语句序列w结构名 ENDSw其中,结构名不能缺省,且在一源程序中必须是唯一的。数据定义语句序列是用DB、DW或DD定义结构中各字段,这些语句中的变量名叫结构字段名。w 每一个结构字段名有局部偏移量及类型属性。局部偏移量是指结构字段的第一个字节与结构起点之间的字节数。类型是指字节、字或双字。12
3、/20/202280 x86汇编语言程序设计结 构w结构定义举例:wSTRD STRUCwDA1 DB?wDA2 DB 22HwDA3 DW 10H DUP(?)wDA4 DW DA2wDA5 DB ABCDwSTRD ENDSw结构中各字段可以指定具体的数值或字符作为结构字段的初值。12/20/202280 x86汇编语言程序设计w用伪指令STRUC/ENDS定义的结构不产生目标代码,因而类型定义本身不占内存空间。w当结构定义以后,我们可以在程序中直接引用结构名,为结构预置副本,设置结构变量。分配存储空间。w结构变量预置语句格式:w 结构变量名 结构名 w其中,结构名是用STRUC/ENDS
4、伪指令定义结构时的结构名,结构变量名是结构副本即结构变量的标识符。结构变量跟其它变量一样有3个属性:段属性、偏移量属性和类型属性。段属性、偏移量属性跟变量一样。而类型属性表示结构的总字节数。结 构12/20/202280 x86汇编语言程序设计结 构w为结构变量预置副本的时候,可以通过为结构副本中各字段进行预置。w结构的预置可以保留所有变量的初值,也可以修改某些字段的初值,无论对字段的初值是否修改,不能省略。w例如:wSTR1 STRD wSTR2 STRD wSTR3 STRD w内存分配P162 图9.112/20/202280 x86汇编语言程序设计结 构w对结构字段初值的修改,并非所有
5、字段的初值都可以修改,只有简单结构字段和字符串字段初值才可以修改。简单结构字段是指由伪指令DB、DW或DD定义的单项变量。w用伪指令定义的字符串也可以用其它字符串进行修改。w多项变量的结构字段初值不能修改。例如下面就是多项的结构字段:w DW 10H DUP(?)w DB 12H,34Hw DB ABCD,1234w DW BUFF,COUT12/20/202280 x86汇编语言程序设计结 构wSTR4 STRD 10H DUP()w表示结构变量名STR4同时预置10H个结构副本。每一个副本中都是仅修改第1个字段的初值,其余保持不变。这10H个结构数据在分配存储空间时,依次存放。w在对结构变
6、量预置时,如果要修改字符串的值,当预置的字符个数少于初值的个数时,汇编程序将用“空格”填充右边的空间;如果预置的字符个数大于初值的个数,则汇编程序会给出出错信息。w三、对结构变量及其字段的操作w 结构变量与一般变量一样,都可以作为一条指令的操作数,不过使用运算符TYPE时,跟一般变量不一样,结构变量使用运算符TYPE时返回结构所占的总字节数。其它运算符与一般变量一致。12/20/202280 x86汇编语言程序设计结 构w访问结构变量中某些字段有两种方式:w(1)使用结构字段运算符“.”,运算符格式为:w 结构变量名.结构字段名w例如:STR1.DA1w STR1.DA3w在结构变量字段名前加
7、运算符与一般变量名前使用运算符的意义一样。w例如:TYPE STR1.DA1w MOV AL,STR1.DA2w(2)计算字段所在地址,通过地址访问w例如:MOV AL,BYTE PTR STR11 12/20/202280 x86汇编语言程序设计结 构w例1 现有一结构定义和预置如下:w BLOCK STRUCw FB1 DB?w FB2 DB?w FB3 DB 10H DUP(?)w BLOCK ENDSw STRU_VAR BLOCK 20 DUP()w要求在20个结构变量的FB1字段中依次存入字母A,B,C,在FB2字段中依次存入Z,Y,X。w源程序如下:12/20/202280 x8
8、6汇编语言程序设计wDATA SEGMENTw BLOCK STRUCw FB1 DB?w FB2 DB?w FB3 DB 10H DUP(?)w BLOCK ENDSw STRU_VAR BLOCK 20 DUP()wDATA ENDSwSTACK1 SEGMENT PARA STACKw DW 20H DUP(0)wSTACK1 ENDSwCODE SEGMENTw ASSUME CS:CODE,DS:DATAwSTART:MOV AX,DATAw MOV DS,AX12/20/202280 x86汇编语言程序设计w MOV DI,OFFSET STRU_VARw MOV AL,Aw MO
9、V AH,Zw MOV CX,LENGTH STRU_VARwLOP:MOV DI.FB1,ALw MOV DI.FB2,AHw INC ALw DEC AHw ADD DI,TYPE STRU_VARw LOOP LOPw MOV AH,4CHw INT 21HwCODE ENDSw END START12/20/202280 x86汇编语言程序设计9.2 记录w记录与结构相似,结构以字节为基本单位组成字段,而记录是以二进制数位为基本单位组成字段。w在程序中,对记录的应用跟结构一样,首先进行记录的定义,然后对记录变量进行预置和存储分配,就可以在程序中对记录变量及其字段进行操作。12/20/202280 x86汇编语言程序设计