![汇编措辞ch9[新版]_第1页](http://file.renrendoc.com/FileRoot1/2017-12/26/3255eed4-c752-4607-8dbb-cb4c24bc8846/3255eed4-c752-4607-8dbb-cb4c24bc88461.gif)
![汇编措辞ch9[新版]_第2页](http://file.renrendoc.com/FileRoot1/2017-12/26/3255eed4-c752-4607-8dbb-cb4c24bc8846/3255eed4-c752-4607-8dbb-cb4c24bc88462.gif)
![汇编措辞ch9[新版]_第3页](http://file.renrendoc.com/FileRoot1/2017-12/26/3255eed4-c752-4607-8dbb-cb4c24bc8846/3255eed4-c752-4607-8dbb-cb4c24bc88463.gif)
![汇编措辞ch9[新版]_第4页](http://file.renrendoc.com/FileRoot1/2017-12/26/3255eed4-c752-4607-8dbb-cb4c24bc8846/3255eed4-c752-4607-8dbb-cb4c24bc88464.gif)
![汇编措辞ch9[新版]_第5页](http://file.renrendoc.com/FileRoot1/2017-12/26/3255eed4-c752-4607-8dbb-cb4c24bc8846/3255eed4-c752-4607-8dbb-cb4c24bc88465.gif)
已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第九章 高级宏汇编语言,9.1 结构,结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。,比如,将学生的学籍档案以结构的数据形式来表示。每个学生的各种数据,如姓名、学号、年龄和各科成绩等等,组成了一个结构型数据。,一、结构的定义,结构的定义使用结构伪指令,其格式为:,结构名 STRUC 结构名 ENDS,闭吮随愤零窄硕睡锅新乾吵屹驾击祭搁轿拭尸腿盒拄歉础泥婶硝孟吉猎恳汇编语言ch9汇编语言ch9,2,在一个源程序中结构名必须是唯一的。数据定义语句序列是用DB、DW或DD定义的变量,作为结构中的各字段(Fields),所定义的各变量名称为结构字段名。,例如: STUDENT STRUC CLASS DB 25060801 NUM DB ? NAME DB 15 DUP(?) SCORE DB ? STUDENT ENDS,注意:使用伪指令STRUC/ENDS定义的结构不产生目标代码,而定义的各个字段也不分配存储单元。,旭亥掇旋违彤沙豹镐永阶恢峭铲钡建寡芦启铝蒙悯流贯存杨券曳柒骡求赵汇编语言ch9汇编语言ch9,3,二、结构的预置与存储分配,其中:结构名使用STRUC/ENDS定义的结构。结构变量名是结构副本的标识符,与其它变量一样,它也有三个属性:段、偏移量和类型属性。类型属性表示结构的总字节数。,结构预置: 用定义的结构预置副本,设置结构变量,分配存储空间。,结构变量名 结构名 ,结构变量预置语句的格式为:,字段值表是为结构副本中各字段的值进行预置,必须用一对尖括号括起来。,蕾增圆抿横劝抑裹哀呕扣死灼氨仓瞬辨绰纵谨霓历痕宾毫陈癌店幼瘴方锈汇编语言ch9汇编语言ch9,4,例如: DATA SEGMENT STU1 STUDENT ;不改变结构定义时的初值定义 STU2 STUDENT ;只改变第一个字段的值 STU3 STUDENT ;第一个字段不变,其余重置 STU4 STUDENT 10H DUP() ;同时预置10H个副本,每个副本只修改第一个字段初值。 DATA ENDS,裳殉演互雾彭铬论匝裤齐琢雨赢儒恳浮壮矽脏杰遥沮排盯测尸荫耐姬委沥汇编语言ch9汇编语言ch9,5,三、对结构变量及其字段的操作,结构变量的使用与一般变量一样,可以作为一条指令的操作数。 需注意的是,TYPE运算符作用结构变量,其返回值为该结构变量的总字节数。,MOV AX,TYPE STU1 ;AX=25MOV BH,LENGTH STU2 ;BH=1MOV BL,LENGTH STU4 ;BL=10HMOV CX,SIZE STU3 ;CX=25MOV DX,SIZE STU4 ;DX=16*25,例如:,浊但麦拙挖午哥猜咯遭美氟瓤虑婉偷雁诛螟聊捐善脚飘闹穿揩罐罕漠雷球汇编语言ch9汇编语言ch9,6,结构变量字段的使用与一般变量的使用完全相同。,MOV SI , OFFSET STU1.CLASS ; SI=0MOV DI , OFFSET STU2.CLASS ; DI=25MOV AX, LENGTH STU1.NAME ; AX=15MOV BX, OFFSET STU2MOV BX.SCORE, 80 ;将STU2的SCORE字段赋值80,访问结构变量中的字段要使用结构字段运算符“.”,结构变量名. 结构字段名,其使用格式为:,例如:,釉韵隙宜稍戒剃傻尉颖诬彦媒瓶澜株疯年莽净剔溜涡瘴萍开饲锤吮拔视绷汇编语言ch9汇编语言ch9,7,四、程序举例,BLOCK STRUCFB1 DB ?FB2 DB ?FB3 DW 10H DUP(?)BLOCK ENDSDATA SEGMENTSTRU_VAR BLOCK 20 DUP()DATA ENDS,要求在20个结构变量的FB1字段中依次存入字母A、B、C、D.,在FB2字段中依次存入字母Z、Y、X、W、V、.。,例1 现有结构定义和预置如下:,剔袁枉啪乖音磁颠鼓屑啃篓实膨篱唾螟冯矮粘芬千稽当旗碌草兜凤乱踞油汇编语言ch9汇编语言ch9,8,MOV DI,OFFSET STRU_VAR ;取结构变量首址 MOV AL,A ;取初始化字段内容 MOV AH,Z MOV CX,LENGTH STRU_VAR ;取结构变量个数LOP:MOV DI.FB1, AL ;依次向字段送字母 MOV DI.FB2, AH INC AL ;修改字段内容 DEC AH ADD DI,TYPE STRU_VAR ;修改指针 LOOP LOP,主要程序段编制如下:,溃鹊愿尹倾绝整坠瓜自殊药惮嘶神圆奉攘翱脉丢雏网哉盲押否夸堆踌曝界汇编语言ch9汇编语言ch9,9,例2 设学生学籍结构为SC1SC7是7个连续字段,分别记载每个学生的7门课程的成绩;AVERAGE字段是该学生的平均成绩。在数据段预置了30位学生的结构副本。另有程序已完成30位学生的成绩录入。要求编制一子程序计算30位学生7门课程的平均成绩并送入相应的AVERAGE字段中。,结构定义和数据段中结构预置如下:,STUD_SCOR STRUC: :SC1 DB 0SC2 DB 0SC3 DB 0SC4 DB 0SC5 DB 0SC6 DB 0SC7 DB 0AVERAGE DB 0STUD_SCOR ENDS:CLA_SCOR STUD_SCOR 30 DUP(),钦批吼袜仲陋发贮京苇择抽晒辰豺缺醛沟筑搞陪旦闸册袱醋熙铃麻肌紊泉汇编语言ch9汇编语言ch9,10,SCORE PROC LEA BX,CLA_SCOR;取第一个结构副本首址送BX MOV CX,30 ;计算平均成绩的总人数LOP1: XOR AX,AX PUSH CX LEA SI,BX.SC1;SI8时,汇编程序自动将记录定义为字(16位),否则定义为字节(8位)。,缀陋捂懊咬浅獭雄钙常庭厘市纬舜斋偿崔批晕辩蹄几疤蔗下举均隅鹿组诉汇编语言ch9汇编语言ch9,12,根据字段定义的顺序,先定义的在高位,最后定义的字段在最低位。如果各字段之和8或16,则未定义的高位以“0”填充。,REC1 RECORD F1:4,F2:2,F3:6,F4:4REC2 RECORD FE1:2,FE2:4,FE3:1,FE4:1REC3 RECORD FF1:3,FF2:4,FF3:3,FF4:3 REC4 RECORD FD1:3=100B,FD2:=2,FD3:1=1,例如:,上述定义的各记录的字段分配如下图所示。,献胳磋传困蔓瞳妓赎掉诸德筑饥其眠娱甥次撕世蔷谐炮胡汽阶丙埋噎陋裴汇编语言ch9汇编语言ch9,13,记录定义时不进行存储分配,只有当预置了记录时,才分配存储空间。,赐催影彻觅座解榔媒埂雷蜗税坞幂牡菠丘德脐扔溢敲瘸渐梧凄河腾租炕勿汇编语言ch9汇编语言ch9,14,二、记录的预置与存储分配,其中记录变量名是可选项,如果选用,它就是记录副本的标识符。,记录变量预置语句的格式:,记录变量名 记录名 字段值表 ,在字段值表中未指定初值的字段,用逗号表示,它将使用定义的初值,若定义时未指定值,则用0填入。,喜瞳据忽抱琳弱降翻腺稗袄留肺惯局瘟吨讽革西公令垂夫壬乡彤肚侍玛拭汇编语言ch9汇编语言ch9,15,例如:,DA1 REC1 DA2 REC2 DA3 REC3 5 DUP()DA4 REC4 DA5 REC4 DA6 REC4 10H DUP(),上述各记录预置后,按字节或字分配存储单元。例如对记录变量DA3分配存储单元如下:,酬约粗涵屯荔獭涌谱率绎善膝狄绢靠危薯两抽宪诈好雁剔额锌止笛摩伶西汇编语言ch9汇编语言ch9,16,三、记录运算符,在宏汇编中有几个运算符是专门用于对记录进行操作。,1、记录宽度运算符(WIDTH),WIDTH运算可作用于记录名或记录字段名。其运算结果是返回该记录或记录字段的宽度(二进制数的位数)。,NF1 EQU WIDTH REC1 ;NF1=10HNF2 EQU WIDTH F3 ;NF2=06HNF3 EQU WIDTH F4 ;NF3=04H MOV AH,WIDTH REC2;(AH)=08H MOV AL,WIDTH FE1 ;(AL)=02H MOV BH,WIDTH REC3;(BH)=0DH MOV BL,WIDTH FF2 ;(BL)=04H,例如:,敞瘁建庸免史釉等谷袖收氖睬锁希讥尧安寒拒析江舒咀咯眩豫阂沁腮历绿汇编语言ch9汇编语言ch9,17,2. 移位值运算,MOV BL,F1 ;(BL)=0CHMOV BH,F2 ; (BH)=0AHMOV CL,F3 ; (CL)=04HMOV CH,F4 ; (CH)=00H,在语句中如果直接将记录字段名作为一个操作数引用,则表示取该字段的最低位移到所在记录的最低位所需的移位次数。,例如:,3、记录屏蔽运算符,在记录字段名前加上MASK运算符,将返回该记录字段在记录中的屏蔽码。所谓屏蔽码是指该字段的各位为1其余各字段全为0,所构成的编码。,例如:,MOV AX, MASK F1 ;(AX)=0F000HMOV BL, MASK FE2 ;(BL)=3CHMOV CX, MASK FF3 ;(CX)=38HMOV BH, MASK FD1 ;(BH)=38H,庆阐铝讲打馆诡喷骡乌笛季袜母烧性霄挞底钓扰椅狡蛙吉髓靳脓描轨血圃汇编语言ch9汇编语言ch9,18,四、对记录及其字段的操作,1、对记录变量的操作,MOV AX,DA1 ;取出DA1记录变量的值0AE56H送AXMOV BL,DA2 ;BL = 61HMOV DA3+4,CX ;将CX内容送DA3的第三个记录变量,对预置的记录变量,就可以象普通变量一样进行存取。,例如:,2、对记录操作数的操作,在程序中,可以直接将已经定义的记录名作操作数使用,它被作为一个常数使用,即寻址方式为立即数寻址。 使用时,记录名后必须有一对尖括号。如果括号中无内容,表示使用记录定义时的初值。也可以为各字段重新指定值。,沮倔霹定北宙鼓峡暴陪讣殿挝蓉纳鬼买违疚笔甄足骋怀蛹泳黎酣糜处阶欺汇编语言ch9汇编语言ch9,19,MOV AX,REC1 ;对记录REC1的各字段赋值后,其值0BBA7H送AXMOV BL,REC4 ;将记录REC4的FD2和FD3字段清零后,其值20H送BLMOV BH,REC4 ;将记录REC4的原来值送BH,注意未定义的位用0填充MOV CL,REC4+REC4;将20H+25H的值45H送CL,3、对记录字段的操作,由于一个记录字段是一个字节或一个字中的某几位,在处理时,需要将记录变量作为一个整体进行操作。,MOV AX, DA1 ;取记录变量AND AX, MASK F2 ;用屏蔽码分离出F2字段MOV CL, F2 ;取F2的移位值送CLSHR AX, CL,如果要修改记录变量的字段,可先取出,修改后再存回记录变量中。,例如:,例如下面的程序段是将记录变量DA1的F2字段取出,并将其移位到最右边。,窄荒儒终搏纤寄投非潭坯棱轻骑军绰访宣滚钳搅杭组为萧吟依常特硒东法汇编语言ch9汇编语言ch9,20,9.3 宏指令,在汇编源程序设计中,如果要多次重复使用某一个程序段,这些程序段虽然出现位置不同,但功能完全相同,或者只是修改某些操作数字段。这时可使用宏指令来实现。,一、宏功能的使用过程,宏功能的使用过程包括:宏定义,宏调用和宏展开,使用宏指令可以使源程序更加清晰,易于阅读,简化重复程序的编写。,1、宏定义,宏定义使用一对伪指令MACRO和ENDM。宏定义格式有两种。,叭胡情缀言映尸屉酝蓖床民魂馆缔椎恫徽彭模宰晨留举育扳充诸涨熟帕当汇编语言ch9汇编语言ch9,21,(1)不带参数的宏定义,(2)带参数的宏定义,注意:宏定义本身不生成任何目标代码。,舔细烷蹦整血栗咱西寄谗息龋块舵军跪恐彬牌训念咱秃膜嗽眉茧酬赦抗共汇编语言ch9汇编语言ch9,22,2、宏调用,宏调用就在源程序的任意位置直接引用已经定义的宏名。所构成的语句称为宏指令语句。,* 无参数宏调用:宏名* 带参数宏调用:宏名 实参1,实参2,.,宏调用分为无参数调用和带参数调用,其格式分别为:,侧铱从润岂拌署掷阵找应葛枯琶嚼承丫吝徘盆秒肺臻儡硝寅担漱垄账肮诺汇编语言ch9汇编语言ch9,23,INPUT MACRO ;定义宏INPUT MOV AH,01H INT 21H AND AL,0FH ENDMEXCHANGE MACRO BY1,BY2 ;定义宏EXCHANGE PUSH AX MOV AL,BY1 XCHG AL,BY2 MOV BY1,AL POP AX ENDM : INPUT ;调用宏INPUT : : EXCHANGE DA_BY1,DA_BY2 ;调用宏EXCHANGE :,例如:,带参数宏调用时,实参与形参的排列顺序应一致。如果实参的个数比形参多,则多余的实参将被略去。如果实参的个数比形参少,则未指定的形参将用“空白串”替代。,七蔽询公症埔朝琅垒委杉凳竿犬典谜流侮殷五王艇瞪碗缀矿驱墓馁郝弄址汇编语言ch9汇编语言ch9,24,3、宏展开,宏展开是指汇编程序在汇编源程序过程中,当扫描到宏指令语句时,将用宏定义中的宏体的程序段目标代码替代宏指令语句。对于带参数的宏调用,将同时用相应的实参替代宏体中对应的形参。,蘑潮扣庞婴犁屁浑皖雕桔咨啃桓惹份招怒皆滥务籽顷躺纪茹知怎避萧交酝汇编语言ch9汇编语言ch9,25,SHIFT MACRO VAR,REG,SHF,NUM,DEST MOV REG,VAR MOV CL,NUM S&SHF REG,CL ;SHF为形参 MOV DEST,REG ENDM : SHIFT DA_WORD,AX,AR,CONT+1,例如:,上述宏展开后为:,MOV AX,DA_WORDMOV CL,CONU+1SAR AX,CLMOV WORD PTR DEST1+2,AX,二、连接符&和带空格或逗号的实参,在宏定义时,可以将形参作为一个字符串中的一部分,这时需要使用连接符&。 在宏调用时,可以在实参中包含空格和逗号字符,这时需要用“”将实参括起来。,闲章兰弦静报义再辊扑矛眷缮敢搂味狐倘薛感戳塞自垫戳釜栓娃淡厅澈不汇编语言ch9汇编语言ch9,26,三、局部符号伪指令LOCAL,为此,需要在宏定义的宏体中用LOCAL伪指令对标识符进行说明。在宏展开时,将这些标识符转换为?XXXX。其中,XXXX为四位十六进制数,根据宏调用的顺序依次为0000,0001,.FFFF。,;用连加实现无符号数相乘MULTIP MACRO MULT1,MULT2,MULT3 LOCAL LOP,EXIT0 MOV DX,MULT1 MOV CX,MULT2 XOR AX,AX JCXZ EXIT0LOP: ADD AX,DX LOOP LOPEXIT0: MOV MULT3,AX ENDM,当一个宏定义中包含有变量或标号定义时,如果在一个源程序中被多次宏调用,则将在程序中产生多个同名的标识符。这显然将出现语法错误。,例如:,谚笑虐脸灵赐壬亿橡债衔孙寝炽窝巴找添洲赢比徊兹毁伟诚借寺滁麦叉瘤汇编语言ch9汇编语言ch9,27,: : MULTIP DA1,DA2,DA3+ MOV DX,DA1+ MOV CX,DA2+ XOR AX,AX+ JCXZ ?0001+ ?0000: ADD AX,DX+ LOOP ?0000+?0001: MOV DA3,AX MULTIP DA1+1,DA2+1,DA3+1+ MOV DX,DA1+1+ MOV CX,DA2+1+ XOR AX,AX+ JCXZ ?0003+ ?0002: ADD AX,DX+ LOOP ?0002+?0003: MOV DA3+1,AX : :,邱艺睦酋旷硼历逮棘含差铭曝酶桂白捉攻伪伪陵蹲翁凯受抗转佃觉镑依视汇编语言ch9汇编语言ch9,28,9.4 重复汇编,使用重复汇编伪指令可以让汇编程序对某些语句序列进行重复汇编。重复汇编指令可以有以下三种。,1、定重复,M=0NUM=5 REPT 5 M=M+1 DB NUM*M ENDM,例如:,上述语句经汇编后等效下面的语句:DB 5,0AH,0FH,14H,19H,表达式的值为REPT与ENDM之间的语句序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业建筑方案设计公司
- 医用气密门安装施工方案
- 整经工专业技能考核试卷及答案
- 玉环市现代庭院施工方案
- 花鸟市场建筑方案设计
- 建筑外部楼梯处理方案设计
- 建筑服务账务处理方案设计
- 策划化妆品活动方案
- 打印机国产耗材营销方案
- 校园线上活动策划方案案例
- 2025贵州金沙县招聘城市社区工作者15人考试参考题库及答案解析
- 2025年甘肃省天水市甘谷县选聘大学生村文书55人考试参考题库及答案解析
- 2025年国家公务员考试法律基础知识复习讲义
- 农村产业融合发展示范园项目可行性研究报告
- 2025版权授权合同标准版样本
- d证科目一考试完整题库及答案
- 2025年金属非金属矿山(露天矿山)安全生产试题题及答案
- 2.1.2 不含括号的两级混合运算(课件)数学人教版三年级上册(新教材)
- 县级医院医疗质量控制方案实施细则
- 2025菊花批发合同
- 短视频制作服务协议合同
评论
0/150
提交评论