汇编语言程序设计68.pptx
《汇编语言程序设计68.pptx》由会员分享,可在线阅读,更多相关《汇编语言程序设计68.pptx(83页珍藏版)》请在咨信网上搜索。
1、汇编语言程序设计汇编语言程序设计 吴吴 向向 军军中山大学计算机科学系中山大学计算机科学系2003.03.20第第6章章 程序的基本结构程序的基本结构6.1.1 段的定义段的定义 在定义段时,每个段都有一个段名。在取段名时,要取一个具有一定含义的段名。段定义的一般格式如下:段名 SEGMENT 对齐类型 组合类型 类别 ;段内的具体内容段名 ENDS 其中:“段名”必须是一个合法的标识符,前后二个段名要相同。可选项“对齐类型”、“组合类型”和“类别”的说明作用请见6.3节中的叙述。段的长度是指该段所占的字节数:u如果段是数据段,则其长度是其所有变量所占字节数的总和;u如果段是代码段,则其长度是
2、其所有指令所占字节数的总和。在通常情况下,一个段的长度不能超过64K,在80386及其以后系统的保护方式下,段基地址是32位,段的最大长度可达4G。6.1 源程序的基本组成源程序的基本组成第第6章章 程序的基本结构程序的基本结构一个数据段的定义例子:DATA1 SEGMENTword1DW1,9078H,?byte1DB21,WorldDD12345678HDATA1 ENDS一个代码段的例子:CODE1 SEGMENTMOVAX,DATA1;把数据段DATA1的段值送AXMOVDS,AX;把AX的值送给DS,即:DS存储数据段的段值MOVAX,4C00HINT21H;调用DOS功能,结束程序
3、的运行CODE1 ENDS第第6章章 程序的基本结构程序的基本结构6.1.2 段寄存器的说明语句段寄存器的说明语句 在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下:ASSUME 段寄存器名:段名,段寄存器名:段名,其中:段寄存器是CS、DS、ES、SS、FS和GS,段名在段定义语句说明。例如,ASSUME CS:CODE1,DS:DATA1 说明了:CS对应于代码段CODE1,DS对应于数据段DATA1。在ASSUME语句中,还可以用关键字NOTHING来说明某个段寄存器不与任何段相对应。下面语句说明了段寄存器ES不与某段相对应。
4、ASSUME ES:NOTHING 在通常情况下,代码段的第一条语句就是用ASSUME语句来说明段寄存器与段之间的对应关系。在代码段的其它位置,还可以用另一个ASSUME语句来改变前面ASSUME语句所说明的对应关系,这样,代码段中的指令就用最近的ASSUME语句所建立的对应关系来确定指令中的有关信息。第第6章章 程序的基本结构程序的基本结构例6.1:汇编语言段及其段说明语句的作用。DATA1SEGMENT;定义数据段DATA1word1DW5678hbyte1DB“ABCDEFG”DATA1ENDSDATA2SEGMENT;定义数据段DATA2word2DW1234hword3DW9876h
5、DATA2ENDSDATA3SEGMENT;定义数据段DATA3byte2DB?DATA3ENDS第第6章章 程序的基本结构程序的基本结构CODE1 SEGMENT;编写代码段CODE1ASSUME CS:CODE1,DS:DATA1,ES:DATA2;MOVAX,DATA1;MOVDS,AX;MOVAX,DATA2;MOVES,AX;MOVAX,word1;访问段DATA1中的字变量word1MOVword2,AX;访问段DATA2中的字变量word2ASSUME DS:DATA3,ES:NOTHING;MOVAX,DATA3MOVDS,AXMOVBL,byte2;访问段DATA3中的变量b
6、yte2MOVAX,4C00H;INT21H;CODE1 ENDS第第6章章 程序的基本结构程序的基本结构6.1.3 堆栈段的说明堆栈段的说明在源程序中,可用以下方法来定义堆栈段。方法1:Stack1SEGMENTDB256 DUP(?);256是堆栈的长度,可根据需要进行改变TOPLABEL WORDStack1ENDS 由于堆栈是按地址从大到小的存储单元顺序来存放内容的,所以,在堆栈存储单元说明语句之后,再说明一个栈顶别名,这样,对SP的赋值就很方便。在源程序中,还要添加如下程序段,才能把段Stack1当作堆栈段来使用。ASSUME SS:STACK1;可在代码段的段指定语句中一起说明CL
7、I;禁止响应可屏蔽中断MOVAX,STACK1MOVSS,AXMOVSP,offset TOP;给堆栈段的栈顶寄存器SP赋初值STI;恢复响应可屏蔽中断第第6章章 程序的基本结构程序的基本结构方法2:STACK1SEGMENT STACK;定义一个堆栈段,其段名为STACK1DB256 DUP(?)STACK1ENDS 上述段定义说明了该段是堆栈段,系统会自动把段寄存器SS和栈顶寄存器SP与该堆栈段之间建立相应的关系,并设置其初值,而不用在代码段对它们进行赋值。除了以上二种方法外,还有一种更简洁的方法来定义堆栈段,有关内容请见第6.4.2节中的叙述。第第6章章 程序的基本结构程序的基本结构6.
8、1.4 源程序的结构源程序的结构例6.2:在屏幕上显示字符串“Hello,World.”STACK1SEGMENT STACK;定义堆栈段STACK1DB 256 DUP(?)STACK1ENDSDATA1SEGMENT;定义数据段DATA1MSGDB“Hello,World.$”DATA1ENDSCODE1 SEGMENT;编写代码段CODE1ASSUME CS:CODE1,DS:DATA1START:MOVAX,DATA1MOVDS,AXMOVDX,offset MSGMOVAH,9INT21H;中断21H的9H号功能,显示DS:DX指向的字符串MOVAX,4C00HINT21HCODE1
9、 ENDSENDSTART;源程序的结束语句 伪指令END表示源程序到此为止,汇编程序对该语句之后的任何内容都不作处理,所以,通常情况下,伪指令END是源程序的最后一条语句。伪指令END后面可附带一个在程序中已定义的标号,该标号指明程序的启动位置。如果源程序是一个独立的程序或主模块,那么,伪指令END后面一定要附带一个标号;如果源程序仅是一个普通模块,那么,其END后面就一定不能附带标号。第第6章章 程序的基本结构程序的基本结构6.2.1 顺序结构顺序结构在学习高级语言程序设计时,我们知道了程序的三大主要结构:顺序结构、分支结构和循环结构。在汇编语言的源程序也同样有此三大结构,所不同的是它们的
10、表现形式不同。用高级语言编写程序时,由于不使用“转移语句”而使这三种结构清晰明了。6.2 程序的基本结构程序的基本结构 顺序结构是最简单的程序结构,程序的执行顺序就是指令的编写顺序,所以,安排指令的先后次序就显得至关重要。另外,在编程序时,还要妥善保存已得到的处理结果,为后面的进一步处理直接提供前面的处理结果,从而避免不必要的重复操作。例6.3 编写程序段,完成下面公式的计算。A(X-Y+24)/Z的商,B(X-Y+24)/Z的余数其中:变量X和Y是32位有符号数,变量A,B和Z是16位有符号数。第第6章章 程序的基本结构程序的基本结构6.2.2 分支结构分支结构例6.5 已知字节变量CHAR
11、1,编写一程序段,把它由小写字母变成大写字母。例6.6 编写一程序段,计算下列函数值。其中:变量X和Y是有符号字变量。例6.7 把下列C语言的语句改写成等价的汇编语言程序段(不考虑运算中的溢出)。If(a+b 0&c%2=0)a=62;else a=21;其中:变量a、b和c都是有符号的整型(int)变量。第第6章章 程序的基本结构程序的基本结构分支伪指令的具体格式如下:格式1:.IF condition 指令序列.ENDIF格式2:.IF condition 指令序列1.ELSE 指令序列2.ENDIF格式3:.IF condition1 指令序列1.ELSEIF condition2 指令
12、序列2.ENDIF 其中:条件表达式“condition”的书写方式与C语言中条件表达式的书写方式相似,也可用括号来组成复杂的条件表达式。第第6章章 程序的基本结构程序的基本结构 条件表达式中可用的操作符有:=(等于)、!=(不等)、(大于)、=(大于等于)、(小于)、=(小于等于)、&(位操作与)、!(逻辑非)、&(逻辑与)、|(逻辑或)等。若在条件表达式中检测标志位的信息,则可以使用的符号名有:CARRY?(相当于CF=1)、OVERFLOW?(OF=1)、PARITY?(PF=1)、SIGN?(SF=1)、ZERO?(ZF=1)等。例如:.IF CARRY?&AX!=BX;检测CF=1且
13、AX!=BX是否成立;汇编语言指令序列.ENDIF 在指令序列中,还可再含有其它的.IF伪指令,即:允许嵌套。伪指令.ELSEIF引导出另一个二叉分支,但它不能作伪指令块的第一个伪指令。第第6章章 程序的基本结构程序的基本结构6.2.3 循环结构循环结构 循环结构是一个重要的程序结构,它具有重复执行某段程序的功能。通常,循环结构包括以下四个组成部分:u循环初始化部分初始化循环控制变量、循环体所用到变量;u循环体部分循环结构的主体;u循环调整部分循环控制变量的修改、或循环终止条件的检查;u循环控制部分程序执行的控制转移。第第6章章 程序的基本结构程序的基本结构一、用循环指令构成循环结构例6.10
14、:分类统计字数组data中正数、负数和零的个数,并分别存入内存字变量Positive、Negative和Zero中,数组元素个数保存在其第一个字中。例6.11:把数组score的平均值(取整)存入字变量Average中,数组以负数为结束标志。第第6章章 程序的基本结构程序的基本结构二、用伪指令实现的循环结构 在宏汇编MASM 6.11系统中,增加了表达循环结构的伪指令:WHILE循环、REPEAT-UNTIL循环。另外,还增加两个辅助循环的伪指令。循环伪指令的格式和含义如下:1、WHILE型循环伪指令.WHILE condition 循环体的指令序列;条件condition”成立时所执行的指令
15、序列.ENDW其中:.ENDW与前面的.WHILE相匹配,它标志着其循环体到此结束。如果条件表达式“condition”在循环开始时,就为“假”(false),那么,该循环体一次也不会被执行。第第6章章 程序的基本结构程序的基本结构2、REPEAT型循环伪指令.REPEAT.REPEAT 循环体的指令序列 循环体的指令序列.UNTIL condition.UNTILCXZ condition REPEAT型循环在执行完循环体后,才判定逻辑表达式condition的值。若该表达式的值为真,则终止该循环,并将执行伪指令.UNTILCXZ后面的指令,否则,将向上跳转到伪指令.REPEAT之后的指令,
16、为继续执行其循环体作准备。如果.UNTILCXZ后面没有写逻辑表达式,那么,由.REPEAT.UNTILCXZ所构成的循环与用LOOP指令所过程的循环是一致的,它们都是以“CX=0”为循环终止条件。如果.UNTILCXZ后面书写了逻辑表达式,那么,该逻辑表达式的形式只能是:“EXP1=EXP2”或“EXP1!=EXP2”。所以,这时由“.REPEAT.UNTILCXZ condition”所构成的循环就与用LOOPNE/LOOPE指令所过程的循环是一致的,它们都是以“condition|CX=0”为循环终止条件。.REPEAT.UNTILCXZ的循环体也会至少被执行一次。.WHILE.ENDW
17、和.REPEAT.UNTILCXZ的循环体内还可再含有循环伪指令,这样就构成了循环结构的嵌套。第第6章章 程序的基本结构程序的基本结构3、辅助循环伪指令n终止循环伪指令.BREAK.BREAK .IF condition 该伪指令用来终止包含它的最内层循环。前者是无条件终止循环,后者是仅当逻辑表达式condition为真时,才终止循环。.WHILE 1.REPEAT .BREAK.IF condition .BREAK.IF condition .ENDW.UNTIL 0 对于以上二个循环,如果没有指令来终止循环的话,它们都将进入死循环状态,但如果在该层循环体内,存在伪指令“.BREAK.IF
18、 condition”的话,那么,当逻辑表达式condition为真时,该循环就会被终止了。第第6章章 程序的基本结构程序的基本结构n循环继续伪指令.CONTINUE.CONTINUE .IF condition 该伪指令用于直接跳转到包含它的最内层循环的计算循环条件表达式的代码处。前者是无条件转移到计算循环条件表达式的代码处,后者是仅当条件表达式condition为真时,才进行这样的跳转。辅助循环伪指令.BREAK和.CONTINUE只能在伪指令.WHILE.ENDW和.REPEAT.UNTIL的循环体内使用。例6.12 显示9个数字字母19,26个大写字母,和显示任意输入的数字字符,并用按
19、“回车”键来结束本程序的运行。第第6章章 程序的基本结构程序的基本结构 段定义的一般格式如下:段名 SEGMENT 对齐类型 组合类型 类别 段名 ENDS 段属性“对齐类型”、“组合类型”和“类别”要按此顺序说明,但这些选项可根据需要选择书写。如果源程序中不指定某个属性,那么,汇编程序将使用该属性的缺省值。程序中的段名可以是唯一的,也可以与其它段同名。在同一模块中,如果有二个段同名,则后者被认为是前段的后续,这样,它们就属同一段。当同一模块出现二个同名段时,则后者的可选项属性要么与前者相同,要么不写其属性而选用前者的段属性。略。6.3 段的基本属性段的基本属性第第6章章 程序的基本结构程序的
20、基本结构程序存储模式说明伪指令的格式如下:.MODEL 存储模式,语言类型,操作系统类型,堆栈类型 程序可选的存储模式有:TINY、SMALL、COMPACT、MEDIUM、LARGE、HUGE和FLAT。伪指令.MODEL必须写在源程序的首部,且只能出现一次,其前内容只能是注释。如果用伪指令来指定程序所遵循的语言类型,那么,将不允许子程序的嵌套定义。6.4 简化的段定义简化的段定义6.4.1 存储模型说明伪指令存储模型说明伪指令第第6章章 程序的基本结构程序的基本结构lTINY 该存储类型是为编写COM文件类型而设置的。程序员还可用汇编命令行选项/AT和连接命令选项/TINY来达到此目的。l
21、SMALL 所有的数据变量必须在一个数据段之内,所有的代码也必须在一个代码段之内。该存储类型是独立汇编语言源程序常用的存储模型。lMEDIUM 所有的数据变量必须在一个数据段之内,但代码段可以有多个。在这种模型下,数据段寄存器的内容保持不变,转移可以是段间转移。lCOMPACT 数据段可以有多个,但代码段只能有一。lLARGE 数据段和代码段都可以有多个,但一个数组的字节数不能超过64KB。lHUGE 数据段和代码段都可以有多个,一个数组的字节数也可以超过64KB。lFLAT FLAT存储模式在创建执行文件时,将使该程序仅含一个包括程序数据和代码的32位段,并且只能在80386及其以后的计算机
22、系统中运行。该程序的文件类型为EXE。第第6章章 程序的基本结构程序的基本结构程序存储模式说明伪指令的格式如下:.MODEL 存储模式,语言类型,操作系统类型,堆栈类型 程序可选的存储模式有:TINY、SMALL、COMPACT、MEDIUM、LARGE、HUGE和FLAT。伪指令.MODEL必须写在源程序的首部,且只能出现一次,其前内容只能是注释。如果用伪指令来指定程序所遵循的语言类型,那么,将不允许子程序的嵌套定义。6.4.2 简化段定义伪指令简化段定义伪指令第第6章章 程序的基本结构程序的基本结构u代码段定义.CODE 作用:说明其下面的内容是代码段中内容。u堆栈段定义.STACK 堆栈
23、字节数 其中,“堆栈字节数”可以不写,其缺省值为1024B。u数据段定义.DATA/.DATA?/.CONST 作用:说明其下面的内容是数据段中的变量定义。在一个源程序中,可以有多个伪指令“.DATA”定义的数据段,这就好象在源程序中定义多个同段名的数据段一样。伪指令“.DATA?”说明下面是一个未初始化数据段的开始,伪指令“.CONST”说明下面是一个常数数据段的开始。u远程数据段定义.FARDATA 段名/.FARDATA?段名 其中:“段名”是可选项,如果不指定的话,则该段名就取其缺省段名。作用:说明一个独立的数据段。伪指令“.FARDATA?”说明下面是一个未初始化的、独立数据段的开始
24、。第第6章章 程序的基本结构程序的基本结构表6.3 小模式下简化段定义的缺省属性表6.4.3 简化段段名的引用简化段段名的引用伪指令缺省段名对齐类型组合类型类别段组名.CODE_TEXTWORDPUBLICCODE.FARDATAFAR_DATAPARANONEFAR_DATA.FARDATA?FAR_BSSPARANONEFAR_BSS.STACKSTACKPARASTACKSTACKDGROUP.DATADATAWORDPUBLICDATADGROUP.DATA?BSSWORDPUBLICBSSDGROUP.CONSTCONSTWORDPUBLICCONSTDGROUP第第6章章 程序的基
25、本结构程序的基本结构 在汇编程序MASM中,提供了二组简化的代码伪指令:.STARTUP和.EXIT。.STARTUP在代码段的开始用于自动初始化寄存器DS、SS和SP;.EXIT用于结束程序的运行,它等价于下列二条语句:MOVAH,4CHINT21h 当使用汇编程序TASM时,以上二条伪指令分别改为:STARTUPCODE和EXITCODE。例6.16:.MODEL SMALL.STACK 128.DATA MSG DBSimplified Segment Directives.$.CODE .STARTUP;自动初始化寄存器DS、SS和SP MOVDX,offset MSG MOVAH,9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 68
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。