




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4 汇编语言程序设计,4.1.1 汇编语言程序格式4.1.2 伪指令语句4.1.3 完整的汇编语言程序框架,主要内容4-1 汇编语言程序格式和伪指令(难点)汇编语言程序格式伪指令语句完整的汇编语言程序框架4-2 DOS系统功能调用和BIOS中断调用DOS系统功能调用BIOS中断调用4-3 汇编程序设计方法与实例(重点)顺序程序设计分支程序设计循环结构程序子程序调用,4 汇编语言程序设计,源程序.asm,S2 汇编使用汇编程序翻译(MASM),目标代码(.obj)列表文件(.lst)交叉索引文件(.crf),程序算法数据结构,S1 编辑使用编辑程序编辑,可执行程序.exe,S3 连接使用连接程序组合(LINK),汇编程序开发过程,汇编语言程序汇编语言程序是由语句构成的,语句分为指令性语句和伪指令语句指令性语句(Instruction)要求CPU在可执行程序运行过程中的进行的操作行为,该指令产生机器码,存储在程序存储器中伪指令语句(Directive)要求汇编程序在汇编过程中进行的操作行为,在汇编过程结束后,伪指令不再保留任何痕迹,不产生机器码,不占用程序存储器空间,汇编语言程序格式和伪指令,指令性语句格式标号:指令符 操作数,操作数;注释1) 标号字段标号代表本指令的符号地址,必须跟冒号“:”,这是与伪指令语句的突出区别2) 指令符字段 指令助记符与CPU的指令机器码对应,决定于CPU的要求3) 操作数字段可以由常数、变量、表达式构成。 4) 注释字段 从“;”开始,直到行尾。行汇编程序,按行进行汇编,汇编语言程序格式和伪指令,伪指令语句格式名字 伪指令符 操作数,操作数;注释1) 名字字段: 字母打头, 名字后不能用冒号“:”,这是与指令 性语句的突出区别2) 伪指令字段 例如:数据定义:DB,DW,段定义:SEGMENT,ENDS3) 操作数字段 可以由常数、符号、表达式构成 4) 注释字段 从“;”开始,直到行尾。行汇编程序,按行进行汇编,汇编语言程序格式和伪指令,2.变量变量是代表存放在存储单元的数据变量名,可认为是存放数据的存储单元的符号地址变量的属性:段值(SEG)偏移地址(OFFSET)类型(BYTE,WORD,DWORD),数据项,1.常数:(1)数字常量: (2)字符串常量:ASCII码,3.标号标号是一条指令代码的符号地址,该指令第1个字节存储单元属性有: 段 值(SEG) 偏移量(OFFSET) 距离属性:NEAR(近),只能被本段内访问 FAR(远),可以被其它段访问,表达式将常数、符号等数据项通过运算符连接起来的算式由汇编程序在汇编过程中计算,汇编结束时,为确定值,表达式和运算符,表达式和运算符,表达式和运算符,表达式中包含多个运算符时按运算符的优先级从高到低顺序计算优先级相同的运算符,按从左到右的顺序计算,4.1.1 汇编语言程序格式4.1.2 伪指令语句4.1.3 完整的汇编语言程序框架,段定义语句的一般形式: 段名SEGMENT 定位类型 组合类型 分类名 PAGE(页) *NONE STACK *PARA(节) PUBLIC CODE WORD(字) STACK BYTE(字节) COMMON AT MEMORY ;段中内容段名ENDS加“”项可省略,但堆栈段的组合类型是STACK,不可省略省略项不写时,其值用带“*”的项,它们是隐含用法,用的是默认值,伪指令段定义, 内3个参数的功能:1)定位类型(Align Type)用LINK程序将程序中的段相互衔接时,用定位类型来确定该段存储器的起始边界要求。定位类型有四种: PAGE该段起始地址能被256(页)整除 PARA该段起始地址能被16(节)整除 WORD该段起始地址能被2(字节)整除 BYPE起始地址可从任何地方开始,伪指令段定义,2)组合类型(Combine-Type)组合类型告诉LINK程序本段与其它段关系,包括:NONE 与其它段不连接,各段有独立段基址和偏移量PUBLIC 同名同类别模块段连接成一段,段基址同, 偏移量不同COMMON 本段与其它段覆盖,偏移地址名称不同。STACK 这是堆栈段,不可省略MEMORY 连接时该段放在所有段最后(最高地址)AT 定义本段的段基地址。如:AT 2000H定义该段的段基地址为20000H。3)分类名(class)LINK将分类名相同的逻辑段组成1个段组,分类名有STACK,CODE和DATA等。,伪指令段定义,段定义语句SEGMENT和ENDS,用来定义一个逻辑段。例 用段定义语句定义一个数据段, 段名为DATA, 段中包含X、Y两个变量。DATA SEGMENT;数据段开始,DATA为段名;表示该段的基址X DW 1234H;变量X的段基址:偏移量;=DATA:0000,内容为1234HY DB 56H;变量Y的段基址:偏移量;=DATA:0002,内容为56HDATA ENDS;数据段结束,伪指令段定义,段分配语句ASSUME告诉汇编程序,4个段寄存器CS、DS、SS、ES分别与哪些段有关。格式如下,也可分两行书写。 ASSUMECS:代码段名,DS:数据段名 ASSUMESS:堆栈段名,ES:附加段名,伪指令段分配,子程序或过程(Procedure)定义格式 过程名PROCNEAR/FAR ;过程内容RET;过程的最后一条指令 过程名ENDP用指令性语句CALL调用过程 CALL过程名过程名像标号一样,有3种属性:段基址、偏移地址和距离属性(NEAR或FAR),它可作为CALL指令的操作数,伪指令过程定义,程序结束语句的格式为: END 标号名或名字它位于程序的最后一行,指示源程序结束,遇到END伪指令则停止汇编。标号名或名字可省略。,伪指令程序结束,格式:变量名 伪指令助记符 操作数,操作数,;注释变量名 伪指令助记符 N dup(操作数,操作数 );注释,变量名用符号表示,可以省略,表示第一个操作数的最低字节所在存储单元的符号地址,属性有段基址、偏移地址、类型,功能:把操作数按从低地址到高地址的顺序依次存放到“变量名”指定的存储单元中,或者只分配存储空间而不存入数据。,操作数可以是常数、字符串、变量、标号,表达式。多个操作数之间必须用逗号“,”分隔,N dup():表示()里的内容复制 N 次,并依次连续存放,伪指令包括DB、DW、DD、DQ、DT,分别定义每个操作数为字节、字、双字、8字节、10字节变量,伪指令变量定义,例: 操作数是常数或表达式DA1DB 10H,52HDA2DW1122H,34HDA3DD5*20H,0FFEEH,伪指令变量定义,例: 操作数是字符串FIRSTDB ABCDESECONDDWOKTHIRDDBOK,注意:字符串操作数存储对应的ASCII码;字符串一般用DB定义,按照从前到后的顺序存放;当只有两个字符时,可用DW定义,但要注意存放顺序;多于两个字符,只能用DB定义;,伪指令变量定义,例: 用?定义不确定值的变量M1DB ?M2DW0D55H,?,注意:?只保留存储空间,其初值无意义,伪指令变量定义,例: 用 dup 定义重复数值ONE DB 3 DUP(0)TWO DW2 DUP(1,2)ARYDB3 DUP (4 DUP (0),伪指令变量定义,例: 用 dup 嵌套定义重复数值THREE DB2 DUP(1,2 DUP(20H,21H),01H,20H,21H,伪指令变量定义,例:有如下定义TABLE1 DD 0,1,2,3 TABLE2 DB 30H,31H,32H,33HTABLE3 DB 12345678910 ZER DW 8 DUP(0)DEM DB HELLO?判断下列指令是否正确:1. MOV AX,TABLE1 2. MOV BX,TABLE23. MOV AL, TABLE34. MOV AX, WORD PTR TABLE1, ,伪指令变量定义,1)等值伪指令EQU使用EQU语句可使程序更清晰、易读,其格式为: 符号名 EQU 变量、标号、常数等例4.12 EQU伪指令语句举例。 Profit EQU 10;常数值10赋给符号名ProfitCNT1 EQU 41H;常数值41H赋给符号名CNT1COUNT EQU 8;常数值8赋给COUNT,伪指令其它伪指令,例: PORT1 EQU 3 PORT2 EQU PORT1+2 PORT3 EQU PORT2 CONT EQU CX 即: PORT1=3 ,PORT2=5 PORT3=5 ,CX与CONT意义相同 PURGE PORT1 ;解除PORT1的赋值 PORT1 EQU 10 即: PORT1 = 10,例:有如下定义TABLE DW 30H,31H,32H,33HPORT EQU 03F8H比较:1. MOV AX,TABLE 2. MOV DX,PORT,2)定义类型伪指令LABEL其作用与PTR类似,格式为:名字 LABEL 类型 它将LABEL左边的名字定义为右边的类型。例4.13 LABEL伪指令举例。BARRY LABELBYTE ;将BARRY定义为字节变量TOP LABELWORD;将TOP定义为字变量SUBRT LABELFAR;将SUBRT定义为FAR标号,伪指令其它伪指令,例: LABEL 与变量连用DATBLABELBYTEDATWDW3031H,3233HMOVAL,DATB0MOVAX,DATW1,例: LABEL 与标号连用DISFLABELFARDISN:MOVAX,SI,例: LABEL 在堆栈段中的应用STACKSEGMENTSTACKSTACKDW100 DUP(?)TOPLABELWORDSTACKENDS,3)对准伪指令EVEN将下一语句指向的地址调整为偶地址,确保存取一个字数据只要进行一次操作。例4.14 对准伪指令举例。DATA SEGMENTX DBM;X变量的偏移地址为0 EVEN;将下一语句指向地址调整为偶数Y DW 100 DUP(?);Y变量从地址为02H处开始存放DATA ENDS,伪指令其它伪指令,4)ORG伪指令为下面一条伪指令或指令性语句指定起始的偏移地址,可放在程序的任何位置上。例4.15 ORG伪指令举例。DATA SEGMENT ORG 1200H;A1变量偏移地址为1200H A1 DB 12H,34H ORG 2000H ;A2变量偏移地址为2000HA2 DW 3040H,2830H DATA ENDS,伪指令其它伪指令,CODE SEGMENT ORG 400H;此段代码段起始地址偏移量为400H ASSUME CS:CODE,DS:DATA CODE ENDS,伪指令其它伪指令,5)地址计数器 $功能:$ 表示当前正在汇编的指令性指令或伪指令的偏移地址。,例: $ 在代码段中的应用JMP$等价于:LP:JMPLP,$ 在指令性语句中代表这条指令的第一个字节的地址,例: $ 在数据段中的应用ABCDW1,2,$+4,0AH,0DH,$+3,假设 ABC 对应的偏移地址为1000H,则:$+4中的$=1004H, $+3中的$=100AH, ABC 在内存中的存放结果为:,$ 在伪指令中表示地址计数器当前值,6)模块连接伪指令PUBLIC和EXTRNPUBLIC和EXTRN伪指令用于解决模块连接问题。PUBLIC将标号、变量或数据定义为公共的,可供其它模块使用;EXTRN引用其它模块中已用PUBLIC伪指令定义过的标号和变量。,伪指令其它伪指令,DATA SEGMENTA1DB30H,31H;定义变量 A2DW 1234HA3DB 100 DUP (?)DATAENDS;CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA SUBRT: SUBRT LABEL FAR;SUBRT为远标号PUBLIC A1,A2,SUBRT;声明A1,A2,SUBRT为公用 CODE ENDS,伪指令其它伪指令,例4.16 PUBLIC和EXTRN伪指令应用举例,PDATA SEGMENTP1 DB 20HP2 DW 3580HPDATA ENDSPCODE SEGMENTEXTRA A1:BYTE,A2:WORD,SUBRT:FAR ;其它模块中用PUBLIC定义过的A1、A2、SUBRT可供本模块引用MAIN:MOV AX,PDATAMOV BX,OFFSET A1 ;引用变量A1MOV DI,OFFSET A2 ;引用变量A2JMP SUBRT ;引用其它模块的SUBRTPCODE ENDS END MAIN;程序结束,从MAIN语句开始,伪指令其它伪指令,4.1.1 汇编语言程序格式4.1.2 伪指令语句4.1.3 完整的汇编语言程序框架,4.1.3 完整的汇编语言程序框架,完整的汇编语言程序包含数据段、代码段、堆栈段和附加数据段。其中代码段是必须要有的;堆栈段根据情况设置;代码段中要用到变量或数据时,应该设置数据段。当代码段中有字符串操作指令时,不仅要设置数据,还必需设置附加段,而且必须将源串存放在数据段中,而把目的串放在附加段中。下面先给出程序框架,再介绍如何设置堆栈段,以及程序结束后怎样返回DOS操作系统。,1. 程序框架,例4.17 汇编语言程序框架。DATASEGMENT;数据段 XDB ? YDW ?DATAENDS;EXTRASEGMENT;附加段ALPHADB ?BETADW ?EXTRAENDS;STACKSEGMENT PART STACK STACK ;堆栈段STAPNDB 100 DUP(?);定义100字节空间TOPEQU LENGTH STAPNSTACKENDS,CODESEGMENT;代码段MAINPROC FAR;过程定义语句;说明4个段寄存器分别与哪些段有关ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACKSTART:MOV AX,STACK;设堆栈段寄存器SS: SPMOV SS,AXMOV SP,TOPPUSH DS;DS入栈保护,返回DOS用SUB AX,AX;AX=0PUSHAX;段内偏移量“0”入栈MOV AX,DATA;AX 数据段基址DATAMOV DS,AX;DS 数据段基址DATAMOV AX,EXTRAMOV ES,AX;ES 附加段基址EXTRA ;用户要编写的程序内容RET ;返回DOSMAINENDP;MAIN过程结束CODE ENDS ;代码段结束END MAIN;整个源代码结束,1. 程序框架,代码段、数据段、附加段和堆栈段,都用段定义伪指令SEGMENT和ENDS定义。数据段或附加段,用DB、DW等伪指令设置实际数值。堆栈段定义了100字节空间,其数值也可修改。代码段用来存放可执行的指令序列。这里用PROC FAR和ENDP伪指令将整个程序编写成一个远过程的形式,过程名为MAIN。最后一条指令语句为过程返回指令RET,使程序执行完后返回到调用它的地方。MAIN过程中,首先用段分配伪指令ASSUME告诉汇编程序,4个段寄存器分别与哪些段相对应,但不能将段基地址装入相应的段寄存器中,还要给DS、ES和SS寄存器赋初值,CS则由操作系统赋初值。对于堆栈段,要给SS和SP赋初值,以设定堆栈。,1. 程序框架,除了程序框架中给出的设置堆栈的方法外,还可用以下语句来设置堆栈:STACK SEGMENT STACK;设置堆栈段 DW 50 DUP(?);定义50个字空间,;偏移地址为0099TOP LABEL WORD ;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 各地区市场规模及增长趋势统计表
- 地理信息系统GIS应用实践操作题
- 国有企业财务内控管理的数字化转型路径
- 建立完善的反馈与监督机制以持续改进防治策略
- 乡村医疗卫生人才激励机制与职业发展支持
- 游戏娱乐行业市场份额报告表格
- 智慧中医医院质量控制与安全保障措施
- 现代汽车技术故障诊断与维修技能测试卷
- 激励机制在家庭医生签约服务中的优化策略
- 校园一角的美景描写周记(10篇)
- 2024风电场工程项目建设工期定额
- 广西版三年级美术下册全册教案
- 浙江省杭州市上城区2023-2024学年八年级下学期期末考试英语试题+
- 《生物安全培训》课件-2024鲜版
- 山东省临沂市郯城县2023-2024学年七年级下学期期末历史试题
- 2024年石家庄房展会城发投集团招聘笔试冲刺题(带答案解析)
- 2024年安徽省初中学业水平考试地理试卷(定心卷二)
- 生命哲学:爱、美与死亡智慧树知到期末考试答案章节答案2024年四川大学
- 供应链管理(山东联盟)-知到答案、智慧树答案
- 2023版毛概课后答案
- 碳13(C13)市场规模分析
评论
0/150
提交评论