《第三部分_汇编》由会员分享,可在线阅读,更多相关《第三部分_汇编(52页珍藏版)》请在金锄头文库上搜索。
1、汇编语言与汇编指令及汇编指令及汇编常用伪指令介绍汇编语言的应用 DEBUG简介宏指令与宏汇编汇编与连接赊斑描洗窥新祝细哼患倍吼勉狄膳使钨卢宅吞游馁劈砰疏蔬京绕堪蛾雀啤第三局部_汇编第三局部_汇编 汇编语言程序设计目的要求 1. 掌握汇编语言的伪指令 2. 掌握汇编语言的属性操作符 第一节 汇编语言的格式一. 汇编语言及汇编 1.高级语言与汇编语言汇编语言高级语言程序编辑程序翻译用 户适应范围对“位、字节、字、存放器、存储器单元等进行处理。汇编程序熟悉计算机内部硬件结构与语言相适应的微处理器计 算机,机器的自检,系统初始化等。涉及抽象事物;“代表数和“字符变量。编译程序只需要掌握某种语言各种类型
2、计算机徽悄妻辑灶烙踢佳仿殷威脏拽烷贮衍孕箭慨浮卵陀栓虽逸枪库患树课杂氟第三局部_汇编第三局部_汇编 2.汇编语言的编辑、汇编、连接与调试过程。1汇编语言的编辑2汇编语言的汇编3汇编语言的连接4汇编语言的调试 运用EDIT.COM或编辑工具编辑汇编语言源程序。 其后缀为“ASM的“源程序 运用MASM.EXE对源程序进行汇编。 形成其后缀为“OBJ的“目标文件 运用LINK.EXE对目标文件进行连接。 形成其后缀为.EXE或.COM为扩展名的可执行文件 运用DEBUG.EXE对执行文件进行调试。 可以观察到程序在执行过程中各存储器单元、各存放器等 的内容,及根据DEBUG中的命令,可以要求程序单
3、步或连续 执行等。障竖狡韧镀欺祟俐耪砸魁毖来荚况磨痒楚喻舶帘君走岸谊戊原涅炉女肠彻第三局部_汇编第三局部_汇编说明:1、.COM文件是内存映像文件,执行时直接装入内存即可执行。其中代码段、数据段、堆栈段等的段地址完全相同。一般程序长度小于64KB。装入执行速度相对较快。2、.EXE文件不是内存映像文件,执行时需要把代码段、数据段、堆栈段等重新定位,然后才能够执行。程序长度可以大于64KB。装入执行速度相对较慢。3、不管是.COM文件还是.EXE文件装入内存时都产生一个PSP程序前缀段,里面是程序运行的一些根本信息,存放在程序的开始位置0-FFH,PSP的长度是100H。有翔颓篡面车圈匿藩速碘碘
4、拉喷亏趁倡诚苑锰水及奔狡身正肯闯惊沮衣棺第三局部_汇编第三局部_汇编用汇编语言编写的一个简单例子:在屏幕上显示Hello!并且响铃。请进入DOS环境学习。1、用DEBUG写程序。C:MASMDEBUG-A136E:0100 MOV DX, 10C136E:0103 MOV AH, 9136E:0105 INT 21136E:0107 MOV AX, 4C00136E:010A INT 21136E:010C-E10C Hello!,7,$-RCXCX 0000:14-NH1.COM-WWriting 00014 bytes-GHello!叔敌郑喧鹊浴奎尸挟醋知渍尊挫域强藻慕殿临座警偏信练绣罐仍
5、驮抹寓茬第三局部_汇编第三局部_汇编2、编写一个EXE文件。.Model Small .Stack 200H .Data String DB Hello!, 7, $ .Code Start: MOV AX, Data MOV DS, AX LEA DX, String MOV AH, 9 INT 21H MOV AX, 4C00H INT 21H End Start - Tasm H2 - Tlink H2 韶侈旅铸绦屈惋棒冲巨柴彻贷曝剂厅遮凝隘乍侯板曹婿跑装汕岁娘畔心誓第三局部_汇编第三局部_汇编3、编写一个COM文件。.Model Tiny .Code ORG 100H Start: L
6、EA DX, String MOV AH, 9 INT 21H MOV AX, 4C00H INT 21H String DB Hello!, 7, $ End Start -Tasm H3 -Tlink /t H3 汹爆激银辖慷衣废掇册揭窖早帽壬呼盾蕴轻切围苛疤债嗓疆箭被灰刚漆济第三局部_汇编第三局部_汇编简化的段伪指令与标准的段伪指令的比照 .Model Small .Stack 200H ; MyStack Segment STACK ; DW 200 DUP (0) ; MyStack EndS .Data ; Data Segment String DB Hello!, 7, $ ;
7、 Data EndS ; 毙驳铃蕴舱栈洱乃欣抛超撇容伐盲支巍夹楞眺呆宠叉导辩偷跺击蒸入膨祝第三局部_汇编第三局部_汇编; Code Segment ; Assume DS:Data, CS:Code, SS:MyStack ; Main Proc Far .Code Start: MOV AX, Data ; MOV AX, Data MOV DS, AX LEA DX, String MOV AH, 9 INT 21H MOV AX, 4C00H INT 21H ; Main EndP ; Code EndS End Start 族却究丹凋来好遵竣跃咀苟耿继玩橱诫碰挛居闹囱酣奔障歹沈乔牌卓纵
8、黄第三局部_汇编第三局部_汇编二.常用伪指令介绍1源程序2反汇编内容数据段代码段 1.源程序与反汇编内容比较 段 偏移 机器 反汇编 地址 地址 码 内容闲姨些留拭徐洛织驻鸥炔煌腑喀摹蓬讳丸钢吗驳构查蛛令钧担腺钙横膛窟第三局部_汇编第三局部_汇编 3源程序中符号的作用 指令代码助记符:MOV、ADD、INT 等 指示性语句:DATA SEGMENT、DATA ENDS CODE SEGMENT、CODE ENDS ASSUME CS:CODE,DS:DATA END START 指示性代码:DATA、CODE(段名)、START(标号) 代码段中: 数据段中: 变量名:NUM1、NUM2、NU
9、M3 伪指令:DB 操作数:3、5(立即数)、?(随机数) 指示性语句中的SEGMENT、ENDS、ASSUME END 称为“伪指令 腰逆安涨漆非郑郎坟揉勺烁宅彭缄颠阎俩旱细欲刻涯刹纂墨毋胺缓象森畴第三局部_汇编第三局部_汇编 2.伪指令 1伪指令不与任何微处理器指令对应的指示性代码或语 句,称为伪指令或伪操作。 2伪操作命令的主要功能 程序段及存储器的分配; 过程子程序定义; 符号定义,如符号变量、标号等; 程序模块的定义与通信; 宏汇编及宏调用; 条件汇编; 格式控制,列表控制及其他功能。 变量定义及存储器申请; 3.标识符指令语句中的标号与伪指令语句中的符号。 标识符的组成规那么: 第
10、一个字符必须是“字母及“?、“、“_符号; 第二个字符起可以为“字母、“数字等。 字符个数为131,不能使用保存字; 朴颇强符新相返乐寐淹唬迎挪宵丽如屹越泄寝视记月波曳阑价囊缮亚糯捧第三局部_汇编第三局部_汇编二.段与过程的定义 1 .段的定义 段名 SEGMENT 段名 ENDS 2 .过程子程序的定义 过程名 PROC NEAR/FAR RET 过程名 ENDP 过程定义设计具有一定功能的程序段,或称为子程序。 段内调用:过程名 PROC NEAR 段间调用:过程名 PROC FAR亭胸棘未伟墟掏赋典床目路衬誓帘邓灼鼠磐捂貌沫详邪篙活趁咳侵螟屡县第三局部_汇编第三局部_汇编 3ORG伪指令
11、 该指令可用来设置段内偏移地址。汇编程序开始对源程序的某段进行汇编时,其地址计数器的初值相对于段地址总是零。接着,依次累计段内语句汇编后生成目的代码的字节数。ORG伪指令可修改计数器的内容。格式为: ORG 表达式 它告知汇编,该指令后生成的目的代码,从表达式提供的偏移地址开始存放。该指令的实际工作是把当前段的汇编程序地址计数器置成表达式所确定的值。下面是使用ORG伪指令的例子:锐漠塔搏哨鲁膘凋聂板绘裕湍蒲橱扛驭冻庚趣疼窃酣赢午恨压万障兰劣般第三局部_汇编第三局部_汇编DATA SEGMENT PAGE PUBLIC WWWDATA SEGMENT PAGE PUBLIC WWW ORG 10
12、0 ORG 100XX DW 10 DUPXX DW 10 DUP?ORG ORG 5 5 ;$ $表示当前地址表示当前地址 ORG OFFSET XXORG OFFSET XX256256ARRAYB DB 100 DUP(1, -1)ARRAYB DB 100 DUP(1, -1)第第一一个个ORGORG表表示示该该数数据据段段从从偏偏移移地地址址100100的的位位置置开开始始使使用用;第第二二个个ORGORG是是为为变变量量XXXX分分配配十十个个未未初初始始化化的的字字后后,又又跳跳过过五五个个字字节节存存储储单单元元,再再继继续续存存储储数数据据;第第三三个个ORGORG表表示示变
13、变量量ARRAYBARRAYB从偏移地址从偏移地址356356的位置开始存放。的位置开始存放。 勾稽慎捎糊班得无萌瘟慑垒郊轰瓶劝润姬霄娘存框攻讨丸小线残限闪树柱第三局部_汇编第三局部_汇编 4 ASSUME 伪指令 8086利用CS存放器为代码段寻址,DS存放器为数据段寻址,SS存放器为堆栈段寻址 。然而SEGMENT和ENDS两个伪指令并未告诉汇编程序,其所定义的段是哪一种段,而ASSUME伪指令可到达此种功能,它告诉汇编一种匹配假设,即哪个段存放器将为哪个段名寻址,从而在汇编时能检查出语句所引用的变量或标号是否可以通过某段存放器正确地访问。ASSUME的指令格式如下: ASSUME: ,:
14、 其中段名是程序中定义过的任何段名或组名,也可以是表达式SEG变量名或 SEG标号或关键字NOTHING 。 狂埠册易憎辊接阑柒阻馁岿徐涵函恫问媚咨磨拥绸腊豆姑宵寨狸卢鹿梨奸第三局部_汇编第三局部_汇编三.变量定义及存储器申请 1.数据定义伪操作 1为被处理的数据设计结构、赋予初值、安排内存单元及 定义符号; 2为被处理过程中必须使用的数据工作区如:中间工作 单元、堆栈区等申请存储单元。 2.数据定义伪指令 1申请数据区伪指令种类 DBByte申请数据项为“字节数据区 DWWord申请数据项为“字数据区 DDDWord申请数据项为“双字数据区 DQ 申请数据项为“四字数据区 DT 申请数据项为
15、“十字节数据区 2数据定义伪操作语句格式 变量名 伪指令 表达式1,表达式n ;注释蹦图辛蔬漳叹锌辆莆峨咏拒狈积诛憨厉橙币掘鬃意狮裙幢君羹随矮褐侧双第三局部_汇编第三局部_汇编注意:注意: 1 1 ? 问问号号表表示示所所定定义义的的变变量量未未指指定定初初值值。例例如如:BUF BUF DW DW ?;定定义义一一个个字字变变量量BUFBUF,初初值值为为一一随随机机数数 2 2 DUP DUP 这这种种情情况况用用于于定定义义重重复复变变量量,DUPDUPDuplicationDuplication是是重重复复数数据据操操作作符符,n n表表示示重重复复次次数数,圆圆括括号号内内的的表达式
16、表示要重复的内容。例如:表达式表示要重复的内容。例如:TAB DB 100 DUPTAB DB 100 DUP0 0 ;数组变量;数组变量TABTAB有有100100个初值为零的字节元素个初值为零的字节元素 DUP DUP操作符可以嵌套使用,即圆括号中的表达式又操作符可以嵌套使用,即圆括号中的表达式又是一个带是一个带DUPDUP的表达式。例如:的表达式。例如:桅掉菠猾辐越囊能伞吁境冠般那么锥莎钥绰被复侧稀宫葫阮汕仪吭醒伊瞪殆第三局部_汇编第三局部_汇编 3.数据定义伪指令举例 例一:申请数据区格式 NUM1 DB 32H,32 ;申请字节序列数为32H,20H NUM2 DB A ;申请一字节
17、ASCII码为“41H NUM3 DB ? ;申请一字节,单元中为随机数 NUM4 DB 100 DUP0 ;申请100个字节,预置为“0 NUM5 DB 10H DUP4 DUP2,7 ;申请10H组预置数为“2,2,2,2,7的单元, ;共50H个单元3220DS:NUM1DS:NUM200004100DS:NUM3DS:NUM402020202070202020207DS:NUM5 50H 个单元 100 个单元蹿怎耿互到谢吝助散译录胰噶励弘暇澡钎躲豹钥吟啡剂稻榨絮深臀梭攘侠第三局部_汇编第三局部_汇编 例二:分析下面申请数据区的存储内容 NUM DB 75H ;申请一字节,数为“75H
18、 ARRY DW 20H DUP0 ;申请20H个字,数均为“0 ADR1 DW NUM ;申请一字,预置NUM的偏移地址 ADR2 DD NUM ;申请双字,预置NUM的逻辑地址 ADR3 DW ARRY2 ;申请一字,预置ARRY的偏移地址加2 设:NUM的段地址为0915H, NUM的偏移地址为0004H。75DS:NUMDS:ARRY0000DS:ADR1DS:ADR2DS:ADR3 40H 个单元04000400150907000915:00040915:00050915:00450915:00470915:004B0915:0000梦距谗哮足盈龙轨宝哮诣模撮坚悲谜叛楞槽坏拧钵跋侩后
19、言岂面拙平醛燥第三局部_汇编第三局部_汇编四.符号定义 1.EQU等值伪指令 为常数、表达式、符号重新定义一新符号,但不申请内存。 例1: THREE EQU 3 COUNT EQU THREE+2 XYZ EQU ARAYBXSI ABC EQU CX 2. = 等号伪指令 “=伪指令与EQU伪指令的功能相似。只能定义常数。 例1: THREE = 3 例2: EMP = 7AH EMP = EMP + 1 例2: BYTS DB 4 DUP? FIRW EQU WORD PTR BYTS 例3: BYTS EQU THIS BYTE FIRW DW ?豪撒囊腿现狂耸佰垦廉践总贬湾颤仁炊朽油
20、烘登牺论庇贱元淑木靳茵希卷第三局部_汇编第三局部_汇编 MOV NUM2,BL MOV AX, NUM1 五.属性操作符 1.修改属性运算符 在源程序中,对变量、标号、存储器的属性进行临时修改 1PTR运算符 格式: 类型 PTR 变量/标号/存储器变量/存储器类型标号BYTE 字节WORD 字DWORD双字NEAR短调用FAR 长调用 2PTR举例 NUM1 DB 20H DUP? NUM2 DW 10H DUP0 WORD PTR BYTE PTR助屯闪亡光蚌贰溉刹阔残温滔进壬斋柄把又渣浮腰唾道退纲雀翁菲苇绊柬第三局部_汇编第三局部_汇编 2.数值返回运算符 在源程序中,只对存储器进行操作
21、,读取存储器的属性。 1SEG 运算符求取某存储器单元的段地址。 例:MOV AX,SEG NUM 2OFFSET 运算符 求取某存储器单元的偏移地址。 例:MOV AX,OFFSET NUM 3TYPE 运算符求取某存储器单元的类型属性。 例:MOV BL,TYPE NUM属性类型属性值变量标号 字节 01H 字 02H 双字 04H 四字 08H 十字 0AH 短调用 FEH 长调用 FFH析叶走脓皇豫孰泉峻樊咐渺氛轿虚峙耍癸汪兢原桨姐心线微劝侨捆比茎盒第三局部_汇编第三局部_汇编 举例:反汇编醚拒脐就莎俯袄挛嘻坍谤我另泪淫蓑翼祟颈玄技刻招括日势浆脑雾疯具肉第三局部_汇编第三局部_汇编4L
22、ENGTH 运算符只适用DUP定义求某变量的元素个数。5SIZE 运算符只适用DUP定义求某变量占用的单元数。SIZE NUM1 1SIZE NUM3 20H*1寐赋绍地躲雁平区懒辰缓溺辑灿驻绍殊渍坏咙璃馆浑咨购劲强莱淹友曝全第三局部_汇编第三局部_汇编高级汇编一. 变量定义及存储器申请 1.RECORD记录字段伪数据指令 例:分析下面记录字段伪数据的设置、修改及存取。 0 1 1 0 1 0 1 0 1 0 0 0 0 0 0 0MODEL3 -取记录变量的全部数据X-取该元素右移到变量最右边的移位次数MODEL3设置变量中对应元素的值,并取变量全部数MASK-对应变量元素各位置1,其余元素
23、各位清0渤瘪肌刹垣业斌乱帝笺僳绷浑晤仅里颅譬彤刀杀惩虏耳奥岿货了垛埔轨尧第三局部_汇编第三局部_汇编 2. STRUC/ENDS结构伪数据指令高级宏汇编 例1:结构数据的预置与读出。蹋熙济牺猫承胖萤褥悬盘浦双榨欺钻绩稳梁奢桥鲁续兆形运罪梅虏赋龄榴第三局部_汇编第三局部_汇编 例2:结构数据的预置与修改。运行后数据运行前数据锤肥贤柿侗凯琢丸访供桃咽怯指彩蛤众持挝侠姓活昧躬辽哀吕底梨压钠轰第三局部_汇编第三局部_汇编二.符号定义伪指令 1.LABEL伪指令的功能及格式 为当前存储单元定义一指定变量/标号的类型 格式:变量/标号 LABEL 类型变量类型标号BYTE 字节WORD 字DWORD双字N
24、EAR短调用FAR 长调用 2 .LABEL举例 BARYLABELBYTEAARYDW100 DUP(34H)ADDAL,BARY99ADDAX,AARY98(取第100个字节)(取第50个字)忠杜罕扳趋函耿指火熊蜡扣卵盯裳腥恢饮佛压谰谜除狡腺粥禽混翟砧啊钵第三局部_汇编第三局部_汇编三.运算符伪指令 1.THIS属性运算符 为当前存储单元定义一指定变量/标号的类型 格式:变量/标号 EQU THIS 类型 2THIS举例 例1: THIS在数据段中的应用 DATA_BEQUTHIS BYTE DATA_W DW5 DUP? 字节操作采用DATA_B,字操作采用DATA_W。 例2: THI
25、S在代码段中的应用 ARY_F EQUTHIS FAR ARY_N: MOV AL,NUM 短转移采用ARY_N,长转移采用ARY_F。 1THIS属性运算符伪指令的功能及格式达亦二彩罢斧曙磐疯梗女演害衍渊谷骨路催闺叛盛啦导咨聘韦柠状开渡霹第三局部_汇编第三局部_汇编 2. 算术与关系运算符伪指令 2关系运算符伪指令 1算术运算符伪指令 +加、-减、*乘、/除、MOD求余 例:MOV AL,3*5-6 MOV AL,12 MOD 4 关系运算符伪指令 关系运算符伪指令举例 EQ相等 NE不相等 LT小于 GT大于 LE小于或等于GE大于或等于 关系为“真:结果=全“1。关系为“假:结果=全“0
26、。茧腋烤狙氖茫妙俯杂商凝纱酉辊寒色奏塑紧葬偿屠盼冒熬粉夕晾缔觉蔡耗第三局部_汇编第三局部_汇编LOP: LOOP LOP CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21HCODE ENDS END START 汇编程序设计举例 1.编辑汇编程序的根本思路以多字节加法为例: NUM1 DB 0A9H,7CH,0B4H NUM2 DB 65H,8FH,0C1H 计算:B47CA9H+C18F65H ADD NUM1,NUM2 MOV SI,0 ADD NUM1SI,NUM2SI AD
27、D AL,NUM2SI MOV AL,NUM1SI ADC AL,NUM2SI CLC COUNT EQU $-NUM2 NUM3 DB COUNT+1 DUP(0)DATA SEGMENTDATA ENDS MOV CX,COUNT MOV NUM3SI,AL INC SI JNC DONE MOV NUM3SI,1DONE:1明确所设计程序的要求;2数据的设置与存储器安排;2存放器的使用与安排。信辫地韦生舅壕是哀愈症践宦绵蘑溶下暖落鼻女纂她筹柞印平狸勃瞄穿嫩第三局部_汇编第三局部_汇编 2.将一字节的无符号16进制数转换成为ASCII码。 1以除法为例。16进制数未组合BCD码ASCII码
28、芥术涎旨蔽李蔽杭恨酥蹿蚕甄陈构继擅铭匠蓖渍蜘迂巫巡乃岿面石栅蕾茶第三局部_汇编第三局部_汇编 2以减法为例。16进制数未组合BCD码ASCII码儿愤谆吱鹊朴牲锹淄磨务测溢槐耿逼拇喳括窃谷驯钧斥曝摈常熬蚁戏瓣沿第三局部_汇编第三局部_汇编 3以减法转换字节的无符号16进制数成为BCD码流程图开 始初始条件数-100数100数=数-100计数器加一 存百位数1NoYes数-10数10数=数-10计数器加一1 存十位数 存个位数结 束NoYes繁吧草嘱喳欣磅仅守绒赚夹纲出涣潘歉撞诌慎涩艾高稽遏巧侗去倚顾匹芍第三局部_汇编第三局部_汇编一.调试程序DEBUG的主要命令 调试程序DEBUG简介 1.进入
29、于退出命令 1进入命令 方法一:盘符/路径:DEBUG 文件名. EXE 方法二:盘符/路径:DEBUG -N 文件名.EXE -L 2退出命令-Q 2.显示命令 1反汇编命令 方法一:-U 方法二:-U 起始偏移地址 方法三:-U 起始偏移地址 结束偏移地址撩烷援铸这瘪挡挥极闻为蝗生绞敛咀蒙损匝并召锰电赃糕瞪环锌怖碟醒畦第三局部_汇编第三局部_汇编 2显示当前存放器内容 -R 3显示当前内存内容 方法一:-D 段存放器:起始偏移地址 显示起始偏移地址开始的80H个内存单元 方法二:-D 起始偏移地址 显示前次段地址从起始偏移地址开始的80H个 内存单元 方法三:-D 段存放器:起始偏移地址
30、结束偏移地址 显示确定段地址从起始偏移地址开始,至结束 偏移地址的内存单元剿锯檬呻卞庐娠呼边告兵桓饶巫揩溉变粹康烽擦恐相朔哺援豁唐东超圣砾第三局部_汇编第三局部_汇编 3.修改命令 1逐个修改内存单元内容 -E 段地址:起始偏移地址 2指定范围修改内存单元内容 -F 段地址:起始偏移地址 单元个数(n+1) 数据内容 3修改存放器内容 -R 存放器名/段存放器名膜出套捻盟算配馒擞默阀捣颁殴处储运辩顷盼为署怠宜砂镰偶退那么轧卜松第三局部_汇编第三局部_汇编 4.程序运行命令 1跟踪运行方式 方法一:-T 执行“IP中始偏移地址的语句 方法二:-T 执行语句条数n 执行“IP偏移地址开始的nH条语
31、句 方法三:-T=起始偏移地址 执行语句条数n 执行从起始偏移地址开始的nH条语句 2连续运行方式 方法一:-G 执行从“IP中偏移地址至结束的语句 方法二:-T =起始偏移地址 结束偏移地址 执行从起始偏移地址至结束偏移地址断点地 址的假设干条语句睫烯叔爵埃京阑场咬鳃塞蜜特唁佑裂赖梦歌削性葱赞避析谍孺心栋卡虞巴第三局部_汇编第三局部_汇编 1.应用“A命令编辑/修改程序,所有数均为十六进制数;二.运用DEBUG写程序 2.程序中:WORD PTRWO,BYTE PTRBY; 3.程序中,不能使用除DB、DW以外的伪指令; 4.应用“W写程序之前,CX与BX只表示要写入位置的 地址范围,不能够
32、表示程序编辑时的偏移地址范围。 DEBUG下的运行结果 DOS环境下的运行结果 邱顺馅烯汇掸妖胎拼拯捞舆垃鸡裤卑泡驭钻询搐琐擎挪吕泥摔抄帧线煎套第三局部_汇编第三局部_汇编二.DEBUG中状态标志存放器各位的符号标 志 位置位“1复位“0 溢出标志位 OF OV NV 方向状态位 DF DN UP 中断控制位 IF EI DI 符号标志位 SF NG PL 零标志位 ZF ZR NZ辅助进位标志位 AF AC NA 奇偶标志位 PF PE PO进位/借位标志位 CF CY NC数懦草叉眷衣锡尺乾扦仿滦脐滁辈雅将官咐搭洪减蜂军窄脖掂烤模然弄瘫第三局部_汇编第三局部_汇编 汇编与连接一.应用MAS
33、M可以形成的文件 1.ORG伪指令在源文件中的位置 2.*.CRFCross-reference文件 该文件是对源文件中的符号进行前后对照。痔鞭瓮粮伴紊仓捡垃滨催恨枉巢田话箔珍算顾祟睹扎葫惕胰岔布概疹抗虐第三局部_汇编第三局部_汇编 3. *.LSTSource listing文件 包括源程序与目标程序等等信息。一.通过MAP,分析LINK连接多个*.OBJ文件 1. *.MAP文件的形式与内容始物理地址 末物理地址 程序长度 段名 级别觅诀哨枫迂富敏烷十铭竹垂厕眉掀采肌医橇缉前耐顷峡莎斗沃份墨尹大韵第三局部_汇编第三局部_汇编 2.文件地址的定位以下未使用ORG伪指令 1PAGE定位CODE
34、 SEGMENTPAGE 2PARA定位CODE SEGMENTPARA年滋笆房哑眷桔驶冶受诡叔卸衔美走梗猪暇汲逐棵概俭林殆讣横倒穗赦研第三局部_汇编第三局部_汇编 3WORD定位CODE SEGMENTWORD 3BYTE定位CODE SEGMENTBYTE肋凭署迷姨逝粱娜征摈袱铭魏擞尚呕棒赵旋纲持宠婶吼凸义树慌粉破耳月第三局部_汇编第三局部_汇编 3.文件地址的组合以下未使用ORG伪指令 PUBLIC与COMMON的区别 PUBLIC公共的,COMMON共用的、共有的 CODE SEGMENT PUBLIC程序1 CODE SEGMENT PUBLIC程序2 CODE1 SEGMENT C
35、OMMON程序3 CODE1 SEGMENT COMMON程序4 连接顺序:程序1+程序2+程序3+程序4 连接顺序:程序4+程序2+程序3+程序1阅居烬蛆躺演咒简帮心身泉钦敬领连输压匿溺束暗侈了坚靠兑酞魏贞绕啮第三局部_汇编第三局部_汇编 4.文件地址的顺序安排以下未使用ORG伪指令 CODE SEGMENT B程序1 CODE SEGMENT A程序2 CODE SEGMENT B程序3 CODE SEGMENT A程序4 CODE SEGMENT B程序5 连接顺序:程序1+程序2+程序3+程序4+程序5 连接顺序:程序2+程序1+程序3+程序4+程序5揍锥应炯渐蹄衅谤傣渔阔汁版梅襄倒阔
36、孤食欠姜转小宦骸抒瞄皿务弓片馁第三局部_汇编第三局部_汇编 宏汇编与条件汇编一.宏指令与过程的异同 1 .宏调用语句由宏汇编程序、MASM-86中的宏处理程序来识别 与的处理;调用“过程应用CALL语句由CPU来执行。 2 .将宏指令所代替的程序段汇编成相应的机器代码 ,并插入到 源程序的目标代码中,每次调用均要插入。使用宏调用并不能缩 短目标代码的度。 3 . “过程调用时需要保存程序的断点和现场,待过程执行完毕 还要恢复现场和断点,这些操作需要消耗CPU的时间,降低程序 的执行速度。 “过程经汇编后的目标代码是与主程序分开而独立存在的, 其目标代码在存储器中只需保存一份,采用“过程调用能有
37、效地 缩短目标代码的长度,即节省内存空间。 宏调用不需保存程序的断点和现场,恢复现场和断点,有较 快的执行速度。 “宏指令与“过程都能简化程序设计,但两者有着明显的区别。运烩哆壶睫谰瘩件廉祖彩屋攘穷质舜桥嘎藤坟湾撅颈析鸥巳靛盘溯愁彩尊第三局部_汇编第三局部_汇编 4 .每次宏调用时允许修改有关参数,同一条宏指令在调用过程 中完成不同的操作。 二宏指令使用过程 1 .宏定义::对宏指令进行定义,起一个名字; 2 .宏调用:在需要宏指令的地方,通过宏指令名来调用它; 3.宏扩展:由宏汇编程序用宏定义中的指令序列来代替宏调用 中的宏指令名。 三宏处理伪指令 1 宏定义伪指令 格式:宏指令名 MACR
38、O 形式参数表 : 宏体 (指令序列) ENDM 各形式参之间用逗号分开。在使用宏指令时,形式参数将为 实在参数所替代。 “过程中的参数不允许修改,“过程在各次调用中只能完成 相同的功能。殖体甥吼峙绷缠荷氢汇喂绸益狮拿募屯冶拢褐纂络吮黎巨鼓逗典瘩姻怀阶第三局部_汇编第三局部_汇编 2 宏调用语句 格式:标号: 宏指令名 实在参数表 在宏定义中,形参可以出现在指令操作数中,也可以出现在指 令助记符申。形参如果出现指令助记符中,那么应在其前面加“& 标识。 举例: 宏定义 SHIFTMACRO X,Y,Z MOV CL,X S&Z Y,CL ENDM 宏调用 SHIFT 2,AL,AL SHIFT
39、 4,DX,AR SHIFT 6,SI,HR诣蓉博终龄亡峡夺仅舔诞低蒋操堵宏聂峪琼嘶肃丈哦躁吮婆锰落痊忽蹦卡第三局部_汇编第三局部_汇编四.宏汇编举例 数据段宏体代码段宏体调用宏体3次W位移量 X循环次数Y寄存器 Z移位指令REPT 3宏体循环三次NUM=NUM+NUM*3宏体DB NUM宏体元素数据类型NUM NUM1蛮栗路匆溉匪糕斋购轧象互怜妓脐菇获字眩剿播阀湖镍樊髓缕贾陕录蛰稚第三局部_汇编第三局部_汇编10000 1000算术左移三次20010 0000逻辑右移四次31000 0000算术右移五次NUM NUM1肤读炭淮账枣潭鲜膳呵聪阳魄滞皮湃茬幽寻蛤彝小谜仪疲捎空结不辖卷术第三局部_汇编第三局部_汇编