第4讲 汇编变量定义及常用伪指令_第1页
第4讲 汇编变量定义及常用伪指令_第2页
第4讲 汇编变量定义及常用伪指令_第3页
第4讲 汇编变量定义及常用伪指令_第4页
第4讲 汇编变量定义及常用伪指令_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4讲讲 变量定义及常用伪指令变量定义及常用伪指令熟悉常数的分类及其正确的表示方法熟悉常数的分类及其正确的表示方法了解表达式中涉及到的运算符的功能作用了解表达式中涉及到的运算符的功能作用掌握变量定义伪指令掌握变量定义伪指令DB/DW/DD,理解变量在内存存,理解变量在内存存储空间中的分布储空间中的分布掌握掌握OFFSET、SEG、PTR、$伪指令,了解其他常伪指令,了解其他常用地址操作符和类型操作符用地址操作符和类型操作符掌握字符串的输入输出方法掌握字符串的输入输出方法第第4讲讲 变量定义及常用伪指令变量定义及常用伪指令硬指令和伪指令硬指令和伪指令n硬指令硬指令使使CPU产生动作、并在程序执

2、行时才处理的产生动作、并在程序执行时才处理的语句,如语句,如mov、add等等n伪指令伪指令(Directive)不产生不产生CPU动作、在程序执动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等变量定义等等n伪指令与具体的处理器类型无关,但与汇编程序的版本伪指令与具体的处理器类型无关,但与汇编程序的版本有关有关 本课程采用微软宏汇编程序本课程采用微软宏汇编程序 MASM 6.11汇编语言程序的语句格式汇编语言程序的语句格式 执行性语句执行性语句由硬指令构成的语句,它通常对应由硬指令构成的语句,它通常对应一条机器指令,出现

3、在程序的代码段中:一条机器指令,出现在程序的代码段中:标号标号: 硬指令助记符硬指令助记符 操作数操作数,操作数操作数;注释;注释 说明性语句说明性语句由伪指令构成的语句,它通常指示由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:汇编程序如何汇编源程序:名字名字 伪指令助记符伪指令助记符 参数参数,参数参数,;注释;注释标号标号是反映硬指令位置(逻辑地址)的标识符,是反映硬指令位置(逻辑地址)的标识符,后跟一个冒号分隔后跟一个冒号分隔名字名字是反映伪指令位置(逻辑地址)和属性的标识符,是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,后跟空格或制表符分隔,没有一个冒号没有

4、一个冒号处理器指令的处理器指令的操作数操作数可以是可以是立即数、寄存器和存储单元立即数、寄存器和存储单元伪指令的伪指令的参数参数可以是常数、变量名、可以是常数、变量名、表达式等,可以有多个,参数之间表达式等,可以有多个,参数之间用逗号分隔用逗号分隔语句中由分号语句中由分号“;”开始的部分为注释内容,用以增加开始的部分为注释内容,用以增加源程序的可读性源程序的可读性必要时,一个语句行也可以由分号开始作为阶段性注释必要时,一个语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理标识符标识符标识符标识符(Id

5、entifier)一般最多由)一般最多由31个字母、数字及规定的个字母、数字及规定的特殊符号(如特殊符号(如 _、 、$、?、%)组成,不能以数字开头。)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写默认情况下,汇编程序不区别标识符中的字母大小写一个程序中,每个标识符的定义是唯一的,还不能是汇编一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字语言采用的保留字o 伪硬指令助记符伪硬指令助记符例如:例如:MOV、ADDo 指令助记符指令助记符例如:例如:DB、EQUo 操作符操作符例如:例如:OFFSET、PTRo 寄存器名寄存器名例如:例如:AX、CSo

6、预定义符号预定义符号例如:例如:data第第4讲讲 变量定义及常用伪指令变量定义及常用伪指令1 数值型参数数值型参数2 变量定义伪指令变量定义伪指令3 变量和标号的属性变量和标号的属性4 字符串的输入输出方法字符串的输入输出方法1 数值型参数数值型参数在源程序语句格式的在源程序语句格式的4个组成部分中,参数是指令的操作对个组成部分中,参数是指令的操作对象(学习硬指令时被称为操作数),参数之间用逗号分隔象(学习硬指令时被称为操作数),参数之间用逗号分隔参数根据指令不同可以没有,可以有参数根据指令不同可以没有,可以有1个、个、2个或多个个或多个汇编语言程序中,指令参数有数值型,它的主要形式是常汇编

7、语言程序中,指令参数有数值型,它的主要形式是常数和数值表达式;数和数值表达式;汇编语言程序中,指令参数还有地址型,它的主要形式是标汇编语言程序中,指令参数还有地址型,它的主要形式是标号和名字(变量名、段名、过程名等)号和名字(变量名、段名、过程名等)(1) 常数常数常数(常量)常数(常量)表示一个固定的数值表示一个固定的数值它又分成多种形式:它又分成多种形式:(1)十进制常数十进制常数(2)十六进制常数十六进制常数(3)二进制常数二进制常数(4)八进制常数)八进制常数(5)字符串常数字符串常数(6)符号常数符号常数十进制常数十进制常数由由0 9数字组成,以字母数字组成,以字母D或或d结尾结尾缺

8、省情况下,后缀缺省情况下,后缀D或或d可以省略可以省略汇编语言大小写不敏感,汇编语言大小写不敏感,D和和d通用通用例如:例如:100、255DDEBUG下默认的是十六进制数据,但在编写汇编语言下默认的是十六进制数据,但在编写汇编语言源程序的时候默认的是十进制!源程序的时候默认的是十进制!十六进制常数十六进制常数由由09、AF组成,以字母组成,以字母H或或h结尾结尾以字母以字母AF开头的十六进制数,前面要用开头的十六进制数,前面要用0表表达,以避免与其他符号混淆达,以避免与其他符号混淆汇编语言大小写不敏感,汇编语言大小写不敏感, H和和h 通用通用例如:例如:64H、0FFh、0B800H二进制

9、常数二进制常数由由0或或1两个数字组成,以字母两个数字组成,以字母B或或b结尾结尾汇编语言大小写不敏感,汇编语言大小写不敏感,B和和b通用通用例如:例如:01101100B字符串常数字符串常数用单引号或双引号括起来用单引号或双引号括起来的单个字符或多个字的单个字符或多个字符,其数值是每个字符对应的符,其数值是每个字符对应的ASCII码的值码的值例如:例如:d = 64HAB= 4142HHello, Everybody !符号常数符号常数利用一个标识符表达的一个数值,用于常量定义利用一个标识符表达的一个数值,用于常量定义等价等价EQU伪指令伪指令符号名符号名 EQU EQU 数值表达式数值表达

10、式符号名符号名 EQU EQU 等号等号=伪指令伪指令符号名符号名 = = 数值表达式数值表达式EQUEQU不允许重复赋值,但不允许重复赋值,但= =则无此限制则无此限制常数若使用有意义的符号名来表示,可以提高程序的可常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性读性,同时更具有通用性符号定义符号定义DosWriteCharDosWriteChar equequ 2 2CarriageReturnCarriageReturn = 13 = 13CallDOSCallDOS equequ 21h符号应用(左边程序段等价右侧的符号形式)符号应用(左边程序段等价右侧的符号形式

11、)movmov ah,2 ah,2; ;movmov ah,DosWriteCharah,DosWriteCharmovmov dl,13 dl,13; ;movmov dl,CarriageReturndl,CarriageReturnintint 21h 21h; ;CallDOSCallDOS符号常数实例符号常数实例(2) 数值表达式数值表达式数值表达式一般是指由运算符连接的各种常数所构成的表数值表达式一般是指由运算符连接的各种常数所构成的表达式达式汇编程序在汇编过程中计算表达式,最终得到一个数值汇编程序在汇编过程中计算表达式,最终得到一个数值程序运行之前,就已经计算出了表达式;所以,程

12、序运行程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性速度没有变慢,但增强程序的可读性运算符运算符算术运算符算术运算符+ - * / MOD逻辑运算符逻辑运算符AND OR XOR NOT移位运算符移位运算符SHL SHR关系运算符关系运算符EQ NE GT LT GE LE高低分离符高低分离符HIGH LOW HIGHWORD LOWWORD算术算术运算符运算符实现加、减、乘、除、取余的算术运算实现加、减、乘、除、取余的算术运算movmov ax,3 ax,3* *4+54+5; ;等价于等价于 movmov ax,17 ax,17其中其中MODMOD也称为

13、取模,它产生除法之后的余数,如也称为取模,它产生除法之后的余数,如19 19 mod 7 = 5mod 7 = 5加加+和减和减-运算符还可以用于地址表达式运算符还可以用于地址表达式除加、减外,其他运算符的参数必须是整数除加、减外,其他运算符的参数必须是整数逻辑逻辑运算符运算符实现按位相与、相或、异或、求反的逻辑运算实现按位相与、相或、异或、求反的逻辑运算or al,03h AND 45hor al,03h AND 45h; ;等价于等价于 or al,01hor al,01h移位移位运算符运算符实现对数值的左移、右移的逻辑操作;移入低实现对数值的左移、右移的逻辑操作;移入低位或高位的是位或高

14、位的是0 0格式为:格式为:数值表达式数值表达式 SHL/SHR SHL/SHR 移位次数移位次数movmov al,0101b SHL (2 al,0101b SHL (2* *2)2); ;等价于等价于 movmov al,01010000b al,01010000b关系关系运算符运算符用于比较和测试符号数值用于比较和测试符号数值MASMMASM用用0FFFFH0FFFFH(补码(补码 -1-1)表示条件为真)表示条件为真MASMMASM用用0000H0000H表示条件为假表示条件为假movmov bx,(PORTbx,(PORT LT 5)AND 20)OR(PORT GE 5)AND

15、30) LT 5)AND 20)OR(PORT GE 5)AND 30); ;当当PORT5PORT5时,汇编结果为时,汇编结果为movmov bx,20 bx,20; ;否则,汇编结果为否则,汇编结果为movmov bx,30 bx,30高低分离符高低分离符取数值的高半部分或低半部分取数值的高半部分或低半部分HIGHHIGH、LOWLOW从一个从一个字字数值或符号常量中得到高、低字节数值或符号常量中得到高、低字节movmov ah,HIGHah,HIGH 8765h 8765h; ;等价于等价于movmov ah,87h ah,87h从从MASM 6.0MASM 6.0引入的引入的HIGHW

16、ORDHIGHWORD、LOWWORDLOWWORD取一个取一个符号常量符号常量(不能是其他常数)的高字或低字部分(不能是其他常数)的高字或低字部分dd_valuedd_value equequ 0ffff1234h 0ffff1234h; ;定义一个符号常量定义一个符号常量movmov ax,LOWWORDax,LOWWORD dd_valuedd_value; ;等价于等价于movmov ax,1234h ax,1234h2 变量定义伪指令变量定义伪指令变量定义(变量定义(Define)伪指令为变量申请固定长度)伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化的存储空间,

17、并可同时将相应的存储单元初始化变量名变量名 伪指令助记符伪指令助记符 初值表初值表 变量定义伪指令最常使用变量定义伪指令最常使用变量名变量名变量名为用户自定义标识符,变量名为用户自定义标识符,表示初值表首元素的逻表示初值表首元素的逻辑地址辑地址;用这个符号表示地址,常称为符号地址;用这个符号表示地址,常称为符号地址变量名可以没有。这种情况,汇编程序将直接为初值变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址表分配空间,无符号地址设置变量名是为了方便存取它指示的存储单元设置变量名是为了方便存取它指示的存储单元初值表初值表初值表是用逗号分隔的参数初值表是用逗号分隔的参数主要由数

18、值常数、表达式或?、主要由数值常数、表达式或?、DUP组成组成?表示初值不确定,即未赋初值;表示初值不确定,即未赋初值;DUP表示重复初值表示重复初值DUP的格式为:的格式为:重复次数重复次数 DUP(重复参数重复参数)变量定义伪指令助记符变量定义伪指令助记符变量定义伪指令根据申请的主存空间单位分类变量定义伪指令根据申请的主存空间单位分类DB定义字节伪指令定义字节伪指令DW定义字伪指令定义字伪指令DD定义双字伪指令定义双字伪指令DF定义定义3字伪指令字伪指令DQ定义定义4字伪指令字伪指令DT定义定义10字节伪指令字节伪指令还有定位伪指令还有定位伪指令定义字节单元伪指令定义字节单元伪指令DBDB

19、DB伪指令用于分配一个或多个字节单元,并可以将它伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值们初始化为指定值初值表中每个数据一定是字节量(初值表中每个数据一定是字节量(Byte),存放一个),存放一个8位数据:位数据: 可以是可以是0255的无符号数的无符号数 或是或是128127带符号数带符号数 也可以是字符串常数也可以是字符串常数datadatasegmentsegment;数据段;数据段X Xdb a,-5db a,-5db 2 dup(100),?db 2 dup(100),?Y Ydb ABCdb ABCdatadataendsends字节单元定义实例字节单元定义实例

20、movmov al,Xal,X; ;此处此处X X表示它的第表示它的第1 1个数据,故个数据,故ALaALa decdec X+1 X+1; ;对对X X为始的第为始的第2 2个数据减个数据减1 1,故成为,故成为-6-6movmov Y,alY,al; ;现在现在Y Y这个字符串成为这个字符串成为 a aBCBC 字节变量的应用字节变量的应用定义字单元伪指令定义字单元伪指令DWDWDW伪指令用于分配一个或多个字单元,并可以将伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值它们初始化为指定值初值表中每个数据一定是字量(初值表中每个数据一定是字量(Word),一个字),一个字单元可用于

21、存放任何单元可用于存放任何16位数据:位数据: 一个段地址一个段地址一个偏移地址一个偏移地址 两个字符两个字符 065535之间的无符号数之间的无符号数 3276832767之间的带符号数之间的带符号数datadatasegmentsegment;数据段;数据段countcount dwdw 8000h,?,AB 8000h,?,ABmaxintmaxint equequ 64h 64hnumbernumber dwdw maxintmaxintarrayarray dwdw maxintmaxint dup(0) dup(0)datadataendsends字单元定义实例字单元定义实例字变量

22、和字常量的定义:字变量和字常量的定义:WNUMWNUMEQU 5678HEQU 5678H; ;定义定义WNUMWNUM为常量为常量COUNTCOUNT DW 20HDW 20H; ;定义定义COUNTCOUNT变量,假设在数据段的偏移地址为变量,假设在数据段的偏移地址为10H10H字变量和字常量的应用:字变量和字常量的应用:MOV AX,BX+SI+WNUMMOV AX,BX+SI+WNUM; MOV AX,BX+SI+5678H; MOV AX,BX+SI+5678HMOV AX,COUNTMOV AX,COUNT; MOV AX,0010H; MOV AX,0010HMOV AX,SI+

23、COUNTMOV AX,SI+COUNT; MOV AX,COUNTSI; MOV AX,COUNTSI; MOV AX,SI+10H; MOV AX,SI+10HLEA BX,COUNTLEA BX,COUNT; LEA BX,0010H; LEA BX,0010HMOV BX,OFFSET COUNTMOV BX,OFFSET COUNT; MOV BX,0010H; MOV BX,0010H字变量和字常量字变量和字常量例题例题.model small.model small.stack.stack.data.dataX Xdwdw 5 5Y Ydwdw 6 6Z Zdwdw 7 7W W

24、dwdw ? ? .code .code.startup.startupmovmov ax,Xax,Xadd add ax,Yax,Yadd add ax,Zax,Zmovmov W,axW,ax.exit 0.exit 0endend设有设有3个字变量个字变量X,Y和和Z,初值分别为,初值分别为5,6和和7,试求出三,试求出三者之和,并存入字变量者之和,并存入字变量W中。中。定义双字单元伪指令定义双字单元伪指令DDDDDD伪指令伪指令用于分配一个或多个双字单元,并可以将它用于分配一个或多个双字单元,并可以将它们初始化为指定值们初始化为指定值初值表中每个数据是一个初值表中每个数据是一个3232

25、位的双字量(位的双字量(Double Double WordWord):): 可以是有符号或无符号的可以是有符号或无符号的3232位整数位整数 也可以用来表达也可以用来表达1616位段地址(高位字)和位段地址(高位字)和1616位的位的偏移地址(低位字)的远指针偏移地址(低位字)的远指针varddvarddDD 0,?,12345678hDD 0,?,12345678hfarpointfarpointDD 00400078hDD 00400078h定位伪指令定位伪指令定位伪指令控制数据的偏移地址定位伪指令控制数据的偏移地址ORGORG 参数参数ORGORG伪指令是将当前偏移地址指针指向参数表达

26、的伪指令是将当前偏移地址指针指向参数表达的偏移地址:偏移地址:ORG 100hORG 100h; ;从从100h100h处安排数据或程序处安排数据或程序ORG $+10ORG $+10; ;使偏移地址加使偏移地址加1010,即跳过,即跳过1010个字节空间个字节空间MASMMASM中,符号中,符号“$ $”表示当前偏移地址值表示当前偏移地址值3 变量和标号的属性变量和标号的属性 地址属性地址属性v标号和名字对应存储单元的逻辑地址标号和名字对应存储单元的逻辑地址v逻辑地址包括:段地址和偏移地址逻辑地址包括:段地址和偏移地址 类型属性类型属性v标号、子程序名的类型可以是标号、子程序名的类型可以是N

27、EAR(近)和(近)和FAR(远),分别表示段内或段间(远),分别表示段内或段间v变量名的类型可以是变量名的类型可以是BYTE(字节)、(字节)、WORD(字)(字)和和DWORD(双字)等(双字)等地址操作符地址操作符取得名字或标号的段地址和偏移地址两个属性取得名字或标号的段地址和偏移地址两个属性 将括起的表达式作为存储器地址将括起的表达式作为存储器地址$ $当前偏移地址当前偏移地址:采用指定的段地址寄存器采用指定的段地址寄存器OFFSET OFFSET 名字名字/ /标号标号返回名字或标号的偏移地址返回名字或标号的偏移地址SEG SEG 名字名字/ /标号标号返回名字或标号的段地址返回名字

28、或标号的段地址org org $ $+10+10arrayarraydb 45,45hdb 45,45h.code.codemovmov ax,ax,segseg array arraymovmov ds,axds,axmovmov bx,bx,offsetoffset array array; ;等价于等价于 lea lea bx,arraybx,arraymovmov cl,array cl,array+ +4 4; ;等效于等效于 movmov cl,array4 cl,array4movmov ax, ax,es:2000hes:2000h地址操作符实例地址操作符实例 加加4个字节单元

29、个字节单元类型名类型名 PTR 名字名字/标号标号PTRPTR操作符使名字或标号具有指定的类型操作符使名字或标号具有指定的类型类型名类型名可以是可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTEBYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者是或者是NEAR/FARNEAR/FARmovmov al,byteal,byte ptrptr w_varw_var; ;w_varw_var是一个字变量是一个字变量使用使用PTRPTR操作符,可以临时改变名字或标号的类型操作符,可以临时改变名字或标号的类型4 字符串的输入输出方法字符串的输入输出方法同字符的输

30、入输出类似,字符串的输入输出也采用同字符的输入输出类似,字符串的输入输出也采用DOS提供给用户的用于调用系统功能的提供给用户的用于调用系统功能的21H号中断来实现。号中断来实现。通常按照如下通常按照如下4 4个步骤进行:个步骤进行: 在在AHAH寄存器中设置系统功能调用号寄存器中设置系统功能调用号 在指定寄存器中设置入口参数在指定寄存器中设置入口参数 执行指令执行指令INT 21HINT 21H(或(或ROM-BIOSROM-BIOS的中断向量号)实现中的中断向量号)实现中断服务程序的功能调用断服务程序的功能调用 根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况字符串输出的功能

31、调用字符串输出的功能调用DOS功能调用功能调用INT 21Hn功能号:功能号:AH09Hn入口参数:入口参数:DS:DX欲显示字符串在主存中的首地址欲显示字符串在主存中的首地址字符串应以字符串应以$(24H)结束)结束n功能:在显示器输出指定的字符串功能:在显示器输出指定的字符串可以输出回车(可以输出回车(0DH)和换行()和换行(0AH)字符产生)字符产生回车和换行的作用回车和换行的作用例:显示字符串例:显示字符串.model small.model small.stack.stack.data.data buf1 db Hello,0dh,0ah, this is an example.$

32、,0dh,0ahbuf1 db Hello,0dh,0ah, this is an example.$,0dh,0ah buf2 db -END-$ buf2 db -END-$.code.code.startup.startupmovmov dxdx, , offsetoffset buf1 buf1movmov ah, 9 ah, 9intint 21h 21h lea lea dxdx, buf2, buf2movmov ah, 9 ah, 9intint 21h 21h.exit 0 .exit 0 end end 如果去掉如果去掉“$”显示的结果又会是什么?显示的结果又会是什么?字符串输入的功能调用字符串输入的功能调用DOS功能调用功能调用INT 21Hn功能号:功能号:AH0AHn入口参数:入口参数:DS:DX缓冲区首地址缓冲区首地址执行该功能调用时,用户按键,最后用回车确认执行该功能调用时,用户按键,最后用回车确认本调用可执行全部标准键盘编辑命令;用户按回车键本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按结束输入,如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论