《《微机原理与应用》第4章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《《微机原理与应用》第4章汇编语言程序设计.ppt(140页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微机原理与接口技术微机原理与接口技术主讲主讲 易凡易凡 武汉大学物理学院电子科学与技术系武汉大学物理学院电子科学与技术系第四章第四章汇编语言程序设计汇编语言程序设计4.1 4.1 汇编语言的基本概念汇编语言的基本概念n机器机器语言言用机器码(二进制码)表示操作的程序语言,与处理器相关,可用机器码(二进制码)表示操作的程序语言,与处理器相关,可直接执行,但难懂,检查难;直接执行,但难懂,检查难;汇编语言程序的一般概念汇编语言程序的一般概念n高级语言高级语言 具有普适性的程序设计语言,功能强大,易编写,易检查,具有普适性的程序设计语言,功能强大,易编写,易检查,与机器无关。与机器无关。n汇编语言汇
2、编语言用多种助记附表示多操作的语言,面向机器,但易懂,易检用多种助记附表示多操作的语言,面向机器,但易懂,易检查,机器不能识别查,机器不能识别4.1.1 4.1.1 汇编语言程序的一般概念(续)汇编语言程序的一般概念(续)n汇编语言源程序汇编语言源程序用汇编语言按一定格式编写的程序,它不能直接执行。源用汇编语言按一定格式编写的程序,它不能直接执行。源程序的属性为程序的属性为ASMASMn目标文件目标文件将源程序经汇编后转换成的二进制代码的文件将源程序经汇编后转换成的二进制代码的文件,属性为属性为OBJOBJn执行文件执行文件经经连连接接后后将将目目标标文文件件与与库库文文件件或或其其它它目目标
3、标文文件件连连接接在在一一起起形成的可执行的文件形成的可执行的文件,属性为属性为EXEEXEn汇编汇编将源程序转换成目标文件的翻译过程将源程序转换成目标文件的翻译过程n汇编程序汇编程序完成汇编工作的程序完成汇编工作的程序完成汇编工作的程序完成汇编工作的程序u汇编程序的主要功能程序的主要功能检查源程序源程序;测出源程序中的出源程序中的语法法错误,给出出出出错信息;信息;产生目生目标代代码程序程序,并并给出列表文件(出列表文件(LSTLST文件)文件);展开宏指令展开宏指令;常用的常用的汇编程序有小程序有小汇编ASMASM,宏宏汇编MASMMASM,以及以及TASMTASM,TASMXTASMX,
4、TASM32TASM32等等4.1.2 4.1.2 上机的步骤上机的步骤编辑建立建立ASMASM源程序;源程序;将将ASMASM文件文件经汇编(MASM)MASM)转换成成OBJOBJ文件;文件;将将OBJOBJ文件文件经连接接(LINKLINK)转变成成EXEEXE文件上机文件上机执行。行。LINK连接连接编辑编辑源程序源程序PROGR.ASM文件文件PROGR.OBJ文件文件PROGR.EXE文件文件MASM汇编汇编4.2 4.2 汇编语言程序格式汇编语言程序格式n指令指令语句句能产生目标代码能产生目标代码,CPU,CPU可以执行可以执行,完成特定功能的语句完成特定功能的语句,由由CPUC
5、PU指令组成指令组成。n指示指示语句(句(伪指令指令语句)句)不产生目标代码不产生目标代码,仅是为汇编程序作指示的语句。仅是为汇编程序作指示的语句。n宏指令宏指令语句句是一个指令序列是一个指令序列,在汇编时在汇编时,所有的宏指令语句都被展开为所有的宏指令语句都被展开为相应的指令序列。相应的指令序列。汇编语言语句的类型汇编语言语句的类型4.2.2 4.2.2 语句的格式语句的格式n语句格式句格式为:名字名字 助助记符符 操作数操作数 ;注;注释 其中,其中,助记符助记符项为必要项,项为必要项,方括号项方括号项 为可选项。为可选项。u 名字名字 可为作名字的字符有:字母可为作名字的字符有:字母AZ
6、,AZ,数字数字0909,字符字符?、_ _、$等等数字不能放在名字之首数字不能放在名字之首在指令语句中,名字一般是在指令语句中,名字一般是标号标号。伪指令语句中,名字通常是伪指令语句中,名字通常是变量变量(名名),段名段名,过程名等过程名等标号标号:是某指令代码存放单元的符号地址,标号后必是某指令代码存放单元的符号地址,标号后必须有一个冒号须有一个冒号“:”标号的属性:标号的属性:段,偏移量,类型(段,偏移量,类型(FARFAR,NEARNEAR)变量变量(名名)某个存储器中数据单元或数据区的符号某个存储器中数据单元或数据区的符号地址地址,它代表数据单元或数据区。它代表数据单元或数据区。变量
7、有三种属性:变量有三种属性:段,偏移量,类型段,偏移量,类型(BYTE(BYTE,WORDWORD,DWORDDWORD,QWORD)QWORD)4.2.2 4.2.2 语句的格式语句的格式u助助记符符分为指令助记符和伪指令助记符。分为指令助记符和伪指令助记符。u 操作数操作数 指令指令操作的对象。可操作的对象。可作为操作数作为操作数的的有:有:常量,寄存器,标号,常量,寄存器,标号,变量变量和表达式和表达式。p常量:常量:如如立即数立即数,直接寻址的地址直接寻址的地址,ASCASC码字符串码字符串等等p寄存器:寄存器:AXAX,AHAH,DSDS,SPSP,DXDX等等p表达式表达式:是是常
8、数、寄存器、标号、变量与一些操作符相组合的序列常数、寄存器、标号、变量与一些操作符相组合的序列。分数字分数字表达式和地址表达式两种。数字表达式产生一个数表达式和地址表达式两种。数字表达式产生一个数值值结果,地址结果,地址表达式产生一个表达式产生一个地址。地址。u;注释项注释项它不会被汇编它不会被汇编,其功能为增加源程序的可读性。注释前必须其功能为增加源程序的可读性。注释前必须加分号加分号;4.2.2 4.2.2 语句的格式(续)语句的格式(续)4.2.3 4.2.3 操作符操作符n算算术操作符操作符(加加)、(减减)、(乘乘)、/(/(除除)、MOD MOD(模除,即两个整模除,即两个整数相除
9、后取余数数相除后取余数)例例4.14.1MOVMOVDX,DX,BLOCKBLOCK(6(61)2 1)2 该指令语句等价于该指令语句等价于MOVMOVDX,DX,BLOCKBLOCK1010u算算术操作符操作符应用之例用之例例例4.2 4.2 数数组组ARRAYARRAY定定义义如如下下,试试写写出出把把数数组组长长度度(字字数数)存存入入CXCX寄存器的指令。寄存器的指令。ARRAYARRAYDWDW1,2,3,4,5,6,71,2,3,4,5,6,7ENDEND DW DW?ENDEND是为计算数组长度而建立的符号地址。是为计算数组长度而建立的符号地址。所需指令为所需指令为:MOV CX
10、,MOV CX,(END(ENDARRAY)/2ARRAY)/2汇编后计算表达式而形成了指令汇编后计算表达式而形成了指令MOV CX,MOV CX,7 7n逻辑运算操作符运算操作符ANDAND(逻辑与与)OROR(逻辑或或),),XORXOR(逻辑异或异或)NOTNOT(逻辑非非)。它们只能用于数字表达式中它们只能用于数字表达式中4.2.3 4.2.3 操作符(续)操作符(续)例例4.44.4ANDANDDX,PORT_VAL DX,PORT_VAL ANDAND 0FEH 0FEH汇编汇编PORT_VAL AND 0FEH PORT_VAL AND 0FEH 确定了外设端口号确定了外设端口号
11、例例4.34.3ININAL,PORT_VALAL,PORT_VALOUTOUTPORT_VAL PORT_VAL ANDAND 0FEH,AL 0FEH,AL当端口号当端口号PORT_VALPORT_VAL为偶数时为偶数时,输出端口号与之相同;输出端口号与之相同;当当PORT_VALPORT_VAL为奇数时为奇数时,输出端口号比输入端口号小输出端口号比输入端口号小1 1u逻辑运算操作符运算操作符应用之例用之例n关系运算操作符关系运算操作符EQEQ(等于)、(等于)、NENE(不等)、(不等)、LTLT(小于)、(小于)、GTGT(大于)(大于)、LELE(小于或等于)、(小于或等于)、GEG
12、E(大于或等于)(大于或等于)参与关系运算操作的两个操作数必须都同为数字或为同一参与关系运算操作的两个操作数必须都同为数字或为同一段内的两个存储器地址。段内的两个存储器地址。计算的结果应为逻辑值:计算的结果应为逻辑值:结果为真,表示为结果为真,表示为FFFFHFFFFH结果为假,表示为结果为假,表示为0 04.2.3 4.2.3 操作符(续)操作符(续)例例4.54.5:MOV AX,MOV AX,4 EQ 34 EQ 3;结果为假结果为假等价于等价于MOV AX,MOV AX,0 0MOV AX,MOV AX,4 NE 34 NE 3;结果为真结果为真等价于等价于MOV AX,MOV AX,
13、0FFFFH0FFFFH例例4.6 4.6 MOV BX,MOV BX,(PORT_VAL LT 5)AND 20)OR(PORT_VAL LT 5)AND 20)OR (PORT_VAL GE 5)AND 30)(PORT_VAL GE 5)AND 30)当当 PORT_VAL5PORT_VAL5时时,汇编结果为汇编结果为:MOV BX,30MOV BX,30否则,汇编结果为:否则,汇编结果为:MOV BX,20MOV BX,20u关系运算操作符关系运算操作符应用之例用之例n分析运算符分析运算符uSEGSEG格式:格式:SEGSEG 变量量(名名)功能:功能:取取变量所在段的段基址量所在段的
14、段基址p主要有:主要有:SEG,OFFESET,TYPE,SIZE,LENGTHSEG,OFFESET,TYPE,SIZE,LENGTHuOFFSTOFFST格式:格式:OFFSET OFFSET 变量变量/标号标号功能:功能:取变量或标号的偏移地址取变量或标号的偏移地址u分析运算符分析运算符应用之例用之例例例4.84.8MOV DI,MOV DI,OFFSETOFFSET DATA1DATA1 ;;(DI)DATA1;(DI)DATA1的偏移地址的偏移地址例例4.74.7MOV AX,MOV AX,SEGSEG ARRAYARRAY;(AX);(AX)ARRAYARRAY的段基址的段基址MO
15、V DS,AX MOV DS,AX;(DS);(DS)(AX)(AX)n分析运算符(分析运算符(续)表表4.1 TYPE 4.1 TYPE 类型值与类型的关系类型值与类型的关系TYPE TYPE 类型值类型值存储器操作数的类型存储器操作数的类型1 12 24 4-1-1-2-2BYTEBYTEWORDWORDDWORDDWORDNEARNEARFARFARuTYPETYPE格式:格式:TYPETYPE 变量变量/标号标号功能:功能:取变量或标号的类型值取变量或标号的类型值例例4.10:4.10:VARVAR DWDW?;VAR;VAR为字变量为字变量ARRAYARRAYDDDD 10 DUP(
16、?)10 DUP(?);ARRAY;ARRAY为双字变量为双字变量STRSTR DB DB THIS IS TEST THIS IS TEST;STR;STR为字节变量为字节变量 MOVMOV AX,AX,TYPETYPE VARVAR;(AX)2;(AX)2MOVMOV BX,BX,TYPETYPE ARRAYARRAY;(BX)4;(BX)4MOVMOV CX,CX,TYPETYPE STRSTR;(CX)1;(CX)1例例4.94.9ARRAYARRAYDWDW 1,2,3 1,2,3:ADDADDSI,SI,TYPETYPE ARRAY ARRAY汇编后:汇编后:ADDADDSI,2
17、SI,2 u分析运算操作符分析运算操作符应用之例用之例uLENGTHLENGTH格式:格式:LENGTH LENGTH 变量(名)量(名)功能:功能:取重复定取重复定义(DUPDUP)的复制次数的复制次数,若不是若不是DUPDUP定定义,则取数取数值1 1。n分析运算符(分析运算符(续)uSIZESIZE格式:格式:SIZESIZE 变量(名)变量(名)功能:功能:取取LENGTHLENGTH值与值与TYPETYPE值的乘积值的乘积例例4.13 4.13 若:若:FEESFEESDW 100 DUP(?)DW 100 DUP(?)则则TYPETYPEFEES=2FEES=2 LENGTHLEN
18、GTH FEES=100 FEES=100 SIZESIZE FEES=(FEES=(LENGTHLENGTH FEES)(FEES)(TYPETYPE FEES)=1002=200 FEES)=1002=200所以所以MOV CX,MOV CX,SIZESIZE FEES FEES汇编后汇编后:MOV CX,200MOV CX,200例例4.11 4.11 若若:FEESFEESDW 100 DUP(?)DW 100 DUP(?)对于指令对于指令:MOVMOVCX,CX,LENGTHLENGTH FEES FEES汇编后汇编后:MOVMOVCX,100CX,100例例4.12 4.12 若若
19、:ARRAYARRAY DW 1,2,3DW 1,2,3对于指令对于指令:MOVMOVCX,CX,LENGTHLENGTH ARRAY ARRAY汇编后为:汇编后为:MOVMOVCX ,1CX ,1u分析运算操作符分析运算操作符应用之例用之例n综合运算符合运算符u属性运算符属性运算符PTRPTR格式:格式:类型型 PTRPTR 表达式表达式功能:功能:对存存储单元元赋予确定的予确定的类型型uTHISTHIS运算符运算符格式:格式:名字名字 EQU THISEQU THIS 类型类型功能:功能:给名字给名字(变量或标号变量或标号)指定类型,它的段,偏指定类型,它的段,偏移地址与下一存储单元相同。
20、移地址与下一存储单元相同。u短程运算符短程运算符SHORTSHORT格式:格式:SHORTSHORT 标号标号功能:功能:指明标号的类型为短标号指明标号的类型为短标号,从标号到引用标从标号到引用标号指令之间的距离是在:号指令之间的距离是在:-128-128127127字节字节范围内范围内例例4.154.15设已有数据定义如下设已有数据定义如下TWO_BYTETWO_BYTEDW DW?可用以下语句对这两个字节赋予另一种类型定义可用以下语句对这两个字节赋予另一种类型定义ONE_BYTEONE_BYTEEQU BYTE PTR TWO_BYTEEQU BYTE PTR TWO_BYTEOTHER_
21、BYTE EQU BYTE PTR (TWO_BYTE+1)OTHER_BYTE EQU BYTE PTR (TWO_BYTE+1)OTHER_BYTE EQU BYTE PTR ONE_BYTEOTHER_BYTE EQU BYTE PTR ONE_BYTE1 1ONE_BYTEONE_BYTE与与TWO_BYTE TWO_BYTE 皆为符号地址皆为符号地址它们的段和偏移量属性相同,但类型属性不同,前者是它们的段和偏移量属性相同,但类型属性不同,前者是BYTEBYTE类型,后者是类型,后者是WORDWORD类型。类型。例例4.144.14 INCINCBXBX;操作数的类型不明确操作数的类型
22、不明确可用可用PTRPTR操作符对操作数明确定义:操作符对操作数明确定义:INC WORD PTR BX INC WORD PTR BX;明确字操作数;明确字操作数u综合操作符合操作符应用之例用之例例例4.16 FIRST_TYPE4.16 FIRST_TYPEEQUEQUTHIS BYTE THIS BYTE WORD_TABLE WORD_TABLEDWDW100 DUP (100 DUP (?)FIRST_TYPEFIRST_TYPE与与WORD_TABLEWORD_TABLE的段,偏移地址均相同,但前者是的段,偏移地址均相同,但前者是BYTEBYTE类型,后者是类型,后者是WORDWO
23、RD类型。类型。u综合操作符合操作符应用之例用之例例例4.174.17L1L1EQU THIS FAREQU THIS FARL:L:MOV CX,100MOV CX,100L L标号与标号与L1L1标号的段、偏移地址一样,但类型不同。标号的段、偏移地址一样,但类型不同。L L是是NEARNEAR类型,类型,L1L1是是FARFAR类型,允许其他段的转移指令调用。类型,允许其他段的转移指令调用。例如例如 :JMP JMP SHORTSHORT TAG TAG TAG:TAG:u字字节分离运算符分离运算符LOWLOW、HIGHHIGH功能:功能:分分别得一个数得一个数值或地址表达式的低位和高位或
24、地址表达式的低位和高位字字节例例4.184.18STUFFSTUFF EQU 0ABCDHEQU 0ABCDH语句:语句:MOVMOVAH,AH,HIGH HIGH STUFF STUFF 汇编后:汇编后:MOVMOVAH,0ABHAH,0ABH语句:语句:MOVMOVALAL ,LOWLOW STUFF STUFF 汇编后:汇编后:MOVMOVAL,0CDHAL,0CDHn综合运算符合运算符4.3 4.3 伪指令语句伪指令语句1.1.数据定数据定义伪指令指令语句句功能:功能:定定义变量的量的类型,分配空型,分配空间并并赋初初值格式:格式:变量名量名 DB/DW/DDDB/DW/DD 操作数操
25、作数,操作数操作数u 变量名变量名 是任选项,是数据单元的符号地址是任选项,是数据单元的符号地址u助记符助记符 DBDB、DWDW、DD DD DB(Define byte)DB(Define byte):定义变量的类型为:定义变量的类型为BYTEBYTE,每个操作数每个操作数占一个字节占一个字节1.1.数据定数据定义伪指令指令语句句u助助记符符 DBDB、DWDW、DD DD DB(Define byte)DB(Define byte):定义变量的类型为:定义变量的类型为BYTEBYTE,每个操作数每个操作数占一个字节占一个字节DW(Define word)DW(Define word):定
26、义变量的类型为:定义变量的类型为WORDWORD,每个操,每个操作数占作数占2 2个字节个字节,采用小端对准方式存放采用小端对准方式存放DD(Define double word):DD(Define double word):定义变量的类型为定义变量的类型为DWORDDWORD,每个操作数占每个操作数占4 4个字节个字节u操作数的几种形式操作数的几种形式操作数为常数,常数表达式或为字符(串)操作数为常数,常数表达式或为字符(串)操作数是操作数是“?”只定义存储空间,但不预存储数据只定义存储空间,但不预存储数据操作数是已定义的变量或标号操作数是已定义的变量或标号u操作数字段的几种形式操作数字段
27、的几种形式举例例p操作数是常数或是常数表达式操作数是常数或是常数表达式例例4.194.19DATA_BYTEDATA_BYTEDBDB10,410,4,10H10HDATA_WORDDATA_WORDDWDW100100,100H,-5100H,-5DATA_DWDDATA_DWDDDDD320320,0FFFDH0FFFDHDATA_BYTE DATA_BYTE 是字节类型是字节类型,每个操作数占一个字节单元每个操作数占一个字节单元DATA_WORD DATA_WORD 是字类型是字类型,每个操作数占两个字节单元每个操作数占两个字节单元DATA_DWD DATA_DWD 是双字类型是双字类型
28、,每个操作数占四个字节单元每个操作数占四个字节单元000000FDFF00000A041064000001FBFF3C60d0FFFDh10d410h100d100h-5DATA_BYTEDATA_WORDDATA_DW图图4.1 4.1 例例4.19 4.19 的汇编结果的汇编结果操作数是字符串操作数是字符串例例4.204.20MESSAGEMESSAGEDBDB HELLO HELLO ABABDBDB ABABBABADWDW ABAB字符串必须用单引号字符串必须用单引号 包封包封超过两个字符的字符串只能用超过两个字符的字符串只能用DBDB定义。定义。u操作数字段的几种形式操作数字段的几
29、种形式举例例操作数是?只定义存储空间,但不预存储数据操作数是?只定义存储空间,但不预存储数据例例4.4.2121ABCABCDBDB0,?,?,?,00,?,?,?,0DEFDEFDWDW?,52,?,52,?43454C4C4FHELLOMESSAGE4241BA4142ABMWSSAGE DB HELLO DB ABDW AB图图4.2 4.2 例例4.20 4.20 的汇编存储结果的汇编存储结果-000102-000102ARRAY1共共100个字节个字节ARRAY2ABC-00-340000-52dDEF-图图4.3 4.3 例例4.214.21与例与例4.22 4.22 的汇编结果的
30、汇编结果关于复制操作符关于复制操作符DUP(duplication operator)DUP(duplication operator)格式:格式:格式:格式:重复次数重复次数重复次数重复次数 DUPDUPDUPDUP (复制内容)(复制内容)(复制内容)(复制内容)PAR1的偏移地址的偏移地址PARM_TABLEPAR2的偏移地址的偏移地址PAR3的偏移地址的偏移地址DATA1的偏移地址的偏移地址DATA1的段基址的段基址DATA2的偏移地址的偏移地址DATA2的段基址的段基址INTSEG_DATA例例4.244.24的汇编结果的汇编结果重复重复100次次共共700个字节个字节0102000
31、0010201020001020003 ARRAY303图图4.4 4.4 例例4.234.23的汇编结果的汇编结果操作数是已定义的变量或标号操作数是已定义的变量或标号例例4.244.24PAR1PAR1DB 1,2,3,4DB 1,2,3,4PAR2PAR2DB ABCDDB ABCD PAR3PAR3DW 0,1,?DW 0,1,?DATA1DATA1 DB 100 DUP(?)DB 100 DUP(?)DATA2DATA2 DW 200 DUP(0)DW 200 DUP(0)PARM_TABLEPARM_TABLEDW DW PAR1PAR1 DW DW PAR2PAR2 DW DW P
32、AR3PAR3INTSEG_DATAINTSEG_DATA DD DD DATA1DATA1 DD DD DATA2DATA22.2.符号定符号定义的的伪指令指令u表达式表达式赋值伪指令指令EQUEQU格式格式:名字名字 EQUEQU 表达式表达式表达式可以是常数、符号、地址表达式、寄存器表达式可以是常数、符号、地址表达式、寄存器,指令等;指令等;表达式不允许重复定义表达式不允许重复定义例例4.254.25:CRCREQU 256EQU 256;数赋于符号名数赋于符号名DATADATAEQU HIGHT+12 EQU HIGHT+12;地址表达式赋予符地址表达式赋予符号名号名LFLFEQU A
33、SC_TABLEEQU ASC_TABLE;变量赋新符号名变量赋新符号名B BEQU BP+8 EQU BP+8;变址方式引用赋于符号变址方式引用赋于符号B BCBDCBD EQU AAMEQU AAM;CBD;CBD等价于指令等价于指令AAMAAMu等号等号 =伪操作操作“=”与与“EQUEQU”的的功功能能一一样,但但“=”操操作作允允许表表达达式式重复定重复定义例例4.264.26COUNT=10COUNT=10 MOV CX,COUNTMOV CX,COUNT;(CX)10;(CX)10 COUNT=COUNTCOUNT=COUNT1 1 MOVMOVBX,COUNTBX,COUNT;
34、(BX)9;(BX)9 2.2.符号定符号定义的的伪指令(指令(续)u类型定型定义伪指令指令LABLELABLE格式:格式:标号号/变量量 LABLELABLE 类型型功能:功能:对标号号/变量量的的类型定型定义,它的段地址和偏它的段地址和偏移地址与下一个存移地址与下一个存储器器单元的相同。元的相同。变量类型:变量类型:BYTEBYTE、WORDWORD、DWORDDWORD标号类型:标号类型:NEARNEAR、FARFAR2.2.符号定符号定义的的伪指令(指令(续)uLABLELABLE伪指令指令应用用举例例例例4.274.27AGAINFAGAINFLABLELABLEFARFARAGAI
35、N:AGAIN:PUSHPUSHAX AX AGAINAGAIN的类型为的类型为NEARNEAR,允许在本段内调用;,允许在本段内调用;AGAINFAGAINF的类型为的类型为FARFAR,允许被其他段调用;,允许被其他段调用;AGAINAGAIN与与AGAINFAGAINF的段、偏移属性均相同。的段、偏移属性均相同。例例4.284.28AREAWAREAWLABLE WORDLABLE WORD AREABAREABDB 100 DUP(?)DB 100 DUP(?)MOVMOVAREAW,AXAREAW,AX MOVMOVAREABBX,ALAREABBX,ALAREAWAREAW的类型为
36、的类型为WORDWORD,AREABAREAB的类型为的类型为BYTEBYTE它们的段地址与偏移地址一样它们的段地址与偏移地址一样3.3.段定段定义伪指令指令SEGMENT/ENDSSEGMENT/ENDS格式格式:段名段名SEGMENTSEGMENT 定位定位类型型组合合类型型类别 (段体段体)段名段名ENDSENDS功能功能:定定义一个一个逻辑段并段并赋予一个段名。予一个段名。“SEGMENTSEGMENT”位于逻辑段的开始,指示逻辑段起始位于逻辑段的开始,指示逻辑段起始“ENDSENDS”位于逻辑段的结尾,指示逻辑段的结束位于逻辑段的结尾,指示逻辑段的结束二者前的段名必须一致二者前的段名
37、必须一致u定位定位类型型对本本逻辑段段边界定位界定位BYTEBYTE:字节字节边界边界,即从任意边界开始即从任意边界开始WORDWORD:字字边界边界,即本段的起始地址必须是即本段的起始地址必须是偶偶数数PARAPARA:节节(Paragraph)(Paragraph)的边界开始的边界开始,1616个字节为一个节个字节为一个节,节边节边界的地址应为界的地址应为0H0HPAGEPAGE:页页(Page)(Page)边界,边界,256256个字节为一页个字节为一页,页边界起始地址页边界起始地址应为应为00H00H若省略若省略 定位类型定位类型 ,则默认其为则默认其为PARAPARAu定位定位类型型
38、应用用举例例例例4.29 SEGMENT4.29 SEGMENT伪操作的定位类型应用举例伪操作的定位类型应用举例STACKSTACKSEGMENTSEGMENTSTACKSTACK;STACK;STACK段段,PARA,PARA边界边界 DB 100 DUP(?)DB 100 DUP(?);长度为长度为100100字节字节STACKSTACKENDS ENDS;STACK;STACK段结束段结束DATA1DATA1SEGMINTSEGMINT BYTEBYTE;DATA1;DATA1段段,BYTE,BYTE边界边界STRINGSTRINGDB this is an example!DB thi
39、s is an example!;定义字符串定义字符串DATA1DATA1ENDSENDS;DATA1;DATA1段结束段结束DATA2DATA2SEGMINT SEGMINT WORDWORD;DATA2;DATA2段,段,WORDWORD边界边界BUFFERBUFFERDW 40 DUP(0)DW 40 DUP(0);长度为长度为4040个字个字 DATA2DATA2ENDS ENDS ;DATA2;DATA2段结束段结束CODE1CODE1SEGMINT SEGMINT PAGE PAGE ;CODE1;CODE1段段,PAGE,PAGE边界边界 :CODE1CODE1ENDS ENDS
40、 ;CODE1;CODE1段结束段结束CODE2CODE2SEGMENT SEGMENT ;CODE2;CODE2段段,PAGE,PAGE边界边界 :START:START:MOV AX,STACKMOV AX,STACKMOV SS,AXMOV SS,AX :CODE2CODE2ENDS ENDS ;CODE2;CODE2段结束段结束 END START END START ;源程序结束源程序结束u定位定位类型型应用用举例例本例的源程序中共有五个逻辑段,段名和定位类型分别为:本例的源程序中共有五个逻辑段,段名和定位类型分别为:STACKSTACK段段,PARA,PARA边界边界:段长度为段长
41、度为100100个字节个字节(64H)(64H)DATA1DATA1段段,BYTE,BYTE边界边界:段长度为段长度为1919个字节个字节(13H)(13H)DATA2DATA2段段,WORD,WORD边界边界:段长度为段长度为8080个字节个字节(50H)(50H)CODE1CODE1段段,PAGE,PAGE边界边界:段占用段占用1313个字节个字节(0DH)(0DH)CODE2CODE2段段,PARA,PARA边界边界:段占用段占用5252个字节个字节(34H)(34H)u定位定位类型型应用用举例例表表4.2 4.2 例例4.284.28各逻辑的起始地址和结束地址各逻辑的起始地址和结束地址
42、段名段名定位类型定位类型字节数字节数起始地址起始地址结束地址结束地址STACKSTACKPARAPARA100(64H)100(64H)00000H00000H00063H00063HDATA1DATA1BYTEBYTE19(13H)19(13H)00064H00064H00076H00076HDATA2DATA2WORDWORD80(50H)80(50H)00078H00078H000C7H000C7HCODE1CODE1PAGEPAGE13(ODH)13(ODH)00100H00100H0010CH0010CHCODE2CODE2PARAPARA52(34H)52(34H)00110H00
43、110H00143H00143Hu定位定位类型型应用用举例例u组合类型组合类型 (Combine-type)(Combine-type)指示指示汇编程序程序,各各逻辑段段组合方式合方式该项缺省:该项缺省:则各逻辑段不组合则各逻辑段不组合PUBLICPUBLIC:将不同模块中具有相同段名的逻辑段连接成一个将不同模块中具有相同段名的逻辑段连接成一个大逻辑段,连接次序由连接命令指定。大逻辑段,连接次序由连接命令指定。STACKSTACK:与与PUBLICPUBLIC类似类似,但仅限于堆栈段的组合但仅限于堆栈段的组合COMMONCOMMON:将各同名分段组合为一个段将各同名分段组合为一个段,各同名分段
44、有相各同名分段有相同的起始地址同的起始地址,因此会发生重叠,因此会发生重叠,COMMENCOMMEN段的长度等于段的长度等于原来最大逻辑分段的长度。原来最大逻辑分段的长度。MEMORYMEMORY:当几个逻辑段连接在一起时,指定本逻辑段定当几个逻辑段连接在一起时,指定本逻辑段定位在地址最高的地方。若连接时有几个指定位在地址最高的地方。若连接时有几个指定MEMORYMEMORY的段的段,则汇编程序只将首先遇到的段作为则汇编程序只将首先遇到的段作为MEMORYMEMORY段段,其余的段则其余的段则作为作为COMMONCOMMON段。段。AT AT 表达式表达式:表示本逻辑段段地址是表达式所计算出来
45、的结:表示本逻辑段段地址是表达式所计算出来的结果。它不能用来指定代码段。果。它不能用来指定代码段。例如:例如:AT 8A00H,AT 8A00H,表示本段的段基址是表示本段的段基址是8A00H,8A00H,本段从存储本段从存储器的物理地址为器的物理地址为8A00H8A00H开始装入。开始装入。u组合类型组合类型 (Combine-type)(Combine-type)指示指示汇编程序程序,各各逻辑段段组合方式合方式u类别类别 (class)(class)类别必须放在单引号类别必须放在单引号 之内之内其作用是在连接时决定各逻辑段的装入顺序其作用是在连接时决定各逻辑段的装入顺序当几个程序模块进行连
46、接时当几个程序模块进行连接时,具有相同类别名的逻辑段按具有相同类别名的逻辑段按连接出现的先后顺序被装入连续的内存区连接出现的先后顺序被装入连续的内存区没有类别名的逻辑段没有类别名的逻辑段,与其他无名逻辑段一起连续装入内与其他无名逻辑段一起连续装入内存。存。例例4.30 4.30 假设一个主程序中有五个逻辑段,段名和类别为:假设一个主程序中有五个逻辑段,段名和类别为:STK1STK1段段 STACK STACK CODE1CODE1段段 无无 DATA1 DATA1 段段 BUFFER BUFFER DATA2 DATA2 段段 TABLE TABLE DATA3 DATA3 段段 BUFFER
47、 BUFFER一个子程序,有四个逻辑段,段名和类型分别为:一个子程序,有四个逻辑段,段名和类型分别为:DATA4 DATA4 段段 TABLE TABLE DATA5 DATA5 段段 BUFFER BUFFER STK2 STK2 段段 STACK STACK CODE2 CODE2 段段 无无当将主程序和子程序进行连接时,两个程序模块中各逻辑段当将主程序和子程序进行连接时,两个程序模块中各逻辑段装入内存的顺序见图装入内存的顺序见图4.54.5u类别类别定定义之例之例 DATA3 BUFFERDATA2 TABLE DATA1 BUFFER CODE1 无无STK1 STACK段名段名 类别
48、名类别名主程序主程序STK1DATA3DATA5DATA2DATA4CODE1CODE2DATA1STK2STACK无类别名无类别名BUFFER TABLE 子程序子程序段名段名 类别名类别名DATA4 TABLE DATA5 BUFFERSTK2 STACK CODE2 无无图图4.5 逻辑段按类别装入内存示意逻辑段按类别装入内存示意4.4.段分配段分配伪指令指令ASSUMEASSUMEu格式格式:ASSUMEASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名段寄存器名:段名段名,u功能功能:指示指示汇编程序源程序的程序源程序的逻辑段与段寄存器的关系;段与段寄存器的关系;u说明明段寄
49、存器名必须是段寄存器名必须是CSCS、DSDS、ESES和和SSSS之一之一,而段名则是由而段名则是由SEGMENTSEGMENT所定义;所定义;ASSUMEASSUME语句通常位于代码段中紧接段定义语句之后;语句通常位于代码段中紧接段定义语句之后;u说明明ASSUMEASSUME NONO THINGTHING的格式可取消前面由的格式可取消前面由ASSUMEASSUME所指定所指定的段寄存器设置;的段寄存器设置;ASSUMEASSUME仅指示逻辑段与段寄存器的关系仅指示逻辑段与段寄存器的关系,但并不对段寄存但并不对段寄存器赋值。器赋值。4.4.段分配段分配伪指令指令ASSUMEASSUME通
50、常给段寄存器赋值语句为:通常给段寄存器赋值语句为:movmovax ax,段名,段名 movmov段寄存器段寄存器 ,axax例例4.31 4.31 定义各逻辑段之例定义各逻辑段之例data1data1segmentsegment data1data1endsendsdata2data2segmentsegment data2data2ends ends u伪指令指令ASSUMEASSUME应用之例用之例codecodesegmentsegmentassume cs:codeassume cs:code,ds:data1,es:data2ds:data1,es:data2start:start