版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第三章第三章汇编语言程序格式汇编语言程序格式(6(6课时)课时)2下面表示了汇编程序的处理过程:下面表示了汇编程序的处理过程:1 1、编辑程序文本:、编辑程序文本:PROG.ASMPROG.ASM 如:如:edit PROG.ASMedit PROG.ASM2 2、用、用MASMMASM汇编程序:汇编程序:prog.objprog.obj 如:如:MASM PROG.ASMMASM PROG.ASM3 3、用、用linklink连接连接: prog.exe: prog.exe 如:如:link prog.objlink prog.obj3汇编语言对汇编语言对源程序作二次扫描源程序作二次扫描:
2、以发现源程序中的语法错误,给出出错信以发现源程序中的语法错误,给出出错信 息。息。展开宏指令,处理伪操作。展开宏指令,处理伪操作。得到无语法错误的得到无语法错误的objobj文件(目标代码文件)。文件(目标代码文件)。4经经LINKLINK将将OBJOBJ文件与库文件或其它目标文件连接成文件与库文件或其它目标文件连接成可执行的可执行的EXEEXE文件,这个文件,这个EXEEXE文件就可在机器上运文件就可在机器上运行。行。5 汇编语言的语句除指令外,还可以由伪汇编语言的语句除指令外,还可以由伪指令指令和宏指令组成,本节只讨论伪操作。(常用的)和宏指令组成,本节只讨论伪操作。(常用的) 伪指令不象
3、机器指令那样在程序运行期间由伪指令不象机器指令那样在程序运行期间由计算机来执行,它是在汇编程序对源程序汇编期计算机来执行,它是在汇编程序对源程序汇编期间由汇编程序处理的操作。间由汇编程序处理的操作。6一、数据定义及存储器分配伪指令一、数据定义及存储器分配伪指令格式:格式:Variable Mnemonic OperandOperand;comments Variable Mnemonic OperandOperand;comments VariableVariable用符号地址表示,其作用与指令前的标号相用符号地址表示,其作用与指令前的标号相同(不跟冒号)如果语句中有变量则汇编程序使其记同(不
4、跟冒号)如果语句中有变量则汇编程序使其记以第一个字节的偏移地址,可有可无。以第一个字节的偏移地址,可有可无。 7注释(注释(commentscomments):):用来说明该伪操作的功能。可有用来说明该伪操作的功能。可有可无。可无。操作数(操作数(operandoperand):):字段中的变量或标号可以是字字段中的变量或标号可以是字符串,数字,复制操作符符串,数字,复制操作符dupdup可使用表达式。如:可使用表达式。如:VariableVariableconstant expressionconstant expressionlabellabelconstant expressioncon
5、stant expression存储器中应存存储器中应存入表达式的值入表达式的值8助记符助记符(mnemonic)(mnemonic): 可以把其后跟着的数据存入指定的存储单可以把其后跟着的数据存入指定的存储单元,或只分配存储空间而不存入确定的数值。元,或只分配存储空间而不存入确定的数值。字段说名所用,伪操作的助记符。常有以下几字段说名所用,伪操作的助记符。常有以下几种:种:9DB DB 定义字节,其后的每个操作数都占有一个字节。定义字节,其后的每个操作数都占有一个字节。DW DW 定义字,其后的每个操作数都占有一个字(低定义字,其后的每个操作数都占有一个字(低位字节在第一个字节地址中,高位字
6、节在第二个字位字节在第一个字节地址中,高位字节在第二个字节地址中;可存放偏移地址)。节地址中;可存放偏移地址)。10DD DD 定义双字,其后的每个操作数都占有二个字,定义双字,其后的每个操作数都占有二个字,可存放完整的地址。(如:第一个字为偏移地址,可存放完整的地址。(如:第一个字为偏移地址,第二个字为段地址)第二个字为段地址)DQ DQ 定义四个字,其后的每个操作数都占有四个字。定义四个字,其后的每个操作数都占有四个字。DT DT 定义十个字节,其后的每个操作数都占有十定义十个字节,其后的每个操作数都占有十个字节;形成压缩的个字节;形成压缩的BCDBCD码。码。11例如:例如: D1 DB
7、 10D1 DB 10,4 4,10H10H D2 DW 100 D2 DW 100,100H100H,-5-5 D3 DD 3 D3 DD 3* *2020,OFFFDHOFFFDH D4 DB AB D4 DB AB D5 DW AB D5 DW AB在汇编期间存储器中存中数据情况如图:在汇编期间存储器中存中数据情况如图:120A0A040410106464000000000101FBFBFFFF3C3C000000000000FDFDFFFF0000000041424241ABBAD1D2D3(100d)(100H) D4(-5d) D5(60d)(10H)(4d)(10d)13当使用复
8、制操作符时,格式为当使用复制操作符时,格式为: :Variable Mnemonic repeat-count Variable Mnemonic repeat-count dup(operand,operand)dup(operand,operand)repeat-count: repeat-count: 可以是值为正整数的一个表达式,用可以是值为正整数的一个表达式,用来指定括号中操作数的重复次数。来指定括号中操作数的重复次数。dup dup 操作数可以嵌套。操作数可以嵌套。14例如:例如:A1 DB 3dup (0, 2dup(1,2), 3)A1 DB 3dup (0, 2dup(1,2
9、), 3) 则汇编结果如图则汇编结果如图: :150000010102020101020203030000010102020101020203030000010102020101020203031次次dup2次次3次次16注意:注意:(1)(1)在数据定义伪操作前面的变量值是该伪指令中在数据定义伪操作前面的变量值是该伪指令中第一个数据项在当前段内的第一字节的偏移地址。第一个数据项在当前段内的第一字节的偏移地址。(2) (2) 它们具有隐含的类型属性它们具有隐含的类型属性( (以字节为单位来表以字节为单位来表示每个数据项的长度示每个数据项的长度) )。17如:如:DBDB的类型属性为的类型属性为
10、1 1 即占一个字节即占一个字节 DWDW的类型属性为的类型属性为2 2 即占二个字节即占二个字节 DDDD的类型属性为的类型属性为4 4 即占四个字节即占四个字节 DQDQ的类型属性为的类型属性为8 8 即占八个字节即占八个字节 DTDT的类型属性为的类型属性为10 10 即占十个字节即占十个字节 可以使用(可以使用(1 1)PTRPTR属性操作符改变操作数的类型。属性操作符改变操作数的类型。 (2 2)LABELLABEL伪操作来定义。伪操作来定义。18使用使用PTRPTR格式为:格式为: type PTR Variablctype PTR Variablcconstant express
11、ionconstant expression例:例:A1 DB 1A1 DB 1,2 2 A2 DW 1234H A2 DW 1234H, 5678H5678H ?MOV AXMOV AX,WORD PTR A1+1WORD PTR A1+1;运行结果;运行结果(AX)=3402H(AX)=3402HMOV ALMOV AL,BYTE PTR A2+1BYTE PTR A2+1;运行结果;运行结果(AL)=12H(AL)=12H19使用使用LABELLABEL的格式:的格式: namenameLABEL typeLABEL type;为;为 BYTE,WORD,DWORDBYTE,WORD,D
12、WORDor :Variable-name LABEL type;or :Variable-name LABEL type;数据项的表示法。数据项的表示法。20二、表达式赋值伪操作二、表达式赋值伪操作: : 有时程序中多次出现同一个表达式,为方便起有时程序中多次出现同一个表达式,为方便起见可以用赋值伪操作给表达式赋予一个名字。见可以用赋值伪操作给表达式赋予一个名字。格式:格式: xpression-name EQU Expressionxpression-name EQU Expression21 其中表达式可以是其中表达式可以是任何有效的操作数格式,任何有效的操作数格式,可以是任何可以求出常
13、可以是任何可以求出常数值的表达式,任数值的表达式,任何有效的助记符。何有效的助记符。表达式中如果有变表达式中如果有变量或标号的表达式,量或标号的表达式,则应先定义,再使则应先定义,再使用用EQUEQU22例如:例如:ABC EQU 256 ABC EQU 256 DATA EQU ABC+12 DATA EQU ABC+12 B EQU BP+2 B EQU BP+2 P8 EQU DS:BP+8 P8 EQU DS:BP+8另:等号()伪操作可以代替另:等号()伪操作可以代替EQUEQU使用,使用, 差别在于差别在于“”可重复定义可重复定义如:如:EMPEMP, ,EMP=EMP+1EMP=
14、EMP+123三三. .段定义伪操作段定义伪操作格式为:格式为:segment name SEGMENTsegment name SEGMENT . . . . . . segment name ENDS segment name ENDS中间部分:对数据段,堆栈段来说,一般是存中间部分:对数据段,堆栈段来说,一般是存储单元的定义储单元的定义, ,分配等伪操作分配等伪操作, ,对代码段则是指对代码段则是指令及伪操作令及伪操作. .24用用ASSUMEASSUME伪操作来明确段和段寄存器的关系伪操作来明确段和段寄存器的关系: :格式格式:ASSUME assignment,assignment:
15、ASSUME assignment,assignment其中其中assignmentassignment说明分配情况说明分配情况: :segment register namesegment register name:segment namesegment name 必须是必须是CS,DS,SS,ES CS,DS,SS,ES 必须是由必须是由SEGMENTSEGMENT定义的定义的 段名段名用用ASSUME NOTHINGASSUME NOTHING可取消前面由可取消前面由ASSUMEASSUME所指定的所指定的段寄存器段寄存器. .25注意注意: :由由ASSUMEASSUME操作只能指定
16、某个段分配给哪个段操作只能指定某个段分配给哪个段寄存寄存器器, ,它并不能把段地址装入相应的段寄存器中它并不能把段地址装入相应的段寄存器中, ,所所以在代码段中,还必须把段地址装入相应的段寄以在代码段中,还必须把段地址装入相应的段寄存器中。存器中。( (如程序中如程序中MOV AX,data;MOV DS ,AX)MOV AX,data;MOV DS ,AX)代码段的这一操作是在程序初始化时完成的。代码段的这一操作是在程序初始化时完成的。26 如果需要用连接程序与其他程序摸块相连接如果需要用连接程序与其他程序摸块相连接时时, ,就需要使用就需要使用SEGMENTSEGMENT的类型及属性说明。
17、的类型及属性说明。格式为格式为:segment-name SEGMENT aliga-type:segment-name SEGMENT aliga-type combine-type combine-type class class . . . . . . segment-name ENDS segment-name ENDS27定位类型定位类型(aligh-type)(aligh-type)可以是可以是: :PARA PARA 指定的起始必须从子段边界开始指定的起始必须从子段边界开始, ,既段地既段地 址的最低的址的最低的1616进制数必须为进制数必须为0.0.BYTE BYTE 该段可以
18、从任何地址开始该段可以从任何地址开始: :WORD WORD 该段必须从字的边界开始该段必须从字的边界开始, ,既段地址必须既段地址必须 为偶数为偶数. .28组合类型组合类型(conline-type)(conline-type)可以是可以是: :PUBLIC PUBLIC 该段连接时将与有相同名字的其他分该段连接时将与有相同名字的其他分段连接在一起段连接在一起, ,其连接次序由连接命令指定。其连接次序由连接命令指定。29COMMON COMMON 该段在连接时与其它同名分段有相同的该段在连接时与其它同名分段有相同的起始地址产生覆盖。起始地址产生覆盖。COMMONCOMMON的连接长度是各分
19、段的连接长度是各分段中的最大长度中的最大长度. .AT expressim AT expressim 使段的起始地址是表达式所计算使段的起始地址是表达式所计算出来的出来的1616位段地址位段地址. .但它不能用来指定代码段。但它不能用来指定代码段。30STACK STACK 指定该段在运行时为堆栈段的一部分。指定该段在运行时为堆栈段的一部分。MEMORY MEMORY 指定该段将分配在所有其它连接在一起的指定该段将分配在所有其它连接在一起的段的前面(在高地址上)。如果连接时有几个指段的前面(在高地址上)。如果连接时有几个指定定MEMORYMEMORY的段则遇到第一段作为的段则遇到第一段作为ME
20、MEORYMEMEORY段。其段。其它则作为它则作为COMMONCOMMON段。段。类别类别(class)(class)连接时用于组成段组的名字。连接时用于组成段组的名字。31四、程序开始和结束伪操作四、程序开始和结束伪操作程序的开始可用程序的开始可用NAMENAME和和TITLETITLE为模块取名字为模块取名字. . ( (并不是必要的并不是必要的) )格式格式: NAME module-name: NAME module-name TITLE text TITLE text;可指定第一页上打印的标题;可指定第一页上打印的标题;texttext最多可有最多可有6060个字符;若程序中无个字
21、符;若程序中无NAMENAME伪操作伪操作, ,则汇编则汇编程序将用程序将用texttext中的前六个字符作为模块名。中的前六个字符作为模块名。 32程序结束操作符程序结束操作符: :格式格式: END label: END label其中其中labellabel指定程序开始执行起始地址。若指定程序开始执行起始地址。若多个程序模块相连接多个程序模块相连接, , 则只有主程序要使用则只有主程序要使用标号标号, , 其它子程序模块则只用其它子程序模块则只用ENDEND而不必指而不必指定标号。定标号。33五、对准伪操作五、对准伪操作(1)EVEN(1)EVEN伪操作伪操作使下一个字节地址变成偶数使下
22、一个字节地址变成偶数, ,一个字的地址最一个字的地址最好从偶地址开始好从偶地址开始, , 所以对于数组为保证其从偶所以对于数组为保证其从偶地址开始地址开始, ,可以在它前面用可以在它前面用EVENEVEN伪操作来达到伪操作来达到这一目的。这一目的。如:如:EVENEVEN WORD-ARRAY DW 100dup(?) WORD-ARRAY DW 100dup(?).34(2)ORG constant expression(2)ORG constant expressionORGORG伪操作可以使下一个字节的地址为常数表伪操作可以使下一个字节的地址为常数表达式的值。达式的值。例:例:ORG 1
23、0 ORG 10 V1 DW 47A5H V1 DW 47A5H则则V1V1的地址为的地址为0AH(0AH(偏移地址偏移地址) )35汇编程序对源程序汇编的过程中,使用地址计汇编程序对源程序汇编的过程中,使用地址计数器来保存当前正在汇编的指令的地址,地址数器来保存当前正在汇编的指令的地址,地址计数器的值用计数器的值用$ $来表示,汇编语言允许用户直来表示,汇编语言允许用户直接用接用$ $来引用地址计数器的值。来引用地址计数器的值。36例:例:JNE $+6JNE $+6;转向地址是;转向地址是JNEJNE指令的首地址加指令的首地址加 上上6 6 OGR 0074H OGR 0074H arra
24、y DW 1 array DW 1,2 2,$+4$+4,3 3,4 4,$+4$+4汇编后的存储区将如图所示汇编后的存储区将如图所示(见下页)(见下页)37010002007C00030004008200array0074(0078+4)00797B007A7C7D(7E+4)38六、基数控制伪操作六、基数控制伪操作 汇编程序默认的数为十进制,因而除非专门汇编程序默认的数为十进制,因而除非专门指定,汇编程序把程序中出现的数均看成十进制指定,汇编程序把程序中出现的数均看成十进制数,当使用其它基数表示的常数时,需要专门给数,当使用其它基数表示的常数时,需要专门给以标记:以标记:39二进制数由二进
25、制数由B B表示表示 如:如:00110100B00110100B 十进制数由十进制数由D D表示表示 如:如:165D165D八进制数由八进制数由O O或或Q Q表示表示 如:如:1677Q1677Q十六进制数由十六进制数由H H表示表示 如:如:0ABCDH0ABCDH(第一个(第一个符必须是符必须是0909)40可用可用RADIXRADIX伪操作将默认的基数改变为伪操作将默认的基数改变为216216范围的基范围的基数。数。 如:如:MOV BXMOV BX,0FFH0FFH MOV BX MOV BX,178178 与与 RADIX 16RADIX 16 MOV BX MOV BX,0F
26、F0FF MOV BX MOV BX,178D178D 是等价的。是等价的。 字符中可以看成串常数,字符中可以看成串常数,用单或双引号括起,用单或双引号括起,得到的是字符串的得到的是字符串的ASCASC码值。码值。41汇编语言源程序中每个语句可以由四项成,格式:汇编语言源程序中每个语句可以由四项成,格式:name operatim operand ;commentname operatim operand ;comment名字项名字项 操作码操作码 操作数的操作数的 注释注释 助记符助记符42一、名字项一、名字项 可以是标号或变量可以是标号或变量, ,用来表示本语句的符号地用来表示本语句的符号
27、地址。只有当需要用地址访问该语句时它才需要出现。址。只有当需要用地址访问该语句时它才需要出现。 名字项第一个字符必须为名字项第一个字符必须为A AZ Z中的一个字符,中的一个字符,所用字符有:所用字符有:A AZ,0Z,09 9及主用字符及主用字符 ?,-,$,?,-,$,431 1、标号、标号标号代码段中定义,后面跟冒号标号代码段中定义,后面跟冒号(:)(:),也可以用,也可以用LABLELABLE或或EQUEQU定义定义, , 定义可以作为过程名定义。定义可以作为过程名定义。( (经常出现在转移经常出现在转移,CALL,CALL指令的操作数字段指令的操作数字段) )标号有三种属性:段,偏移
28、及类型标号有三种属性:段,偏移及类型段属性:段属性: 定义标号的段起始地址,此值必须在定义标号的段起始地址,此值必须在 个段寄存器中,而标号的段则总是在个段寄存器中,而标号的段则总是在 CSCS寄存器中。寄存器中。44偏移属性:标号的偏移地址时偏移属性:标号的偏移地址时1616位无符号数位无符号数, ,它代它代表从段起始地址到定义标号的位置之间的字节数。表从段起始地址到定义标号的位置之间的字节数。类型属性:用来指出该标号是在本段内引用类型属性:用来指出该标号是在本段内引用, ,还是还是在其它段中引用:在其它段中引用:段内引用称段内引用称NEARNEAR,指针长度为,指针长度为2 2字节字节.(
29、.(数值为数值为-1)-1)段外引用称段外引用称FAR,FAR,指针长度为指针长度为4 4字节字节.(.(数值为数值为-2)-2)452 2、变量、变量变量在除号代码段以外的其它段中定义,后面无冒变量在除号代码段以外的其它段中定义,后面无冒号。也可以用号。也可以用LABELLABEL或或EQUEQU来定义;经常出现在操作来定义;经常出现在操作数据段。也有三种属性:数据段。也有三种属性:段属性:定义变量的段起始地址,此值必须在一个段属性:定义变量的段起始地址,此值必须在一个段寄存器中。段寄存器中。46偏移属性:是偏移属性:是1616位无符号数,代表从段的起始地址位无符号数,代表从段的起始地址到定
30、义变量的位置之间的字节数,在当前段内给出到定义变量的位置之间的字节数,在当前段内给出变量的偏移值等于当前地址计数器变量的偏移值等于当前地址计数器( (可用可用$ $表示表示).).类型属性:定义变量所保留的字节数类型属性:定义变量所保留的字节数如:如:BYTE(1BYTE(1字节长字节长) WORD(2) WORD(2字节字节) ) DWORD(4 DWORD(4字节字节) DQ(8) DQ(8字节字节) ) DT(10 DT(10字节字节) )47二、操作项二、操作项操作项是指令操作码或宏指令的助记符操作项是指令操作码或宏指令的助记符48三三. .操作数操作数 由一个或多个表达式组成,多个操
31、作数项之间用由一个或多个表达式组成,多个操作数项之间用逗号分开。在指令中,操作数项给出操作数地址;在逗号分开。在指令中,操作数项给出操作数地址;在伪操作、宏指令伪操作、宏指令中,操作数项中,操作数项给出它们所要求的参数。给出它们所要求的参数。操作数有数字表达式和地址表达式两种。由常数,寄操作数有数字表达式和地址表达式两种。由常数,寄存器,标号,变量与一些操作符相组合成的序列。存器,标号,变量与一些操作符相组合成的序列。491 1、算术操作符。、算术操作符。 ,/ /,MODMOD(指除法运算后得到(指除法运算后得到的余数)如的余数)如9/79/7商为商为1 1,余为,余为2 2都可用于数字和都
32、可用于数字和地址表达式,但当用于地址时,只有当其有明地址表达式,但当用于地址时,只有当其有明确的物理意义其结果才有效的(如乘、除地址确的物理意义其结果才有效的(如乘、除地址无效)无效)50例:写出将数字组成例:写出将数字组成A1A1的长度(字数)存入的长度(字数)存入CXCX寄存器的指令。寄存器的指令。A1 DW 1,2,3,4,5,6,7A1 DW 1,2,3,4,5,6,7END DW ?END DW ?指令为:指令为:MOV CX,(END-A1)/2MOV CX,(END-A1)/2汇编时形成指令:汇编时形成指令:MOV CX,7MOV CX,7512 2、 逻辑操作符。逻辑操作符。A
33、ND OR XOR NOT AND OR XOR NOT 按位操作,只能用于逻辑表按位操作,只能用于逻辑表达式。达式。523 3、关系操作符(、关系操作符(6 6种)种)EQ(EQ(相等)相等) NE(NE(不等)不等) LT(LT(小于)小于)GT(GT(大于)大于) LE(LE(小于或等于)小于或等于)GEGE(大于或等于)(大于或等于)两操作数必须都是数字或是同一段内的两存储两操作数必须都是数字或是同一段内的两存储器地址,计算的结果应为逻辑值:器地址,计算的结果应为逻辑值:1 1为真为真(0FFFFH0FFFFH),),0 0为假。为假。53例:例:MOV BX,(PORT-VAL LT
34、 5) AND 20) MOV BX,(PORT-VAL LT 5) AND 20) OR (PORT-VAL GE 5) AND 30) OR (PORT-VAL GE 5) AND 30) 则当则当 PORT-VAL 5 PORT-VAL 5 PORT-VAL 5 时时 汇编为:汇编为:MOV BX,30MOV BX,30544 4、数值回送操作符、数值回送操作符 TYPE,LENGTH,SIZE, TYPE,LENGTH,SIZE, OFFSET,SEG 5OFFSET,SEG 5种。种。 TYPE:TYPE:格式格式:TYPE Variable :TYPE Variable 或或 la
35、bellabel如果是变量,则汇编程序将回送该变量的以字节数如果是变量,则汇编程序将回送该变量的以字节数表示的类型。表示的类型。DB 1, DW 2, DD 4,DB 1, DW 2, DD 4,DQ 8, DT 10DQ 8, DT 10如果是标号则回送代表该标号类型的数值如果是标号则回送代表该标号类型的数值NEAR -1, FAR -2NEAR -1, FAR -2 55例例:A1 DW 1,2,3:A1 DW 1,2,3 则则ADD SI,TYPE A1ADD SI,TYPE A1 ADD SI, 2 ADD SI, 256 LENGTH LENGTH 对于变量中使用对于变量中使用DUP
36、DUP时时, ,回送分配给该回送分配给该变量的单元数;其它情况则回送变量的单元数;其它情况则回送1 1。例例:FEES DW 100 dup(0):FEES DW 100 dup(0) 则则:MOV CX,LENGTH FEES MOV CX 100:MOV CX,LENGTH FEES MOV CX 100 MOV CX,LENGTH A1 MOV CX,1 MOV CX,LENGTH A1 MOV CX,157 SIZE SIZE 格式:格式:SIZE VariableSIZE Variable回送分配该变量的字节数:回送分配该变量的字节数:LENGTHLENGTH值和值和TYPETYPE
37、值值的乘积。的乘积。例:例:MOV CX,SIZE FEES MOV CX,200MOV CX,SIZE FEES MOV CX,200 MOV CX,SIZE A1 MOV CX,2 MOV CX,SIZE A1 MOV CX,258 OFFSET OFFSET 格式:格式:OFFSET VariableOFFSET Variable或或labellabel 回送变量或标号的偏移地址回送变量或标号的偏移地址例:例:MOV BX,OFFSET P1 LEA BX,P1MOV BX,OFFSET P1 LEA BX,P159 606162 6364 SHORT SHORT:JMPJMPJMP S
38、HORT TAGJMP SHORT TAG TAG: TAG: 65 THIS THIS 格式为:格式为:THIS type THIS type 或或 attributeattribute它可它可以象以象 PTR PTR 一样建立一个指定类型(一样建立一个指定类型(BYTEBYTE,WORDWORD或或DWORDDWORD)或指定距离()或指定距离(NEARNEAR,FARFAR)的地址操作符,)的地址操作符,该操作符的段地址和偏移地址与下一个存储单元的该操作符的段地址和偏移地址与下一个存储单元的地址相同地址相同66例例1 1:F1 EQU THIS BYTEF1 EQU THIS BYTE
39、F2 DW 100 DUP F2 DW 100 DUP(?)(?)此时,此时,F1F1的偏移地址与的偏移地址与F2F2完全相同,但完全相同,但 F1F1是字节是字节类型,类型,F2F2是字类型。是字类型。67例例2 2:START EQU THIS FARSTART EQU THIS FAR MOV CX MOV CX, 100100此时,此时,MOVMOV指令有一个指令有一个FARFAR属性的地址属性的地址STARTSTART;这就允;这就允许其他段的许其他段的JMPJMP指令直接转到指令直接转到STARTSTART来。来。68 HIGH HIGH和和LOWLOW:字节分离操作符,它接收一个
40、树或:字节分离操作符,它接收一个树或地址表达式,地址表达式,HIGHHIGH取其高位字节,取其高位字节,LOWLOW取其低位字取其低位字节。节。例:例:CONST EQU OABCDHCONST EQU OABCDH MOV AH,HIGH CONST MOV AH MOV AH,HIGH CONST MOV AH,OABHOABH696 6、表达式的运算次序:、表达式的运算次序: 表达式中的运算优先级从高到低排列如下:表达式中的运算优先级从高到低排列如下: 圆括号中的项,方括号中的项,结构变量(变量,圆括号中的项,方括号中的项,结构变量(变量,字段)字段)LENGTHLENGTH,SIZES
41、IZE 名:(段取代)名:(段取代) PTRPTR,OFFSETOFFSET,SEGSEG,TYPETYPE,THISTHIS及段操作符。及段操作符。70 HIGH HIGH,LOWLOW 乘法,除法:乘法,除法:* *,/ /,MODMOD,SHLSHL,SHRSHR 加法,减法:加法,减法:+ +,- - 关系操作符关系操作符:EQ,NE,LT,LE,GT,GE:EQ,NE,LT,LE,GT,GE 逻辑逻辑NOTNOT 逻辑逻辑ANDAND 逻辑逻辑XOR,ORXOR,OR71四四. .注释项:注释项: 写出本条(或本段)指令在程序中的功能写出本条(或本段)指令在程序中的功能和作用,而不应
42、该只写指令的动作。和作用,而不应该只写指令的动作。 72程序结束时使用标号为程序结束时使用标号为4C4C的功能调用返回的功能调用返回DOSDOS。 MOV AX,4C00HMOV AX,4C00H INT 21H INT 21H73一一. .结构结构将不同类型的数据形成的数组,定义为结构数将不同类型的数据形成的数组,定义为结构数据类型:据类型:1.1.定义定义格式:结构名格式:结构名 STRUCSTRUC 字段名字段名 ; 如如DB,DW,DDDB,DW,DD等等 : 定义的一组变量定义的一组变量 : 名,称为结构字名,称为结构字 段名段名 结构名结构名 ENDSENDS 74例如:例如: A
43、BC STRUCABC STRUC A DB ? A DB ? B DB ABC12 B DB ABC12 C DW 120 C DW 120 ABC ENDS ABC ENDS注意:注意:“定义定义”仅为结构定义并未给出存储单仅为结构定义并未给出存储单元的分配和字段的值,即只有形式,无内容,元的分配和字段的值,即只有形式,无内容,它们的使用需通过结构的存储分配和设置来实它们的使用需通过结构的存储分配和设置来实现。现。752.2.结构变量的存储分配与设置结构变量的存储分配与设置格式:结构变量名格式:结构变量名 结构名结构名 字段值表字段值表 所赋初值所赋初值实体,通过字段值表给出结构中各名的存
44、储分配实体,通过字段值表给出结构中各名的存储分配及初值,故结构变量名与具体的存储空间和数据及初值,故结构变量名与具体的存储空间和数据相连,可在程序中直接引用。相连,可在程序中直接引用。76如:如: SA ABC SA ABC SB ABC ; SB ABC ; 均用结构定义的初值均用结构定义的初值 SSA ABC 100 DUP ()SSA ABC 100 DUP ()773.3.结构及字段的引用。结构及字段的引用。通过结构变量名及其字段名来使用结构中的通过结构变量名及其字段名来使用结构中的字段,可有其它寻址方式。字段,可有其它寻址方式。如:如: MOV AL,SAAMOV AL,SAA MO
45、V AX,SBC MOV AX,SBC78注:结构的定义与设置注:结构的定义与设置 在在DSDS段段 结构变量的引用结构变量的引用 在在CSCS段段79结构举例:结构举例: DATA SEGMENTDATA SEGMENT SA STRUC SA STRUC C1 DW 0 C1 DW 0 C2 DW ? C2 DW ? C3 DB C3 DB 10DUP(?)10DUP(?) SA ENDS SA ENDS N1 SA N1 SA N2 SA ,20, N2 SA N3 SA N3 SA 100DUP()100DUP() DATA ENDS DATA ENDS80Stack segmentS
46、tack segment stack stack DB DB 200DUP(?)200DUP(?)Stack endsStack endsCODE segmentCODE segment ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: MOV AX,DATASTART: MOV AX,DATA MOV DS,AX MOV DS,AX;将;将N1,N2N1,N2的的C2C2字段值相加,结果存入字段值相加,结果存入AXAX中。中。81 MOV BX,offset N1 MOV BX,offset N1 MOV AX,BX.C2 MOV AX,
47、BX.C2 MOV BX,offset N2 MOV BX,offset N2 ADD AX,BX.C2 ADD AX,BX.C2 ;置;置N3N3结构类型数组的结构类型数组的C2C2字段为字段为AXAX中的和值。中的和值。 MOV BX,offset N3MOV BX,offset N3 MOV CX,length N3-1 MOV CX,length N3-1 MOV MOV SI,TYPE N3SI,TYPE N3;82 LP1LP1:MOV BX+SI.C2,AXMOV BX+SI.C2,AX ADD BX,SI ADD BX,SI;指向下一个数组元素;指向下一个数组元素 LOOP L
48、P1LOOP LP1 ;传;传N2N2的的C2C2字段为字段为0 0值值 XOR AX,AXXOR AX,AX MOV N2.C2,AX MOV N2.C2,AX MOV AH,4CH MOV AH,4CH INT 21H INT 21H CODE ENDS CODE ENDS END start END start83二、记录二、记录用来表示只要几位就可以表示的数据,与结用来表示只要几位就可以表示的数据,与结构类似需先定义,在分配和设置数值后,才构类似需先定义,在分配和设置数值后,才能引用能引用841 1、定义、定义: :格式为:格式为:记录名记录名recordrecord字段名:宽度字段名:宽度| =|
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村一体化工作制度
- 五四八小时工作制度
- 乡安办分管工作制度
- tdk公司工作制度
- 代煎工作制度及流程
- 办公室办文工作制度
- 加拿大政府工作制度
- 劳动法课堂工作制度
- 医学生实习工作制度
- 医药办公室工作制度
- 智慧树知到《形势与政策》2026春章节测试附答案
- 污水处理厂设备拆除技术安全管理方案
- 2026中考语文作文高频主题预测(附写作思路)
- 吉林省吉林市2026年中考语文模拟试卷五套附答案
- AQ 3067-2026 《化工和危险化学品生产经营企业重大生产安全事故隐患判定准则》解读
- 基层中医药工作考核制度
- 【初中地理】白山黑水-东北三省第1课时课件-2025-2026学年八年级地理下学期(人教版2024)
- 【期末】《生成式人工智能应用基础》(杭州电子科技大学)期末考试慕课答案
- 常熟介绍教学课件
- 金融服务企业合规操作手册
- 发改局安全生产培训课件
评论
0/150
提交评论