《微机接口 第五章汇编语言功能幻灯片.ppt》由会员分享,可在线阅读,更多相关《微机接口 第五章汇编语言功能幻灯片.ppt(146页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微机接口第五章汇编语言功能第1页,共146页,编辑于2022年,星期六 汇编语言程序的格式汇编语言程序的格式 汇编语言程序的上机过程汇编语言程序的上机过程 伪指令语句伪指令语句 汇编语言程序设计的基本方法汇编语言程序设计的基本方法 本章内容本章内容本章内容本章内容第2页,共146页,编辑于2022年,星期六 了了解解汇汇编编语语言言程程序序的的基基本本格格式式,及及其上机过程。其上机过程。熟熟练练掌掌握握数数据据定定义义伪伪指指令令、段段定定义义伪伪指指令、符号定义伪指令、过程定义伪指令。令、符号定义伪指令、过程定义伪指令。熟熟练练掌掌握握汇汇编编语语言言程程序序设设计计的的一一般般步步骤骤以
2、以及及顺顺序序程程序序、分分支支程程序序、循循环环程程序序、子程序设计的方法。子程序设计的方法。学习目的学习目的学习目的学习目的第3页,共146页,编辑于2022年,星期六4.1 4.1 汇编语言与汇编程序汇编语言与汇编程序4.1.14.1.1汇编语言的基本概念汇编语言的基本概念汇编语言的基本概念汇编语言的基本概念1机器语言与汇编语言机器语言与汇编语言(MachineLanguageandAssemblyLanguage)由二进制代码由二进制代码0 0,1 1表示的指令称为表示的指令称为机器指令机器指令,相应的程序称为机器语言程序相应的程序称为机器语言程序。用用指指令令助助记记符符表表示示的的
3、指指令令称称为为汇汇编编语语言言指指令令,对应对应的程序称的程序称为汇编语为汇编语言程序。言程序。第4页,共146页,编辑于2022年,星期六 例例4-1将将4位二进制数转换为位二进制数转换为ASCII码字符。码字符。当数在当数在0000B-1001B时,对应的时,对应的ASCII码为码为09;当数在当数在1010B1111B时,对应的时,对应的ASCII码为码为AF。设待转换的数据已在累加器。设待转换的数据已在累加器AL中(低中(低4位)。位)。编制的机器语言程序与汇编语言程序编制的机器语言程序与汇编语言程序如下表所示。如下表所示。第5页,共146页,编辑于2022年,星期六地地 址址机器代
4、机器代码码对应对应的的汇编汇编指令指令E380:0000240FANDAL,0FHE380:00023C0ACMPAL,0AHE380:00047202JBNUME380:00060407ADDAL,07HE380:00080430NUM:ADDAL,30HE380:000AC3RET第6页,共146页,编辑于2022年,星期六2 2汇编语言与高级语言汇编语言与高级语言(Assembly Language and(Assembly Language and Computer-independent Language)Computer-independent Language)汇编语言汇编语言是
5、一种依赖于计算机微处理器的语言是一种依赖于计算机微处理器的语言 汇编语言汇编语言一般不具有通用性和可移植性一般不具有通用性和可移植性 进行进行汇编语言汇编语言程序设计必须熟悉机器的硬件资程序设计必须熟悉机器的硬件资 源和软件资源源和软件资源 高级语言高级语言是面向过程的语言是面向过程的语言 高级语言高级语言具有很好的通用性和可移植性具有很好的通用性和可移植性 第7页,共146页,编辑于2022年,星期六学习汇编语言的必要性学习汇编语言的必要性1.利用汇编语言可以设计出效率极高的核心底层程序。2.用汇编语言编写的程序一般比用高级语言编写的程序执行得快,且所占内存较少。3.汇编语言程序能够直接有效
6、地利用机器硬件资源。4.学习汇编语言对于理解和掌握计算机硬件组成及工作原理是十分重要的。第8页,共146页,编辑于2022年,星期六4.1.24.1.2汇编语言源程序的组成汇编语言源程序的组成汇编语言源程序的组成汇编语言源程序的组成 1 1汇编语言源程序的结构汇编语言源程序的结构(Program Structure)(Program Structure)例例6-2 6-2 完整的汇编语言源程序示例。完整的汇编语言源程序示例。NAMEHEXTOASC;*DATASEGMENT;数据段定数据段定义义开始开始HEXDB5AHASCDB2DUP(?)DATAENDS;数据段定数据段定义结义结束束;*第
7、9页,共146页,编辑于2022年,星期六;*STACKSEGMENT;堆堆栈栈段定段定义义开始开始DB256DUP(S)TOPEQU$-STACKSTACKENDS;堆堆栈栈段定段定义结义结束束;*;*CODESEGMENT;代代码码段定段定义义开始开始ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;主程序开始主程序开始第10页,共146页,编辑于2022年,星期六 MOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPMOVBX,OFFSETASCMOVAL,HEXMOVAH,ALMOVCL,4SHRAL,CLCALLNEAR
8、PTRCONVERTHLT;主程序主程序结结束束第11页,共146页,编辑于2022年,星期六CONVERTPROC;过过程程(子程序子程序)定定义义开始开始ANDAL,0FHCMPAL,10JBNUMADDAL,7NUM:ADDAL,0RETCONVERTENDP;过过程程(子程序子程序)定定义结义结束束CODEENDS;代代码码段定段定义结义结束束;*ENDSTART;程序程序结结束束第12页,共146页,编辑于2022年,星期六要点总结:汇编语言源程序由汇编语言源程序由段结构段结构组成。组成。一个段一个段由由 “SEGMENTSEGMENT”(段定段定义义开始开始)和和“ENDSENDS
9、”(段定段定义结义结束束)语语句来定句来定义义。每个段都有每个段都有唯一的唯一的段名段名,前后一致。,前后一致。不同不同段段的段名不能相同。的段名不能相同。数据段、堆数据段、堆栈栈段和代段和代码码段的作用各不相同段的作用各不相同。各个段都由一系列各个段都由一系列语语句句组组成成。语语句包括句包括指令指令语语句和句和伪伪指令指令语语句句。第13页,共146页,编辑于2022年,星期六2 2汇编语言的语句格式汇编语言的语句格式(Statement Formats)(Statement Formats)汇编语言程序的每行语句由汇编语言程序的每行语句由14个部分组成。指令个部分组成。指令语句和伪指令语
10、句在格式上稍有区别,语句和伪指令语句在格式上稍有区别,指令指令语句的标号语句的标号后有冒号后有冒号“:”,而,而伪指令伪指令语句的标号后则没有冒号。语句的标号后则没有冒号。指令语句的格式为指令语句的格式为LABEL:OPERATIONOPERAND;COMMENT标号域标号域指令助记符域指令助记符域操作数域操作数域注释域注释域第14页,共146页,编辑于2022年,星期六伪指令语句的格式为伪指令语句的格式为LABELOPERATIONOPERAND;COMMENT标号域标号域伪指令助记符域伪指令助记符域操作数域操作数域注释域注释域一行最多可有一行最多可有132132个字符个字符注注:指令助记符
11、前面还可以有指令助记符前面还可以有前缀前缀。汇编语言程序语句中的四项,均可以用汇编语言程序语句中的四项,均可以用大大写写、小写小写或或混合编写混合编写。语句的各部分之间至少用一个语句的各部分之间至少用一个空格空格分开分开第15页,共146页,编辑于2022年,星期六3.3.3.3.标号标号标号标号(Label)Label)Label)Label)(含数据变量标号和程序位置标号含数据变量标号和程序位置标号含数据变量标号和程序位置标号含数据变量标号和程序位置标号)标标号号是一个自行设计的标识符或名称,最多可由31个字母、数字和特别字符(?、-、$)等组成。但不能用数字开头。不能用数字开头。不能为汇
12、编语言的保留字不能为汇编语言的保留字。注:保留字指有专门用途的字符或字符串,如CPU的寄存器名、指令助记符、伪指令助记符等。第16页,共146页,编辑于2022年,星期六(1)数据变量标号的三种属性数据变量标号的三种属性段值:段值:即所在段的段地址。偏移量:偏移量:即数据变量所在位置的地址与其段地址之差值。类型:类型:指该数据变量是字节、字还是双字。(2)程序位置标号的两种属性程序位置标号的两种属性NEAR段内调用或转移标号。FAR段间调用或转移标号。第17页,共146页,编辑于2022年,星期六4.4.4.4.操作数操作数操作数操作数域域域域(Operand Fields)(Operand
13、Fields)(Operand Fields)(Operand Fields)操操作作数数可可以以是是常常数数、变变量量、标标号号、寄寄存存器名器名或或表达式表达式(1)常常数数:二进制、八进制、十进制、十六进制或ASCII码字符串。(2)寄存器名寄存器名、标号标号、变量变量指令:指令:MOVAL,HEX中,中,AL为寄存器名,为寄存器名,HEX为变量名。为变量名。第18页,共146页,编辑于2022年,星期六(3)表表达达式式:由运运算算符符连接起来的式子叫表达式,按一定的规则对表达式进行运算后得到一个数值或一个地址。表达式可分为算算术术表表达达式式、逻逻辑辑表表达达式式、关关系系运算表达式
14、运算表达式、分析运算表达式分析运算表达式和合成运算表达式。合成运算表达式。第19页,共146页,编辑于2022年,星期六用算术运算符+、-、*、/和MOD连接的表达式。算术表达式算术表达式用逻辑运算符AND、OR、XOR和NOT连接的表达式。逻辑表达式逻辑表达式例如:例如:5*8+305*8+30,128/100128/100,206 MOD 128 206 MOD 128 等算术表达等算术表达式。式。第20页,共146页,编辑于2022年,星期六 逻辑表达式的结果可能为逻辑表达式的结果可能为8 8位或位或1616位二进制数,视位二进制数,视参加运算的数的字长而定。参加运算的数的字长而定。逻辑
15、运算指令中可以包含有逻辑表达式,如指令逻辑运算指令中可以包含有逻辑表达式,如指令ANDAL,10101010BAND0FH 左边第一个左边第一个AND为逻辑运算指令,第二个为逻辑运算指令,第二个AND为逻辑运算符,为逻辑运算符,10101010BAND0FH为逻辑表达式,为逻辑表达式,其结果在汇编时即已确定,为其结果在汇编时即已确定,为00001010B,故上述指令故上述指令等价于等价于ANDAL,00001010B第21页,共146页,编辑于2022年,星期六用EQ、NE、LT、GT、GE和LE连接的表达式。若条件成立,其值为1,否则为0。关系运算表达式关系运算表达式分析运算表达式把存储器操
16、作数分解为几个组成部分;而合成运算式是把这些组成部分综合为存储器操作数。分析运算表达式和合成运算表达式例如:指令例如:指令 MOVBX,5GT3等价于等价于MOVBX,0FFFFH第22页,共146页,编辑于2022年,星期六 分析运算表达式和合成运算表达式的操作对象分析运算表达式和合成运算表达式的操作对象都为都为存储器操作数存储器操作数。存储器操作数表示变量、符号地址、存储单元等与存存储器操作数表示变量、符号地址、存储单元等与存储器储器地址地址有关的量。有关的量。分析运算表达式把存储器操作数分析运算表达式把存储器操作数分解分解为几个部分,为几个部分,如分解出段值、偏移量、类型等;如分解出段值
17、、偏移量、类型等;合成运算表达式则把这些组成部分合成运算表达式则把这些组成部分综合综合为存储器为存储器操作数。操作数。幻灯片幻灯片 7777第23页,共146页,编辑于2022年,星期六4.2 4.2 伪指令伪指令指指令令语语句句:汇编程序把它们翻译成机器代码,命令8086执行对应操作。伪伪指指令令语语句句:汇编程序并不把它们翻译成机器代码,只是用来指示、引导汇编程序在汇编时做一些操作,它本身不占用存储单元。第24页,共146页,编辑于2022年,星期六*变量定义及存储器申请变量定义及存储器申请幻灯片幻灯片43*程序分段及存储器分配程序分段及存储器分配*过程定义过程定义*符号定义符号定义*程序
18、模块定义与通信程序模块定义与通信*宏定义及宏调用宏定义及宏调用*条件汇编条件汇编*格式控制,列表及其他功能格式控制,列表及其他功能伪指令主要分为下列几类:伪指令主要分为下列几类:第25页,共146页,编辑于2022年,星期六 段定义伪指令段定义伪指令段定义伪指令段定义伪指令SEGMENT/ENDSSEGMENT/ENDS1.SEGMENT和ENDS定义方式:定义方式:段名SEGMENT定位方式组合方式类别名语句1语句2段名ENDS第26页,共146页,编辑于2022年,星期六段段名名是赋予该段的一个名称,SEGMENT与ENDS成对出现,且前面的段名要相同,段名的取法与文件名、标号及变量名等相
19、同。段名段名第27页,共146页,编辑于2022年,星期六基本源程序结构段的定义 一般方法一般方法 使用特点使用特点使用特点使用特点先定义数据段先定义数据段先定义数据段先定义数据段 DSDS、附加段、附加段、附加段、附加段 ES、堆栈段、堆栈段、堆栈段、堆栈段 SS后编写代码段后编写代码段CS代码段代码段代码段代码段 CS必要必要数据段数据段DSDS充分充分充分充分附加段附加段附加段附加段 ESES重叠(与数据段重叠(与数据段DSDS同段)同段)堆栈段堆栈段堆栈段堆栈段 SS省缺省缺省缺省缺第28页,共146页,编辑于2022年,星期六基本源程序结构数据段(DS)的定义DATASEGMENTD
20、ATASEGMENT TABLETABLEDB01HDB01H,0ABH0ABH,AB2AB2 CNTEQU$-TABLECNTEQU$-TABLEX1DBDUPX1DBDUP(?,1 1,2DUP2DUP(0FFH0FFH)X2DW12ABHX2DW12ABHX3DDX1X3DDX1X4DWSEGX1X4DWSEGX1X5DD12345678HX5DD12345678HDATAENDSDATAENDS段名段名段名段名段定义伪指令段定义伪指令段定义伪指令段定义伪指令变量名变量名变量名变量名常量名常量名常量名常量名第29页,共146页,编辑于2022年,星期六基本源程序结构过程定义法(过程定义法
21、(CS段段)CODESEGMENT;CODE为代码段名ASSUMECS:CODE,DS:DATASTARTPROCFAR;START为过程名PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX;上述为固定写法第30页,共146页,编辑于2022年,星期六基本源程序结构程序正文(指令集合)RET;过程返回STARTENDP;结束过程定义CODEENDS;结束代码段ENDSTART;结束汇编幻灯片41固定写法固定写法第31页,共146页,编辑于2022年,星期六基本源程序结构主程序定义法(CS段)CODESEGMENT;CODE为代码段名ASSUMECS:CODE,DS:DA
22、TAMAIN:MOVAX,DATA;从MAIN开始汇编MOVDS,AX程序正文(指令集合)MOVAH,4CHINT21H;21H号中断退出CODEENDS;结束代码段ENDMAIN;结束汇编第32页,共146页,编辑于2022年,星期六基本源程序结构段说明与段赋值段说明与段赋值 仅说明了仅说明了仅说明了仅说明了 DS段(段(CS段必须说明)段必须说明)ASSUMECSASSUMECS:CODECODE,DSDS:DATADATA幻灯片幻灯片幻灯片幻灯片 3636 DSDS段赋值段赋值段赋值段赋值MOVAXMOVAX,DATADATAMOVDSMOVDS,AXAX 说明了说明了说明了说明了DSD
23、S段、段、段、段、ESES段段ASSUMECSASSUMECS:CODECODE,DSDS:DATADATA,ESES:EATAEATA DSDS段、段、段、段、ES段赋值段赋值段赋值段赋值MOVAXMOVAX,DATADATAMOVDSMOVDS,AXAXMOVAXMOVAX,EATAEATAMOVESMOVES,AXAX第33页,共146页,编辑于2022年,星期六 位置计数器位置计数器位置计数器位置计数器$和定位伪指令和定位伪指令和定位伪指令和定位伪指令ORGORG1.位置计数器$汇编程序专门设置了一个表示当前位置当前位置的计数器,称位置计数器$。正常情况下,汇编程序每扫描一个字节,位置
24、计数器的值便加1。语句:TOPEQU$-STACK含义:当前位置计数器的值$减去STACK代表的起始位置的值,然后把两者的差值赋予符号常量TOP。语句:JMP$含义:程序跳转到本条指令执行。第34页,共146页,编辑于2022年,星期六格式:格式:ORG数据表达式数据表达式功功能能:把位置计数器的值设置为表达式的值。ORG后面的一条指令性语句或数据区定义命令即从指定的位置处进行汇编。2.ORG伪指令第35页,共146页,编辑于2022年,星期六格式:格式:ASSUME段寄存器段寄存器:段名段名,段寄存器段寄存器:段名段名,功功能能:用于告知汇编程序,段寄存器CS、DS、ES和SS的内容将被设定
25、为那些段或组的段址段址。段寻址伪指令段寻址伪指令段寻址伪指令段寻址伪指令ASSUMEASSUME第36页,共146页,编辑于2022年,星期六注注:(1)段段名名可以是已定义过的任何段段名名或组组名名,也可以是表达式SEG变变量量或SEG标号标号,还可以是NOTHING。(2)除除CS外,DS、ES、SS的设置必须通过指令性语句来完成。第37页,共146页,编辑于2022年,星期六例例CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:NOTHINGMOVAX,DATAMOVDS,AX;设置;设置DSMOVAX,STACKMOVSS,AX;设置;设置SS
26、CODEENDS幻灯片幻灯片33第38页,共146页,编辑于2022年,星期六过程定义伪指令过程定义伪指令过程定义伪指令过程定义伪指令PROC/ENDPPROC/ENDP 过程过程即是子程序子程序。汇编语言规定必须对过程进行定义,以确定过程的三种属性。过程的属性确定之后,就可对调用指令CALL进行正确汇编,决定是产生近调用指令还是远调用指令。1.过程的三种属性 段段属性:过程所在段的段地址。偏移量偏移量属性:过程所处位置的段内偏移地址。类型类型属性(NEAR或FAR)。过程为NEAR或FAR类型。第39页,共146页,编辑于2022年,星期六使用格式:过程名使用格式:过程名PROCNEAR/F
27、ARRET过程名过程名ENDPNEAR-近过程。该过程与调用指令CALL处在同 一个代码段中(段名相同)。FAR-远过程。该过程与调用指令CALL处在不同的代码段中(段名不同)。2.过程的定义第40页,共146页,编辑于2022年,星期六功功能能:把把具具有有一一定定功功能能的的程程序序段段设设计计成成为为一一个个过过程程(子程序子程序),便于实现模块化的程序设计。,便于实现模块化的程序设计。注注:(1)CALL指令中过程名起着标号的作用。有段属性、偏移量属性和类型属性(NEAR和FAR)。(2)子程序中至少有一个RET。过过过过程程程程名名名名是是是是为为为为该该该该过过过过程程程程指指指指
28、定定定定的的的的一一一一个个个个名名名名称称称称,与与与与变变变变量量量量、标号的定义法相同。标号的定义法相同。标号的定义法相同。标号的定义法相同。第41页,共146页,编辑于2022年,星期六任何变量均有下列三种属性。(1)段属性即变量所使用的段;(2)段内偏移属性;(3)变量的类型:字节、字、双字等。数据定义伪指令与存储器分配数据定义伪指令与存储器分配数据定义伪指令与存储器分配数据定义伪指令与存储器分配 1.1.变量的三种属性变量的三种属性变量的三种属性变量的三种属性DB定义字节型变量,每个变量分配1 1个存储单元DW-定义字型变量,每个变量分配2 2个存储单元DD-定义双字型变量,每个变
29、量分配4 4个存储单元第42页,共146页,编辑于2022年,星期六2 2 2 2变量定义及存储器申请伪指令变量定义及存储器申请伪指令变量定义及存储器申请伪指令变量定义及存储器申请伪指令DB/DW/DDDB/DW/DD (1)格式格式1:变量名变量名DB/DW/DD表达式表达式功功能能:定义一变量,并为其分配一定数量的存储单元,变量的初值由表达式的值指定。若初值可任意,则用问号(?)表示。变量名可省。HEXDB5AH;定义定义字节字节变量变量VWORDDW1234H;定义;定义字字变量变量第43页,共146页,编辑于2022年,星期六注:注:在存放字变量时,低字节在前,高字节在后。BUFFER
30、DW1,0,-1;定义了三个定义了三个字字单元单元STRDBProgram;定义了一个定义了一个字符串字符串注:注:在存放字符串时,存储的是字符的ASCII码。HEX_OFFDWHEX;定义了一个定义了一个字字单元,单元,其初值为已定义变量其初值为已定义变量HEX的偏移量。的偏移量。DVARDD12345678H;定定义义了一个了一个双字双字单单元元第44页,共146页,编辑于2022年,星期六ASCDB2DUP(?)功能:分配功能:分配2个字节单元,初值任意个字节单元,初值任意BUFDW100DUP(0)功能:分配功能:分配100个字单元,初值为个字单元,初值为0ZIPDB3DUP(0,2D
31、UP(1)功能:存储单元依次初始化为:功能:存储单元依次初始化为:0,1,1,0,1,1,0,1,1。(2)格式格式2:变量名变量名DB/DW/DDDUP表达式表达式第45页,共146页,编辑于2022年,星期六 变量经过定义及存储器申请之后,在程序中即可变量经过定义及存储器申请之后,在程序中即可像高级语言一样使用。像高级语言一样使用。MOVAL,HEX;取变量取变量HEX的内容送的内容送 AL寄存器。寄存器。MOVASCBX,AL;取变量取变量ASC的偏移的偏移地址,再与地址,再与BX寄存器的内容相加,得到寄存器的内容相加,得到 存存储器操作数的有效地址储器操作数的有效地址EA,再将再将AL
32、寄寄存存器的内容送入器的内容送入该单该单元。元。幻灯片幻灯片253 3 3 3变量的使用变量的使用变量的使用变量的使用第46页,共146页,编辑于2022年,星期六1.EQU1.EQU伪指令伪指令伪指令伪指令格式:符号名格式:符号名EQU数值表达式数值表达式功功能能:为常量、变量、表达式或其他符号定义一个名字,但不申请分配内存。如:THREEEQU3TOPEQU$-STACK 符号定义伪指令(符号定义伪指令(符号定义伪指令(符号定义伪指令(EQUEQU、LABELLABEL)第47页,共146页,编辑于2022年,星期六“=”伪操作与EQU相似,其区别是前者可重复定义而后者不能。使用EQU可使
33、程序简单明了和便于修改。注:注:EQU可用PURGE解除。第48页,共146页,编辑于2022年,星期六2.LABEL2.LABEL伪指令伪指令伪指令伪指令格式:变量名格式:变量名/标号标号LABEL类型类型功功能能:为当前存储单元定义一个指定类型的变量名或标号,其类类型型为 BYTE、WORD、DWORD、结构名、记录名、NEAR和FAR。第49页,共146页,编辑于2022年,星期六BYTE_ARRAYLABELBYTE;定义;定义字节型字节型数数组标号组标号WORD_ARRAYDW50DUP(?);定义;定义字型字型数组数组如定义不同类型的数组:如定义不同类型的数组:程序中的用法:程序中
34、的用法:MOVAL,BYTE_ARRAY2;将;将2号号字节字节单元内容送单元内容送ALMOVAX,WORD_ARRAY0;将;将0号号字字单元内容送单元内容送AX第50页,共146页,编辑于2022年,星期六又如:又如:TRANS_NLABELNEARTRANSPROCFAR这样TRANS不仅适合远程调用和转移远程调用和转移,也可用新名TRANS_N适合近程调用和转移近程调用和转移。幻灯片幻灯片 2525 第51页,共146页,编辑于2022年,星期六汇编语言程序可划分为许多模块,对每个模块独立地进行汇编及调试(见下图),一般从低层低层到高层高层逐步进行。程序模块定义伪指令(程序模块定义伪指
35、令(程序模块定义伪指令(程序模块定义伪指令(NAME/ENDNAME/END、PUBLIC/EXTRNPUBLIC/EXTRN)第52页,共146页,编辑于2022年,星期六PUBLIC二级子模块1PUBLIC二级子模块2PUBLICPUBLIC二级子模块n1二级子模块nPUBLICPUBLICPUBLIC一级子模块1EXTRN一级子模块2EXTRN一级子模块mEXTRN主模块EXTRN主模块EXTRNPUBLIC二级子模块1PUBLIC二级子模块2PUBLICPUBLIC二级子模块n1二级子模块nPUBLICPUBLICPUBLIC一级子模块1EXTRN一级子模块2EXTRN一级子模块mEX
36、TRN汇编语言程序的模块结构第53页,共146页,编辑于2022年,星期六1.NAME1.NAME和和和和ENDEND伪指令伪指令伪指令伪指令功功能能:定义一个模块,作为一个独立的汇编单位,NAME缺省时模块若使用了TITLE语句,则TITLE语句中前6个字符为模块名,否则源文件名将作为模块名。格式:格式:NAME模块名模块名END标号标号注注:一一个个模模块块是是一一个个独独立立的的汇汇编编单单位位,汇汇编编处处理只进行到模块结束语句理只进行到模块结束语句ENDEND为止。为止。第54页,共146页,编辑于2022年,星期六注:符符号号必必须须用用“,”分分开开,且且均均在在本本模块中定义过
37、。模块中定义过。注:注:2.PUBLIC2.PUBLIC伪指令伪指令伪指令伪指令格式:格式:PUBLIC符号表符号表功功能能:用来说明该模块中被定义的那些常常量量、变变量量和标标号号(含过程名)可以被其他模块所引用。如:PUBLICABC,BCD,CDE第55页,共146页,编辑于2022年,星期六3.EXTRN3.EXTRN伪指令伪指令伪指令伪指令格式:格式:EXTRN符号:类型,符号:类型,功功能能:指出本模块中需要引用但却在其他模块中定义并说明为PUBLIC属性的符号(含常量,变量,标号和过程)。被引用符号的类型类型说明:BYTE、WORD、DWORD、NEAR、FAR、ABS(符号常量
38、)。如:EXTRNABC:WORD,BCD:ABS,CDE:NEAR第56页,共146页,编辑于2022年,星期六4.3 4.3 汇编语言属性操作符汇编语言属性操作符1.1.分析操作符(数值返回操作符)分析操作符(数值返回操作符)分析操作符(数值返回操作符)分析操作符(数值返回操作符)4.3.14.3.1分析操作符(分析操作符(分析操作符(分析操作符(SEGSEG、OFFSETOFFSET、TYPETYPE、LENGTHLENGTH、SIZESIZE)返回的是变量或标号的段段地地址址,偏偏移移地址地址及类型类型的属性值。格式格式:分析运算符变量或标号其运算的结果为一常数第57页,共146页,编
39、辑于2022年,星期六(1)SEG(1)SEG取段址算符取段址算符取段址算符取段址算符(2)OFFSET(2)OFFSET取偏移地址算符取偏移地址算符取偏移地址算符取偏移地址算符功能功能:分离出该变量或标号的段址如:MOVAX,SEGBUF功能功能:分离出该变量或标号的偏移地址如:MOVSI,OFFSETBUF第58页,共146页,编辑于2022年,星期六(3)TYPE(3)TYPE取类型算符取类型算符取类型算符取类型算符(4)LENGTH(4)LENGTH取变量所含存储单元的个数取变量所含存储单元的个数取变量所含存储单元的个数取变量所含存储单元的个数功能功能:分离出该变量所含存储单元的个数。
40、功能功能:分离出该变量或标号的类型的字节数。变量类型为BYTE、WORD和DWORD时,返回的值分别为1、2和4;标号类型为NEAR或FAR时,则返回-1或-2。第59页,共146页,编辑于2022年,星期六注注意意:在在定定义义该该变变量量时时,数数据据定定义义伪伪指指令令后后面面的的第第一一个个表表达达式式的的形形式式为为“n n DUP(DUP(表表达达式式)”时,取值为时,取值为n n,否则为,否则为1 1。如:如:BUF1DB100DUP(0)BUF2DW10,5DUP(2)BUF3DD5DUP(1,2DUP(0)则则LENGTHBUF1=100,LENGTHBUF2=1LENGTH
41、BUF3=5。第60页,共146页,编辑于2022年,星期六(5)SIZE(5)SIZE取变量所含存储区的总字节数。取变量所含存储区的总字节数。取变量所含存储区的总字节数。取变量所含存储区的总字节数。功能功能:SIZE=LNGTH*TYPESIZEBUF1=100(因为(因为TYPEBUF1=1)SIZEBUF2=2(因为(因为TYPEBUF2=2)SIZEBUF3=20(因为(因为TYPEBUF3=4)第61页,共146页,编辑于2022年,星期六格式格式:类型类型PTR表达式表达式类型类型:表达式表达式:是变量、标号或数值:是变量、标号或数值 变量的类型有:变量的类型有:BYTE、WORD
42、和和DWORD;标号的类型有:标号的类型有:NEAR和和FAR;结构名称结构名称4.3.24.3.2属性修改操作符(属性修改操作符(属性修改操作符(属性修改操作符(PTRPTR、THISTHIS、SHORTSHORT)1.PTR1.PTR操作符操作符操作符操作符 PTR操作符用于暂时暂时修改变量或标号的原有属性。第62页,共146页,编辑于2022年,星期六功功能能:PTR把它左边的属性指派给它右边的变量、标号或数值,使之产生一个新的存储器地址操作数。如:(1)INCBYTEPTRBX(2)ADDDX,WORDPTRFOOB20新存储器操作数的段地址和段内偏移量与PTR运算符右边的操作数的对应
43、量相同。PTR给已分配的存储器一个另外的定义但并不重新分配存储器。第63页,共146页,编辑于2022年,星期六2.SHORT2.SHORT操作符操作符操作符操作符SHORT用于条件转移、转移和调用指令中,指出其转移的相对位移量不超过一个字节所能表达的范围。第64页,共146页,编辑于2022年,星期六3.THIS3.THIS操作符操作符操作符操作符THIS操作符与PTR操作符有类似的功能,但新的属性放在THIS的右边右边。格式:格式:THIS类型类型/距离距离其中类型是BYTE、WORD和DWORD,距离是NEAR和FAR属性。功功能能:与PTR类似建立一个新的存储器地址操作数,但不分配存储
44、器,其类型由THIS指定。(1)FOOBEQUTHISBYTE(2)FAR-OUTEQUTHIS幻灯片25FAR如:第65页,共146页,编辑于2022年,星期六 4.4 4.4 汇编语言程序的上机过程汇编语言程序的上机过程 4.4.1 4.4.1 4.4.1 4.4.1 汇编语言程序上机运行的软件环境汇编语言程序上机运行的软件环境汇编语言程序上机运行的软件环境汇编语言程序上机运行的软件环境DOS操作系统下,编辑、修改和运行汇编语言程序,需要用文本编辑软件、宏汇编程序、连接程序和调试程序。文本编辑软件:EDIT.EXE等宏汇编程序:MASM.EXE,TASM.EXE等连接程序:LINK.EXE
45、,TLINK.EXE等调试程序:CV.EXE,TD.EXE等第66页,共146页,编辑于2022年,星期六编程者编辑源程序XXX.ASM 指令 伪指令写字板,记事簿等软件汇编连接MASM.EXELINK.EXEXXX.EXE可执行文件加载程序运行DOS磁盘文件DOS将磁盘文件读入内存从指定起始指令开始执行程序任务XXX.OBJ动态调试程序DEBUG.COMPC上汇编语言程序生成过程机器语言(模块代码)第67页,共146页,编辑于2022年,星期六4.4.24.4.2源程序的编辑与汇编源程序的编辑与汇编源程序的编辑与汇编源程序的编辑与汇编1.1.编辑源程序编辑源程序编辑源程序编辑源程序 C:AS
46、MEDITHEXTOASC.ASM(回车)(回车)2.2.汇编源程序汇编源程序汇编源程序汇编源程序 C:ASMTASMHEXTOASC(回车)(回车)在汇编中,如果有语法错误,会给出提示信息,指出错误的类型、行号。当汇编无错之后,会自动生成目标文件(文件扩展名为OBJ)。注:待编辑的文件扩展名必须为ASM。第68页,共146页,编辑于2022年,星期六汇编程序通过ASSUME语句了解到运行时各段寄存器的设定值后,就可以对被汇编的指令语句中的变量和标号作如下处理。3.3.汇编程序对变量和标号的处理汇编程序对变量和标号的处理汇编程序对变量和标号的处理汇编程序对变量和标号的处理 第69页,共146页
47、,编辑于2022年,星期六1.检查指令中所引用的变量和标号是否合理,即它们的段属性是否和某个段寄存器的段假设值相符。2.检查是否需要为所引用的变量和标号产生跨段前缀字节,即检查变量和标号的段属性是否与硬件为该指令所规定的段寄存器的假设值相符。第70页,共146页,编辑于2022年,星期六4.4.34.4.3目标程序的连接目标程序的连接目标程序的连接目标程序的连接 C:ASMTLINKHEXTOASC(回车)(回车)连接成功后,将生成可执行程序HEXTOASC.EXE。6.4.46.4.4程序的调试与运行程序的调试与运行程序的调试与运行程序的调试与运行 1 1调试可执行程序调试可执行程序调试可执
48、行程序调试可执行程序 利用TurboDebuger(TD)对可执行程序进行调试,以检查程序可能存在的各种错误:C:ASMTDHEXTOASC.EXE(回车)(回车)第71页,共146页,编辑于2022年,星期六程序在存储区中程序在存储区中存放的逻辑地址存放的逻辑地址源程序部分源程序部分程序执行后各寄存器、程序执行后各寄存器、标志位的结果标志位的结果数据段中存放的数据段中存放的40个个“A”及对应的及对应的ASCII码码DEBUG调试环境如下:调试环境如下:第72页,共146页,编辑于2022年,星期六2 2运行可执行程序运行可执行程序运行可执行程序运行可执行程序 C:ASMHEXTOASC(回
49、车)(回车)第73页,共146页,编辑于2022年,星期六 4.5 4.5 汇编语言程序与汇编语言程序与DOSDOS的接口的接口 4.5.1DOS4.5.1DOS和和和和BIOSBIOS的功能调用的功能调用的功能调用的功能调用 1 1DOSDOS系统系统系统系统功能调用的一般步骤功能调用的一般步骤功能调用的一般步骤功能调用的一般步骤DOS为磁盘操作系统(DiskOperatingSystem)的简称。DOS提供了极为丰富的子程序,能够实现控制键盘、显示器、控制键盘、显示器、读写文件、串行通信等一系列功能读写文件、串行通信等一系列功能。(课程设计中的数据显。(课程设计中的数据显示,输入,响铃设计
50、等)示,输入,响铃设计等)第74页,共146页,编辑于2022年,星期六使用使用使用使用DOSDOS系统功能调用的一般过程:见系统功能调用的一般过程:见系统功能调用的一般过程:见系统功能调用的一般过程:见下图下图下图下图所示。所示。所示。所示。功能调用号AH置入口参数执行“INT21H”分析出口参数系统功能调用的方法第75页,共146页,编辑于2022年,星期六键盘功能调用键盘功能调用AH功功能能入口参数入口参数出口参数出口参数1从从键键盘盘输输入入一一个个字字符符,并并在在 屏屏 幕幕 上上 回回 显显,检检 查查Ctrl+Bteak键键AL=字符字符6直直接接控控制制台台输输入入输输出出字