汇编语言的伪指令语句.ppt
《汇编语言的伪指令语句.ppt》由会员分享,可在线阅读,更多相关《汇编语言的伪指令语句.ppt(104页珍藏版)》请在三一办公上搜索。
1、(三)汇编语言的伪指令语句一、符号定义伪指令语句 为一个表达式或指令助记符赋予一个符号名。在后继程序文本中,可以使用该符号名来替代这个表达式或指令助记符。(1)等值语句 EQU 格式:符号名EQU表达式/指令助记符例如:PORT1EQU 312;为数值常量312赋予符号名PORT1 PORT2EQU PORT1+1;为数值表达式赋予符号名PORT2 ADDREQU ES:SI+4;为地址表达式定义一个名字 STRINGEQU COMPUTER;为字符串常量定义一个名字 COUNTEQU CX;为寄存器CX定义新的符号名 LDEQU MOV;为助记符MOV定义新的符号名LD,说明:在EQU语句的
2、表达式中,如果有标号名或变量名,则该语句必须放在它们的定义语句之后。例如AB EQU DATA+2必须放在标识符DATA的定义之后,否则汇编程序将指示以下错误:Symbol not defined:DATA 后面的EQU伪操作可以利用前面的EQU伪操作已经定义的符号名。例如:ALPHA EQU 7;给数值7 赋以符号名ALPHABETA EQU ALPHA-2;给7-2=5赋以符号名BETAADDR EQU VAR+BETA;给VAR+5赋以符号名ADDR,使用EQU伪操作定义过的符号名不允许重复定义。例如:EMP EQU 0;给数值7赋以符号名ALPHAEMP EQU EMP+1;汇编该语句
3、时,汇编程序将指示出错。(2)等号语句=格式:符号名=表达式/指令助记符 该语句的功能与EQU完全相同,唯一的区别是:该语句可以对符号名进行重复定义。例如:EMP=0;定义符号名EMP为0EMP=EMP+1;重新定义符号名EMP为1,完全合法。,二、数据定义伪指令语句 数据定义语句用于定义变量,该语句指定变量的名称和变量的类型,并为该变量分配存储单元。,(1)数据定义语句的格式 变量名 数据定义符 操作数,操作数,操作数其中,变量名:可选项。操作数:赋给变量的初值,多个相同类型的变量可在一条语句中定义。数据定义符 常用数据定义符有以下三种。DB:定义字节变量,每个变量占有1个字节的存储单元。D
4、W:定义字变量,每个变量占有2个字节的存储单元。DD:定义双字变量,每个变量占有4个字节的存储单元。此外,还有DQ、DF和DT等类型。对于多字节变量,其变量值的内存存放规则是,低位字节占低地址单元,高位字节占高地址单元。,说明:经过定义的变量必然具有以下三个属性。数据类型 字节、字、双字等等。偏移地址 分配给该变量的存储单元的偏移地址。段基址 分配给该变量的存储单元的段基址,也就是定义该变量的逻辑段的段基址。,(2)数据定义语句的具体形式和功能 根据操作数的不同表达形式,常见的数据定义语句有以下几种具体形式。操作数是一个数值常量 例如:X DB 25H;定义一个名为 X、初值为25H的字节变量
5、 Y DW 4142H;定义一个名为 Y、初值为4142H的字变量 Z DD 12345678H;定义一个名为 Z、初值为12345678H的双字变量,X,25H,Y,42H,41H,Z,78H,56H,34H,12H,汇编时,汇编程序将完成以下工作:首先,定义名为 X 的字节变量,并为其分配一个字节单元,然后再把初值25H装入该单元中。随后,定义名为 Y 的字变量,并为其分配一个字单元,然后再把初值4142H装入该单元中。最后,定义名为 Z 的双字变量,并为其分配一个双字单元,然后再把初值12345678H装入该单元中。,操作数是一个数值表达式 例如:PORT EQU 80H OUT_POR
6、T DW PORT+1 汇编程序将定义一个名为OUT_PORT的字类型变量,并为其分配一个字单元,然后计算数值表达式(PORT+1)的数值,并把计算结果0081H装入该单元中。,OUT_PORT,81H,00H,操作数部分使用问号?例如:A DB?;定义字节变量A,并为其分配一个字节单元B DW?;定义字变量B,并为其分配一个字单元 汇编程序只为变量分配存储单元,并不赋予其具体的初值,该变量的初值不确定。,A,B,操作数部分是用逗号分隔的若干个操作数 例如:TABLE DW 1,2,3,TABLE,01H,00H,02H,00H,03H,00H,汇编程序首先定义一个名为TABLE的字类型变量,
7、并为该变量分配一个字单元,再将变量初始值0001H装入其中。然后,再为一个无名字变量分配一个字单元,并将变量初始值0002H装入其中。最后,再为一个无名字变量分配一个字单元,并将变量初始值0003H装入其中。,这个数据定义语句定义了三个变量,第一变量的变量名为TABLE,其它两个变量没有变量名。但是由于这三个变量的存储单元依次排列,具有线性存储特性,因此我们可以将这种数据定义语句看成是数组变量的定义语句,并将第一个变量的变量名TABLE看成是数组变量名,将这三个变量看成是该数组的数组元素。于是各数组元素的访问地址可以用下式来确定。数组元素地址=数组变量名+数组元素下标值*数组元素字节大小,TA
8、BLE,01H,00H,02H,00H,03H,00H,MOV AX,TABLE;(AX)=0001HMOV AX,TABLE+1*2;(AX)=0002HMOV AX,TABLE+2*2;(AX)=0003H,在定义数组变量时,可以使用重复操作符DUP 来定义各个数组元素,其定义格式如下。重复次数 DUP(操作数1,操作数N)这个表达形式的含义是,将括号中的N个操作数,以指定的次序,重复指定次数。其中,重复次数字段是值为正整数的数值表达式。例如:TABLE DB 2 DUP(0,1),2 TABLE DB 0,1,0,1,2 注意:DUP重复操作符可以嵌套使用,例如以下两式是等价的。TABL
9、E DB 2 DUP(2 DUP(1,2),3)TABLE DB 1,2,1,2,3,1,2,1,2,3,C,D,A,B,操作数是一个字符串常量 例如:STRINGDB ABCDEF 该语句定义了一个字符数组变量STRING。汇编程序将为这个数组变量分配一个数据区,并将字符串中每一个字符的ASCII码依次装入到数据区的各个字节单元中。,STRING,41H,42H,43H,44H,E,F,45H,46H,STRING2,注意:当字符串长度超过两个字符时,伪指令定义符只能使用 DB。当字符串长度不超过两个字符时,伪指令定义符 DB、DW、DD、DQ 等都可以使用,但它们的意义有所不同。例如:ST
10、RING1 DB ABSTRING2 DW AB,B,A,A,B,STRING1,41H,42H,42H,41H,MOV AL,STRING1;(AL)=41HMOV AL,STRING1+1;(AL)=42HMOV AX,STRING2;(AX)=4142H,X,ADDR2,操作数是一个存储器地址(标号、过程名或变量名)例:XDB10HADDR1DWXADDR2DDX,ADDR1,变量X的偏移地址的低字节,变量X的偏移地址的高字节,变量X的偏移地址的低字节,变量X的偏移地址的高字节,变量X的段基址的低字节,变量X的段基址的高字节,10H,当操作数是一个存储器地址时,数据定义符只能使用 DW
11、或 DD。此时汇编程序将使用这个存储器地址的偏移地址(DW)或全地址(DD)来初始化变量。全地址的存放格式是,16位偏移地址放在低地址单元,16位段地址放在高地址单元。,操作数是如下形式的地址表达式 标号或变量名 结果为整数的数值表达式 这个地址表达式的运算结果仍然表示一个标号或变量,其类型属性和段基址属性与原来的标号或变量相同,只有其偏移量属性产生相应的增减。因此,汇编程序对这个表达式的处理完全等同于处理一个存储器地址。数据定义符只能使用 DW 或 DD,汇编程序将使用这个新存储器地址(地址表达式的运算结果)的偏移地址(DW)或 全地址(DD)来初始化变量。,例如:XDB10HADDR1DW
12、X+1ADDR2DDX+1 汇编第2条语句时,汇编程序将存储器地址X+1的偏移地址装入到分配给变量ADDR1的双字节存储单元内。汇编第3条语句时,汇编程序将存储器地址X+1的全地址装入到分配给变量ADDR2的双字存储单元内。其中16位偏移地址被存放在低字单元内,16位段地址被存放在高字单元内。,操作数是如下形式的数值表达式 变量名1-变量名2 或者 标号1-标号2 其中,变量名1和变量名2:同一逻辑段内定义的两个变量名。标号1和标号2:同一代码段内定义的两个标号。同一逻辑段内的两个标号或变量名的相减结果是一个数值,它表示两者之间相距的字节数。,TABLE2,LENGTH1,LENGTH2,TA
13、BLE1,01H,02H,03H,04H,05H,06H,04H,02H,例如:TABLE1 DB 1,2,3,4 TABLE2 DB 5,6 LENGTH1 DB TABLE2-TABLE1 LENGTH2 DB LENGTH1-TABLE2,说明:数据定义语句定义了变量的数据类型,汇编程序可以利用这种隐含的类型属性来确定某些指令是字指令、还是字节指令。例如:OPER1 DB?,?OPER2 DW?,?MOV OPER1+1,0;字节指令MOV OPER2+2,0;字指令MOV OPER1+1,AL;字节指令MOV OPER2+1,AX;字指令,(3)分析运算符(SEG、OFFSET、TYP
14、E、SIZE、LENGTH)分析运算符作用于变量或标号,运算结果为变量或标号的属性值,其使用格式为:运算符变量/标号 SEG和OFFSET运算符 SEG和OFFSET运算分别返回变量或标号的段地址和偏移地址。例如:ARRAY DB 100 DUP(0);定义字节数组变量ARRAY MOV AX,SEG ARRAY;变量ARRAY的段地址(AX)MOV DX,AXMOV BX,OFFSET ARRAY;变量ARRAY的偏移地址(BX)MOV AL,BX,TYPE、LENGTH 和SIZE操作符 TYPE操作符返回一个表示变量类型或标号类型的数值。变量的类型值是变量的字节长度值;标号的类型值只起区
15、别作用,没有实际物理意义。,在数组变量定义语句中,如果第一个操作数项使用DUP运算符定义,则该数组变量的LENGTH运算结果是此DUP运算符前面的重复次数,其它一切情况下,返回1。SIZE运算符的运算结果为TYPE运算结果和LENGTH运算结果的乘积,表示分配给数组变量的字节总数。例如:BUFFER1 DB 100 DUP(0)BUFFER2 DW 200 DUP(20H)BUFFER3 DD 100 DUP(13)则有:TYPE BUFFER1=1 LENGTH BUFFER1=100 SIZE BUFFER1=100 TYPE BUFFER2=2 LENGTH BUFFER2=200 SI
16、ZE BUFFER2=400 TYPE BUFFER3=4 LENGTH BUFFER3=100 SIZE BUFFER3=400,(4)合成运算符(PTR、THIS)合成运算符作用于变量或标号,对原变量或标号的类型属性进行修改,从而建立起一个新的变量或标号。PTR 运算符 该运算符采用原变量或标号的段属性和偏移地址属性,指定一个新的类型属性,从而建立起一个新的变量或标号,而原变量或标号的类型属性不变。例1:ARRAY1 DB 0,1,2,3;定义字节数组变量ARRAY1 ARRAY2 DW 4,5,6,1234H;定义字数组变量ARRAY2 MOV BX,WORD PTR ARRAY1;01
17、00H(BX)MOV CL,BYTE PTR(ARRAY2+3*2);34H(CL)MOV WORD PTR SI,4;0004H SI所指向的字单元,配合EQU伪指令,我们可以定义新的变量名。例如:ARRAY1 DB 0,1,2,3;定义字节数组变量ARRAY1 ARRAY2 DW 4,5,6,1234H;定义字数组变量ARRAY2 WEQUWORD PTR ARRAY1BEQUBYTE PTR ARRAY2 新变量W和B的段地址和偏移地址分别与ARRAY1和ARRAY2相同,只是它们的类型已经发生变化。在后面的程序中,可以直接使用这两个新定义的变量。MOVBX,W+3;0403H(BX)M
18、OVCL,B+6;34H(CL),THIS 操作符 THIS操作符为当前存储单元(当前地址计数器所指向的存储单元)设定一个指定类型,并与EQU伪操作配合使用,建立起一个新的变量或标号。其使用格式如下。变量或标号名 EQU THIS 类型代码例:B EQUTHIS BYTE ARRAY DW100 DUP(?)100个字的字数组ARRAY也可以按200个字节的字节数组B来使用。,LABEL 伪操作 LABEL伪操作为当前存储单元(当前地址计数器所指向的存储单元)定义一个指定类型的变量或标号。该操作符常用于设定一个数据块的属性,使其具有多重名字和属性,其使用格式如下。标号或变量名 LABEL 类型
19、代码 例:ARRAY1 LABEL WORD;定义一个名为ARRAY1的字数组变量 ARRAY2 DB 1,2,3,4;定义一个名为ARRAY2的字节数组变量 MOV AL,ARRAY2;01H(AL)MOV AX,ARRAY1;0201H(AX)ARRAY1和ARRAY这两个变量都指向同一个数据块,具有相同的段属性和偏移量属性,但是它们的类型属性不同。程序员可以根据需要按不同类型去操作数据块中的数据。,三、地址计数器与对准伪操作(1)地址计数器 地址计数器是一种指针部件,其内容是当前逻辑段内某个存储单元的段内偏移地址。当汇编程序处理一个数据项或一条指令时,汇编程序将把该数据项或该指令的目标代
20、码存放到地址计数器所指示的存储单元内。当汇编程序处理一个数据项或一条指令时,地址计数器的内容就是存放该数据项或该指令目标代码的存储单元的偏移地址。,地址计数器的工作过程如下。每当开始汇编一个逻辑段时,地址计数器的内容就被初始化为零,表示段内数据或指令目标代码将从段内偏移地址为零的位置处开始存放。当汇编程序把一条指令的目标代码存放到地址计数器所指向的存储单元后,地址计数器的内容就增加一个大小为该指令字节数的数值,指向下一条指令将要被存放的位置。当汇编程序把一个数据项存放到地址计数器所指向的存储单元后,地址计数器的内容增加一个大小为该数据项字节数的数值,指向下一个数据项将要被存放的位置。,在汇编过
21、程中,汇编程序所进行的指令代码存放、变量存储单元分配、变量初值装入等工作,正是在地址计数器的引导下来完成的。在汇编语言源程序中,用户可以使用符号$来表示地址计数器的当前值,表示存放当前数据项或当前指令目标代码的存储单元的偏移地址。,例1:JNE$+6 地址计数器的当前值$为存放该指令的存储单元的偏移地址,因此有 指令转向地址=指令的首地址+6 由于该指令是2字节指令,因此处理该指令时的IP当前值为 IP当前值=指令的首地址+2于是有 位移量=转向地址 IP当前值=4 该指令的机器代码为:75 04,例2:假设汇编处理时,变量ARRAY被分配的偏移地址为0074H,求该语句的汇编结果。ARRAY
22、 DW 1,2,$+4,3,4,$+4 解:当汇编程序处理第三个数据项($+4)时 地址计数器值的当前值$=0074H+2*2=0078H,于是有$+4=0078H+4=007CH 当汇编程序处理第六个数据项($+4)时,地址计数器值的当前值$=0074H+2*5=007EH,于是有$+4=007EH+4=0082H 因此,原来的语句等效于 ARRAY DW 1,2,7CH,3,4,82H,(2)对准伪操作 对准伪操作都是针对地址计数器的各种操作。1)指定地址伪指令(ORG)强行指定地址计数器的当前值,以改变该指令之后的代码或数据块在段内存放的偏移地址。格式1:ORG 表达式 功能:直接将表达
23、式的运算结果(0 65535)送入地址计数器。,格式2:ORG$+表达式 功能:将汇编该语句时的地址计数器当前值$加上表达式的数值,然后将最终结果送入地址计数器。说明:通过执行ORG伪指令,汇编程序将以(表达式)或($+表达式)的运算结果为起点,来存放ORG语句之后定义的代码或数据。,例:DATA SEGMENT ORG10H;X DB20H,30H ORG$+5;Y DB40H,50H DATA ENDS 说明:将地址计数器的内容设置为10H,即从DATA数据段内偏移地址为10H的存储单元开始,存放后继数据20H和30H。处理该语句时,地址计数器的内容为12H,$+5=12H+5=17H,于
24、是该语句将地址计数器的内容设置为17H,即从DATA数据段内偏移地址为17H的存储单元开始,存放后继数据40H和50H。,2)EVEN伪操作 格式:EVEN 功能:将地址计数器的内容设置为大于或等于当前值的最小偶数值,以使后继语句所定义的变量或指令开始于偶数地址。说明:字数据的地址最好是偶数。为保证字数组从偶地址开始,可以在其前使用EVEN伪操作。,3)ALIGN伪操作 格式:ALIGN 数值表达式(运算结果必须是2的幂,即2、4、8等等)功能:将地址计数器的内容设置为大于或等于当前值的最小的数值表达式运算结果的整数倍值,以使后继语句所定义的变量或指令开始于字边界、双字边界、4字边界等等。说明
25、:该伪操作可用于定位双字数组、4字数组等等操作。,四、程序分段伪指令语句 程序分段伪指令语句用于指示汇编程序和链接程序如何以逻辑段为基本单位来组织程序和分配存储器。,(1)段定义伪指令(SEGMENT/ENDS)段定义伪指令SEGMENT/ENDS用于定义一个逻辑段,指出该逻辑段的段名、段属性以及段的开始和结束位置。格式:段名 SEGMENT 定位类型 组合类型 类别名 段体段名 ENDS其中,段名:逻辑段的标识符。在汇编语言源程序中,表示链接程序分配给该逻辑段的段基址。段体:逻辑段内的汇编语句序列。定位类型、组合类型和类别名:逻辑段的三个属性。,1)定位类型当编制完成汇编语言源程序后,我们需
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 指令 语句
链接地址:https://www.31ppt.com/p-6586396.html