第3章汇编语言程序格式

上传人:大米 文档编号:570207993 上传时间:2024-08-02 格式:PPT 页数:76 大小:234.50KB
返回 下载 相关 举报
第3章汇编语言程序格式_第1页
第1页 / 共76页
第3章汇编语言程序格式_第2页
第2页 / 共76页
第3章汇编语言程序格式_第3页
第3页 / 共76页
第3章汇编语言程序格式_第4页
第4页 / 共76页
第3章汇编语言程序格式_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《第3章汇编语言程序格式》由会员分享,可在线阅读,更多相关《第3章汇编语言程序格式(76页珍藏版)》请在金锄头文库上搜索。

1、第3章 汇编语言程序格式l3.1 汇编程序功能l3.2 伪操作l3.3 汇编语言程序格式l3.4 汇编语言程序的上机过程粟场其懂挎篙蝶借兵轩欣否值货喘柞晓升级赘堑桓蛾煮础钞墩攘炼绷粮备第3章汇编语言程序格式第3章汇编语言程序格式03.1 汇编程序功能l 计算机是通过执行指令序列来解决问题的。计算机的指令系统就是指该计算机能够执行的全部指令的集合。l 指令的一般格式:l 标号: 操作符 OPD, OPS ;注释l 算术运算和位操作类指令的部分单操作数指令的格式:l 标号: 操作符 OPD ;注释批桐特敏坊废朝亮文仔无使滓梗蝗柑慢潞谐揉砍玄初朋鸥笑槛洋煌疮剿乳第3章汇编语言程序格式第3章汇编语言程

2、序格式1汇编语言程序的建立及开发过程编编辑辑文本编辑器,如文本编辑器,如 EDIT.COM源程序:文件名源程序:文件名.asm汇汇编编汇编程序,如汇编程序,如 MASM.EXE目标模块:文件名目标模块:文件名.obj连连接接连接程序,如连接程序,如 LINK.EXE可执行文件:文件名可执行文件:文件名.exe调调试试调试程序,如调试程序,如 DEBUG.EXE应用程序应用程序错误错误错误错误错误错误错误错误牡俐朵纸单蚊肯赘灿牙似笔限顿猖管示扇侧墅畴斩何胰豢通火犀符赶琶巩第3章汇编语言程序格式第3章汇编语言程序格式2汇编程序的主要功能l检查源程序l测出源程序中的语法错误,并给出出错信息l产生源程

3、序的目标程序,并可给出列表文件(同时列出汇编语言和机器语言的文件,称为LST文件)l展开宏指令鞋台艺概殷刽蚂方乡煎函卷难供掳厘烹垃坞奇戳钙弱逝熙屉惭余熙评极糟第3章汇编语言程序格式第3章汇编语言程序格式33.2 伪操作l l硬指令使CPU产生动作、并在程序运行期间由计算机执行的语句。l l伪指令(Directive)不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等。l伪指令与具体的处理器类型无关,但与汇编程序的版本有关。插豹税耪尉墩堰法懊茫券兑地拙程谨扦樟疑改谈箕位臂唬谍自饿切蜘烦陆第3章汇编语言程序格式第3章汇编语言程序格式4汇编语言语句实例汇编语言语句

4、实例 MOV CX,0;传送指令,具有2个操作数 DELAY: NOP ;空操作指令,没有操作数,带有标号 LOOP DELAY ;循环指令,标号DELAY说明转移位置 BUFFER DB 1,2,3,4,5,6,7 ;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BUFFER表示首地址沽剧澈央厂夏邦喉害非逻受妓并酵乔锭奸衙戴兵刹癌呢眨朋踪兄随凛割纶第3章汇编语言程序格式第3章汇编语言程序格式53.2.1 段定义伪操作1.完整的段定义伪操作 存储器的物理地址是由段地址和偏移地址组合而成的,汇编程序在把源程序转换为目标程序时,必须确定标号和变量的偏移地址,并且需要把有关信息通过

5、目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起,形成一个可执行程序。为此需要用段定义伪操作,格式如下: 段名 SEGMENT 定位 组合 使用 类别 . ;对数据段,附加段和堆栈段,一般是存储单元的定. ;义,分配等伪操作,对代码段则是指令及伪操作 段名 ENDS椎猪惋关丢济野务坡钵剂闸遥温芦费晓霸级邮显畜红比瞳蓬灯踪基浙豺单第3章汇编语言程序格式第3章汇编语言程序格式6l完整段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束l段定义指令后的4个关键字用于确定段的各种属性,堆栈段要采用stack组合类型,代

6、码段应具有code类别,其他为可选属性参数l如果不指定,则采用默认参数;但如果指定,注意要按照上列次序。魏耶搅马照节缠吮骨歇憋系考浓奋蚜筏悯灶畦呕汾浮恍膨尝柳各幂韦夏删第3章汇编语言程序格式第3章汇编语言程序格式7(1)定位类型:指定逻辑段在主存储器中的边界,可为: BYTE 该段可以从任何地址开始,这样偏移地址可能不是0 WORD 该段必须从字的边界开始,即段起始地址必须为偶数 DWORD 该段必须从双字的边界开始,即段起始地址的最低两个十六进制数位必须为4的倍数 PARA 该段的起始地址必须从小段边界开始,即段起始地址的最低16进制数必须为0 汀立岭喝谣歧杀澳抓啪彭愿凶篮惭直属哟腔茬揉镀刻

7、痪膳辩芽西幢夫魁玖第3章汇编语言程序格式第3章汇编语言程序格式8 PAGE 该段必须从页的边界开始,即段的起始地址的最低两个十六进制数位必须为0l简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈段默认采用PARA定位l完整段定义伪指令的默认定位属性是PARA,其低4位已经是0,所以默认情况下数据段的偏移地址从0开始噪邱洞趴沦宏魔围桌嚷悄灸懊耗徊盔狸姿覆河拼驹闯创敷啼宏乱来殃瞻被第3章汇编语言程序格式第3章汇编语言程序格式9(2)组合类型说明程序连接时的段合并方法,即指定多个逻辑段之间的关系,可为: PRIVATE 本段为私有段,与其他段没有逻辑关系,在连接时不与其他段合并,每段都有自己

8、的段地址。这是完整段定义伪指令默认的段组合方式 PUBLIC连接程序把本段与所有同名同类型的其他段相邻地连接在一起,然后为所有这些段指定一个共同的段地址,也就是合成一个物理段。这是简化段定义伪指令默认的段组合 STACK本段是堆栈的一部分,连接程序将所有STACK段按照与PUBLIC段的同样方式进行合并。这是堆栈段必须具有的段组合衬寸浑香诅蓑尚衣吉舌碌娇贷雌吵扣碱肌疽别橇韦弱嘿硷苹距域遍煽伺汝第3章汇编语言程序格式第3章汇编语言程序格式10(3)使用类型是支持32位段而设置的属性,用来说明使用16位寻址方式还是32位寻址方式 对于16位x86 CPU来说,它默认是16位段,即USE16 而对于

9、汇编32位x86 CPU指令时,它默认采用32位段,即USE32;但可以使用USE16指定标准的16位段l编写运行于实地址方式(8086工作方式)的汇编语言程序,必须采用16位段括蓬夫伴碴超辆痰诵掣瑟狠账肿鱼洞听仍绞浪殃缸如冷睬缺荒悼婿渝尤用第3章汇编语言程序格式第3章汇编语言程序格式11(4)类别在引号中给出连接时组成段组的类型名。当连接程序组织段时,并不能把相同类别的段合并起来,但可将所有的同类别段相邻分配l段类别可以是任意名称,但必须位于单引号中l大多数MASM程序使用 code、data和stack来分别指名代码段、数据段和堆栈段,以保持所有代码和数据的连续闰劳税夜齿礼余背惫奈除粤鸭褪

10、漆魄责宙晋蚌琶侈旨镰余疼云卉咋善辽似第3章汇编语言程序格式第3章汇编语言程序格式12 此外,必须明确段与段寄存器的关系,可用ASSUME伪操作来实现。格式: ASSUME 段寄存器:段名 ,段寄存器名:段名, .作用:l通知MASM用指定的段寄存器来寻址对应的逻辑段,即建立段寄存器与段的缺省关系l在明确了程序中各段与段寄存器之间的关系后,汇编程序会根据数据所在的逻辑段,在需要时自动插入段超越前缀。这是ASSUME伪指令的主要功能。场榨碳穴冠珍庸坑邑启佐男屏霞稼毛酸曲脚磷眼考抡外湿棚译喇氖旅恼诬第3章汇编语言程序格式第3章汇编语言程序格式13lASSUME伪指令并不为段寄存器设定初值,所以在代码

11、段中还必须把段地址装入相应的段寄存器中。例如:定义数据段段名为DATA,则需使用MOV指令对DS段寄存器进行赋值。 MOV AX, DATA MOV DS, AXl如果程序中有堆栈段,也需要把地址装入SS中l代码段不需要这样做,代码段的这一操作是在程序初始化时完成的。碉贝耸吠洱猜拼并泉纱草贵菏瘤鸳澈溢钝囊暗驭属挺羌克纹照葡前辗坠譬第3章汇编语言程序格式第3章汇编语言程序格式14例:完整的段定义伪操作例:完整的段定义伪操作data_1 segmentdata_1 segmentdata_1 endsdata_1 endsdata_2 segmentdata_2 segmentdata_2 end

12、sdata_2 endscode segment code segment assume cs:code,ds:data_1,es:data_2 assume cs:code,ds:data_1,es:data_2start:start: mov ax,data_1 mov ax,data_1 mov ds,ax mov ds,ax mov ax,data_2 mov ax,data_2 mov es,ax mov es,axcode endscode ends end start end start卵具咖毗纷洒整岗疡街萝剩枣倔苟馈佬摘啤走句韧喳挽塌锰狭诡芽娃剔矽第3章汇编语言程序格式第3章汇

13、编语言程序格式152.存储模型与简化段定义伪操作(1)MODEL伪操作 格式:.MODEL memory_model,model optionsl用来表明存储模型,即用来说明在存储器中是如何安放各个段的l存储模型memory model决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性lMASM有7种不同的存储模式: TINY SMALL COMPACT MEDIUM LARGE HUGE FLAT躁撵鄙末城弧致荡询奶监郊粪绷情馆淖做脐果者家赫姆板匡为隙恋赡蜡慕第3章汇编语言程序格式第3章汇编语言程序格式16liny微型模型是MASM 6.0才引入的,用于创建COM类型程序。

14、用微型模型编写汇编语言程序时,所有的段地址寄存器都被设置为同一值,这意味着代码段、数据段、堆栈段都在同一个段内,不大于64KB;访问操作数或指令都只需要使用16位偏移地址。一般用于小程序。lmall 小型模型是最常用的一种模型。在小型模型下,一个程序至多只能有一个代码段和一个数据段,每段不大于64KB。这里的数据段指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不超过64KB;访问操作数或指令都只需要使用16位偏移地址;代码和数据都是近访问的,小模型下程序的最大长度为128KB忿呐坎失灾霓绢佰惦金颗忧乡睦厄齐丁节箔绎晨圆黔亿贰冠艳针为擒士豫第3章汇编语言程序格式第3章汇编语言程序格

15、式17lompact 紧凑模型适合于数据量大但代码量小的程序。在该模型下,代码段被限制在一个不大于64KB的段内;而数据段则可以有多个,超过64KB。代码是近访问的,而数据则可为远访问的。ledium 中型模型是与紧凑模型互补的模型,适合于数据量小但代码量大的程序。中型模式的代码段可以超过64KB,有多个;但数据段只能有一个不大于64KB的段。数据是近访问,而代码可远访问。large 大型模式允许的代码段和数据段都有多个,都可以超过64KB;但全部的静态数据(不能改变的数据)仍限制在64K字节内.数据和代码都可以远访问。板昧们脾瘴违骡羞姻诞声中痴漾哦风荔否梢店恋肆芋姬圾舞疯捆淆瑚欺免第3章汇编

16、语言程序格式第3章汇编语言程序格式18luge 巨型模型与大型模型基本相同,只是静态数据不再被限制在64K字节之内。llat 平展模型用于创建一个32位的程序,它只能运行在32位x86 CPU上。DOS下不能使用FLAT模型,而编写32位Windows 9.x或Windows-NT的程序时,必须采用FLAT模型。lDOS下编程可选择前六种模型,一般可以选用SMALL模型,TINY模式产生COM程序,其他模型产生EXE程序,FLAT模型只能用于32位程序。迹韶狞绷温倘嘿纱归授萌妻卢侈旱疙妄瘪瑰平忧钻猖习茎遂镇铬慢蹬幽吃第3章汇编语言程序格式第3章汇编语言程序格式19lModel options允

17、许用户指定三种选项:高级语言接口、操作系统和堆栈距离。高级语言接口选项是指该汇编语言程序作为某一种高级语言程序的过程而为该高级语言程序调用时,应该用等来说明。操作系统选项是要说明程序运行于哪个操作系统之下,可用OS_DOS或OS_OS2来说明,默认是OS_DOS。堆栈距离选项可用NEARSTACK或FARSTACK来说明,基中NEARSTACK是指堆栈段和数据段组合到一个DGROUP段中,而FARSTACK是指堆栈段和数据段并不合并。例如:.MODEL SMALL,C .MODEL LARGE,OS_DOS鄂思崎中该抬梨峭仅坏牌因萎抗劝姥剿税夹茸巢茸动洛哭猖绸扮表派裤婴第3章汇编语言程序格式第

18、3章汇编语言程序格式20(2)简化的段定义伪操作简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面的一个段。采用简化段定义伪指令前,需有.model语句。常用:.STACK 大小;堆栈段开始.DATA;数据段开始.CODE 段名;代码段开始.STACK 大小堆栈段伪指令.STACK创建一个堆栈段,段名是:stack,它的参数指定堆栈段所占存储区的字节数,默认是1KB(= 1024 = 400h字节)旅跟奈罪展坑蓖傻胀簿珍烈虹畅瘴坛垄誊诱蔡鞭珍夯糯创随苇淑蔗惕眶账第3章汇编语言程序格式第3章汇编语言程序格式21.DATA.DATA数据段伪指令.data创建一个数据段,段名是:_DATA。它用

19、于定义具有初值的变量,当然也允许定义无初值的变量。 无初值变量可以安排在另一个段中,它用.data?伪指令创建,数据段名是:_BSS。 .const伪指令用于建立只读的常量数据段(段名:CONST).CODE .CODE 段名段名 代码段伪指令.code创建一个代码段,它的参数指定该代码段的段名。如果没有给出段名,则采用默认段名:在TINY、SMALL、COMPACT和FLAT模式下,默认的代码段名是:_TEXT;在MEDIUM、LARGE和HUGE模式下,默认的代码段名是:模块名_TEXT。殖忘采额笺盗霞藤蔬寅辞镣流敌直该徽鳃老竖梅嗣踢宙厨武样赵喂怒歼循第3章汇编语言程序格式第3章汇编语言程

20、序格式22(3)与简化段定义有关的预定义符号使用简化段定义,各段名称和其他用户所需的信息可以使用MASM预定义符号,例如:data表示由.data等定义的数据段的段名。(4)简化段定义举例.MODEL SMALL .STACK 100H .DATA .CODESTART:MOV AX,DATA MOV DS,AXMOV AX,4C00HINT 21HEND START拈卜碎繁左埋挺丸制昆牢帕圈矾钟曙空寅蠕部妥眺猫秀拈饿轨挞广融牵柑第3章汇编语言程序格式第3章汇编语言程序格式233.段组定义伪操作格式:组名 GROUP 段名,段名,.l把多个同类段合并为一个64KB物理段,并用一个组名统一存取它

21、l定义段组后,段组内各段就统一为一个段地址,各段定义的变量和标号的偏移地址就相对于段组基地址计算loffset操作符取变量和标号相对于段组的偏移地址,如果没有段组则取得相对于段的偏移地址。offset后可以跟段组中的某个段名,表示该段最后一个字节后面字节相对于段组的偏移地址很卤冯陡僵伙乌以雇刹炬秦佯条此湾竟神绒匿洒漂尿很咬揩浚匆斌搅掣刁第3章汇编语言程序格式第3章汇编语言程序格式243.2.2 程序开始和结束伪操作l程序开始可用Name和ITLE作为模块的名字。 NAME的格式:NAME 模块名汇编语言将以给出的”模块名”作为模块的名字。TITLE的格式:TITLE 标题TITLE伪操作可指定

22、列表文件中的每一页上打印的标题lEND表源程序结束的伪操作,格式为:END 标号用来指示汇编程序MASM到此结束汇编过程。源程序的最后必须有一条END语句。可选的标号用于指定程序开始执行点,连接程序将据此设置CS : IP值局滦帧兆主粕度滁签保糙嚼冬绣桨擅镶哮梨署惦端逻聚下锡斧墟腑攫反弘第3章汇编语言程序格式第3章汇编语言程序格式25lMASM6.0还增加了定义程序入口点和出口点的伪操作。用.STARTUP定义程序的初始入口点,并产生设置DS,SS和SP的代码。如果程序采用了.startup伪指令就不需要再用“end 标号”指明开始执行点,但还要有end伪指令l.EXIT用来产生退出程序并返回

23、操作系统的代码,其格式: .EXIT 返回参数可选参数是一个返回的数码,通常用0表示没有错误。例如.exit 0对应的代码是:MOV AX,4C00H INT 21HlDOS功能调用的4CH子功能(返回DOS): 入口参数:AH4CH,AL返回数码怀释僧起莱雍卖蚁尾拯擂哆应坦款戍琶泛绑综霄啤褂焕厚场夯扣饼亲辆仑第3章汇编语言程序格式第3章汇编语言程序格式263.3 参数、变量和标号l本节详细讨论汇编语言程序语句的主要部分:参数 变量名 标号l并引出相关的伪指令和操作符l本节重点掌握:常数的表达变量定义伪指令DB/DW/DD、地址操作符和类型操作符票并牺脚磊患香狐隔揍消晾近顺医伯涛定秆莲医疆夷址

24、厘菩缘寿湾孰籍弄第3章汇编语言程序格式第3章汇编语言程序格式273.3.1 数值型参数l在源程序语句格式的4个组成部分中,参数是指令的操作对象(在学习硬指令时被称为操作数),参数之间用逗号分隔l参数根据指令不同可以没有,可以有1个、2个或多个l汇编语言程序中,指令参数有数值型,它的主要形式是常数和数值表达式;l硬指令的操作数有立即数;立即数就要用数值型参数表达怒墙挪吴硫椅山命疤犀沃瓜姓鞠肄袖畏卿线硕醉菠静秩光橡厩烬冤摸压央第3章汇编语言程序格式第3章汇编语言程序格式281. 常数l常数(常量)表示一个固定的数值l它又分成多种形式:(1)十进制常数(2)十六进制常数(3)二进制常数(4)八进制常

25、数(5)字符串常数(6)符号常数伯膛涕读握吊某弟区喊尹韭于秀垛夸肮壮伦掏氖察菏骡振丽班冤狭毛痔锭第3章汇编语言程序格式第3章汇编语言程序格式292. 数值表达式l数值表达式一般是指由运算符连接的各种常数所构成的表达式l汇编程序在汇编过程中计算表达式,最终得到一个数值l程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性lMASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator)咆鬼座逗拳竹衣笨鹤肢发仁脓萤队射杏治榆事租根您耀扒穷坍恃祖击敞揣第3章汇编语言程序格式第3章汇编语言程序格式37运算符l算术运算符+ - * / MODl逻辑运算符AND OR

26、 XOR NOTl移位运算符SHL SHRl关系运算符EQ NE GT LT GE LEl高低分离符HIGH LOW HIGHWORD LOWWORD酶崩空淋再凳朽兆搁虫疹班邮末炬乎犬鹿匝淌蛀垣按探砚炭茁缔孤龙猜槐第3章汇编语言程序格式第3章汇编语言程序格式383. 运算符的优先级1() LENGTH SIZE WIDTH MASK2PTR OFFSET SEG TPYE THIS :3HIGE LOW4* / MOD SHL SHR5+ -6EQ NE GT LT GE LE7NOT8AND9OR XOR10SHORT 建建议议采采用用圆圆括括号号“()”显显式式表表达达,它它可可以极大地提

27、高程序的可阅读性以极大地提高程序的可阅读性减垫捅释保饿安蹦毗项飞讶齐此市含郎吼擒浓琉俩搽平戈遭嚷腕插辐渤醒第3章汇编语言程序格式第3章汇编语言程序格式444.地址型参数l汇编语言程序中,指令参数还有地址型,它的主要形式是标号和名字(变量名、段名、过程名等)l硬指令的操作数有存储单元;存储单元就应该用地址型参数(存储器操作数)表达桅淖源霄裸柯足捐鬼后亲摩伺向纶胺宾健稽傀阿滚峙泳救朔狰毡剖杂丽吗第3章汇编语言程序格式第3章汇编语言程序格式453.3.2 变量定义伪指令l变量定义(Define)伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化变量名 伪指令助记符 初值表 变量定义伪

28、指令最常使用变量定义伪指令最常使用睡僵缆鹿栏抑截臣耐膜躁华桩埋柴仟破鬼搽印稚嗅裁邀沮柄廊怎叶垂在分第3章汇编语言程序格式第3章汇编语言程序格式46变量名l变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为符号地址l变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址l设置变量名是为了方便存取它指示的存储单元岁谤净广葡诚仲壁枷奶雄水美诛溯戳垢盎决颧烤亏缴崭废涨村庭瞅垄寂兵第3章汇编语言程序格式第3章汇编语言程序格式47初值表l初值表是用逗号分隔的参数l主要由数值常数、表达式或?、DUP组成?表示初值不确定,即未赋初值;DUP表示重复初值DUP的格式为

29、:重复次数 DUP(重复初值参数)跨恒氰呵由承硅啸裤什蒜寡柠废霖威凰抛斗噬褂培煞锌鼻哨宛贯溺奋崎旨第3章汇编语言程序格式第3章汇编语言程序格式48变量定义伪指令助记符l变量定义伪指令根据申请的主存空间单位分类lDB定义字节伪指令lDW定义字伪指令lDD定义双字伪指令lDF定义3字伪指令lDQ定义4字伪指令lDT定义10字节伪指令l还有定位伪指令拴鸽狗赢倍寨墩液厄沥汁菏葛踩堡彝嵌滓阿稠盼菩冤您喻勉谨秸嘘悄端尝第3章汇编语言程序格式第3章汇编语言程序格式49定义字节单元伪指令DBDB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值初值表中每个数据一定是字节量(Byte),存放一个8位数

30、据: 可以是0255的无符号数 或是128127带符号数 也可以是字符串常数就气凭涵诬奶畦怒将努漂颠由投龄扫空瞪呢恐柿这荔爪顾播渣碌仅杯洽踏第3章汇编语言程序格式第3章汇编语言程序格式50datasegment;数据段Xdb a,-5db 2 dup(100),?Ydb ABCdataends字节单元定义实例字节单元定义实例字节单元定义实例字节单元定义实例mov al,X ;此处X表示它的第1个数据, 故ALainc X+1 ;对X为始的第2个数据减1, 故成为-4mov Y,al ;现在Y这个字符串成为 aBC字节变量的应用字节变量的应用浊楚全孺妄麓杆耿吝坐寿度戴弛鸥宗甚听稀镰丫槛母棒剩琐变

31、九恨鱼啊吠第3章汇编语言程序格式第3章汇编语言程序格式51定义字单元伪指令DWDW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据: 一个段地址一个偏移地址 两个字符 065535之间的无符号数 3276832767之间的带符号数组凭凸干桂德焊择源找屁萨趴铜存达答浙蒜肚泄瞬脾储危享策增份先浓枷第3章汇编语言程序格式第3章汇编语言程序格式52datasegment;数据段countdw 8000h,?,ABmaxint equ 64hnumber dw maxintarraydw maxint dup(0)dat

32、aends字单元定义实例字单元定义实例字单元定义实例字单元定义实例徒谷汲返灿碳可拘搞卡战纤闸膜枣愉詹潞厢苏阎我周拈缓割谭湃砰眉睡季第3章汇编语言程序格式第3章汇编语言程序格式53字变量和字常量的定义:WNUMEQU 5678H;定义WNUM为常量COUNT DW 20H;定义COUNT变量,假设在数据段的偏移地址为10H字变量和字常量的应用:MOV AX,BX+SI+WNUM; MOV AX,BX+SI+5678HMOV AX,COUNT; MOV AX,0010HMOV AX,SI+COUNT; MOV AX,COUNTSI; MOV AX,SI+10HLEA BX,COUNT; LEA B

33、X,0010HMOV BX,OFFSET COUNT; MOV BX,0010H字变量和字常量字变量和字常量字变量和字常量字变量和字常量漱酱吱萄邦鼓鸥慕逆蛙纽般嗓廷菲意菏寅唤写漆序装液翰消类腺周气姐稼第3章汇编语言程序格式第3章汇编语言程序格式54定义双字单元伪指令DDDD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值初值表中每个数据是一个32位的双字量(Double Word): 可以是有符号或无符号的32位整数 也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针varddDD 0,?,12345678hfarpointDD 00400078h衷椽吭俺找筹

34、汞掏锻汀弱蛔使综腕语境运查愉顿斌曲绢冤悟志哀河连泼楼第3章汇编语言程序格式第3章汇编语言程序格式55其他数据单元定义伪指令l定义3字伪指令DF用于为一个或多个6字节变量分配空间及初始化6字节常用在32位CPU中表示一个48位远指针(16位段选择器:32位偏移地址)l定义4字伪指令DQ用于为一个或多个8字节变量分配空间及初始化8字节变量可以表达一个64位整数l定义10字节伪指令DT用于为一个或多个10字节变量分配空间及初始化10字节变量可以表达扩展精度浮点数史楼构榔牵癣仪走辕洼储姚凤费艰淀谍沽媒寝事基摸佛喷盖软蛰厩仪蝉愁第3章汇编语言程序格式第3章汇编语言程序格式56例例:数据定义综合应用数据定

35、义综合应用.model small.stack.databvar DB 16wvar DW 4*3dvar DD 4294967295 ;2321qvar DQ ? DB 1,2,3,4,5tvar DT 2345 ;定义了BCD码2345Habc DB a,b,cmsg DB Hello,13,10,$bbuf DB 12 DUP(month)dbuf DD 25 DUP(?)CALLDOS EQU .code.startup mov bl,bvar mov ax,word ptr dvar0 mov dx,word ptr dvar2;取双字到DX.AX mov dx,offset msg

36、 mov ah,09h CALLDOS.exit 0end英郁份纲签骤网谴闪自沛肪藏拽掳情凰蔡唇术炮延寻陨演武孕划颜沿十度第3章汇编语言程序格式第3章汇编语言程序格式57定位伪指令定位伪指令控制数据的偏移地址lORG 参数ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址:ORG 100h;从100h处安排数据或程序ORG $+10;使偏移地址加10,即跳过10个字节空间MASM中,符号“$”表示当前偏移地址值lEVEN;从偶地址开始lALIGN n;从n的整数倍地址开始某眉荧忱栓兵赞卖嗽轨狂议恩烧篓古虑鞭授其剖憋侣贡锄袁勇拜藉贷糜屹第3章汇编语言程序格式第3章汇编语言程序格式583.3.

37、3 变量和标号的属性l标号和名字一经定义便具有以下两类三种属性: 段值v标号和名字对应存储单元的段地址 偏移值v标号和名字对应存储单元的偏移地址 类型v标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间v变量名的类型可以是BYTE(字节)、WORD(字)和DWORD(双字)等地址属性地址属性类型属性类型属性堰孪深抚紫国孝柬怂卵东毛磕贱觅梗扑阻隅殴惋的揣芽澜唬擦厘堵锤暮桥第3章汇编语言程序格式第3章汇编语言程序格式59地址操作符l取得名字或标号的段地址和偏移地址两个属性 将括起的表达式作为存储器地址$当前偏移地址:采用指定的段地址寄存器OFFSET 名字/标号返回名字或标

38、号的偏移地址SEG 名字/标号返回名字或标号的段地址坏柯靶狰缘狭转捉琵挪即侄惫梢杉退圭臭送槛苛叼屁艇娟桃推波函借仪悔第3章汇编语言程序格式第3章汇编语言程序格式60org $+10arraydb 45,45h.codemov ax,seg arraymov ds,axmov bx,offset array;等价于 lea bx,arraymov cl,array+4;等效于 mov cl,array4mov ax,es:2000h地址操作符实例地址操作符实例地址操作符实例地址操作符实例铝撤矮圈粟旋超竖闹恶堑恬恕稍翟秉惭看孜惫掇循签碍媚咕股案煞脾篓援第3章汇编语言程序格式第3章汇编语言程序格式6

39、1类型操作符l类型操作符对名字或标号的类型属性进行有关设置类型名 PTR 名字/标号THIS 类型名SHORT 标号TYPE 名字/标号SIZEOF 变量名LENGTHOF 变量名祁照吞帧啮锁孔嘿靶查煎哇铆擎证烯外畦端竣婪侠桐姚柞胞爱佯辰操佣蔽第3章汇编语言程序格式第3章汇编语言程序格式62类型名 PTR 名字/标号lPTR操作符使名字或标号具有指定的类型l类型名可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者是NEAR/FAR,还可以是由STRUCT、RECORD、UNION以及TYPEDEF定义的类型mov al,byte ptr w_var;w_var是一个字

40、变量jmp far ptr n_label;n_label是一个标号l使用PTR操作符,可以临时改变名字或标号的类型促粪跋琳触睛张忧貉巍憋池忆署筷当方腑映蔽乃邀详糟赁铰陇禄炮屑沿独第3章汇编语言程序格式第3章汇编语言程序格式63THIS 类型名l利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型b_var equ THIS byte;按字节访问变量b_var,但与w_var的地址相同w_var dw 10 dup(0);按字访问变量w_varf_jump equ THIS far;用f_jump为段间转移(f_jump label far)n_jump: mov ax,w_va

41、r;用n_jump为段内近转移,但两者指向同一条指令lLABEL伪指令的功能等同于“EQU THIS”圆臆剁魔煤米撰楔宣梨灵摊样然跨树恍操怨裴岛映朋磺墟麦渡迎裸隙捣虽第3章汇编语言程序格式第3章汇编语言程序格式64SHORT 标名l指定标号作为-128+127字节范围内的短转移jmp short n_jumpl当然,如果标号实际上超出了这个范围,则出错。戎晃渤墩梨缺有塞沙螺魂勿撒荡戮鹏前驱琼节器律袖果愁蛆膝溜兴爷阐倡第3章汇编语言程序格式第3章汇编语言程序格式65TYPE 名字/标名l返回表明名字或标号类型的一个字量数值q对字节、字和双字变量依次返回1、2和4;q对短、近和远转移依次返回ff0

42、1h、ff02h和ff05hmov ax,TYPE w_var;汇编结果为mov ax,2mov ax,TYPE n_jump;汇编结果为 mov ax,0ff02h(near标号)l操作符SIZEOF返回整个变量占用的字节数lLENGTHOF返回整个变量的数据项数(即元素数) SIZEOF LENGTHOF TYPE蜂清攒款疡趁娇滨拾崔特匆嚏董粘刨蚜躬囱碧凌橱吱奈傈闽疑抠颧氨赂愚第3章汇编语言程序格式第3章汇编语言程序格式66.model small.stack.datav_byteequ this byte ;v_byte是字节类型,与变量v_word的地址相同v_worddw 3332h

43、,3735h;v_word是字类型的变量targetdw 5 dup(20h);分配数据空间2510字节crlfdb 0dh,0ah,$flagdb 0n_pointdw offset s_label;取得标号s_label的偏移地址例:属性及其应用例:属性及其应用纪琵橱委崔跟贸戚贯厅誊纹舟忙尿妆邮刃乓肯防洗干慈穆蚤碰锗汰巴龄筛第3章汇编语言程序格式第3章汇编语言程序格式67.code.startup mov al,byte ptr v_word ;用PTR改变v_word的类型,否则类型不匹配 dec al mov v_byte,al ;对v_word的头一个字节操作,原为32H、现为31H

44、n_label: cmp flag,1 jz s_label;flag单元为1转移 inc flag jmp short n_label;进行短转移剩偿钎村即文以芬魔暖盏甥镍锨啮参擞懦茎烟撼吕嫡寻窒致肺忌揩呸横蛊第3章汇编语言程序格式第3章汇编语言程序格式68s_label:cmp flag,2jz next;flag单元为2转移inc flagjmp n_point ;段内的存储器间接寻址,转移到s_label标号处next:mov ax,type v_word ;汇编结果为mov ax,2mov cx,lengthof target ;汇编结果为mov cx,5导司包锻恭隅渭喧蹿隆帚即宫蟹

45、谋钢支佛倚饵嘉椽窃拴毁戚傅潦姿臭而支第3章汇编语言程序格式第3章汇编语言程序格式69mov si,offset targetw_again:mov si,ax;对字单元操作inc si;SI指针加2inc siloop w_again ;循环mov cx,sizeof target;汇编结果为 mov cx,0ahmov al,?mov di,offset targetb_again:mov di,al;对字节单元操作inc di;DI指针加1loop b_again ;循环揖厢滁迟廖送浅揉龄嘱烧界设遗阑信摩购锡捉您告披译仪了抓辆证擦粹钒第3章汇编语言程序格式第3章汇编语言程序格式70mov

46、dx,offset v_word ;显示结果:1357?mov ah,9int 21h.exit 0end思钟至运蛙苦沮皋鸳泞衙捞洒煎赞割悉卜翱醒谬塘书致衅沥栋季游豫辈浓第3章汇编语言程序格式第3章汇编语言程序格式713.4.1 建立汇编语言的工作环境 (1)编辑程序,如 EDIT.EXE (2)汇编程序,如 MASM.EXE (3)连接程序,如 LINK.EXE (4)调试程序,如 DEBUG.COM3.4.2 建立ASM文件 可以用编辑程序EDIT.EXE在磁盘上建立汇编语言源程序3.4.3 用MASM程序产生OBJ文件 源文件建立后,要用汇编程序对源文件汇编,汇编后产生二进制的目标文件(

47、.OBJ文件)3.4 汇编语言程序的上机过程囤蒙蔼诧役告俺代霸坊旺辅韩憾毫奏粥技陆县愚券迪休胳砂梦赋咳鄂扬切第3章汇编语言程序格式第3章汇编语言程序格式72汇编程序的输入文件是ASM文件,其输出文件可以有三个:第一个是OBJ文件,这是汇编的主要目的第二个是LIST文件,称为列表文件这个文件同时列出源程序和机器语言程序清单,并给出符号表,可使程序调试更加方便这个文件是可有可无的第三个是CRF文件,这个文件用来产生交叉引用表REF一般程序不需要建立此文件为了建立交叉引用表,必须调用CREF程序交叉引用表给出了用户定义的所有符号,对于每个符号列出了其定义所在行号及引用的行号汇编程序另一个重要功能:可

48、以给出源程序中的错误信息晌侠绎勉巫咯溅砧慧疤填雇卢豫掉桅搏霓掏蚊践吏超铱闷鹊鞋响咕溢帐乞第3章汇编语言程序格式第3章汇编语言程序格式733.4.4 用LINK程序产生EXE文件 产生二进制的目标文件(OBJ文件)后,还必须使用连接程序(LINK)把OBJ文件转换为可执行的EXE文件LINK程序有两个输入文件OBJ和LIB,OBJ是需要连接的目标文件,LIB则是程序中需要用到的库文件LINK有两个输出文件,一个是EXE文件,这是需要的可执行文件,另一个为MAP文件,它是连接程序的列表文件,它给出每个段在存储器中的分配情况3.4.5 程序的执行在建立了EXE文件后,可以直接从DOS执行程序牙胺藕差艳佃亮苛褐奇挥国间琅龋馏坑茬篡隙疥警证况找寐宇羌肠灶疫割第3章汇编语言程序格式第3章汇编语言程序格式74总结详述汇编语言程序格式的组成部分简单介绍了汇编程序的功能重点介绍了各伪操作指令介绍汇编语言程序的上机过程林泳泣韶骸鸟骚叙助匝副售嚏疽篱媒螺冤虞旭勿习商薯帅畅虎夜院庆痊吠第3章汇编语言程序格式第3章汇编语言程序格式75

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号