【进击的汇编小小白】 | 您所在的位置:网站首页 › 常见的字符常量 › 【进击的汇编小小白】 |
文章目录
常量与变量1.常量1.1字符和字符串1.2符号常量1.3数值表达式
2.变量2.1变量定义2.2变量定义伪指令2.3多字节数据的存储顺序2.3.1字节变量顺序存储2.3.2多字节数据(字、双字)小端存储2.3.3根据地址读出数据
2.4变量定位2.4.1 ORG伪指令2.4.2 ALIGN伪指令
2.5变量属性2.5.1地址操作符2.5.2类型操作符2.5.3总结速记2.5.4补【补充问题】-offset与$有何区别?2.5.5【补充问题】-type 后面加寄存器?
常量与变量
没有人可以定义你,除了你自己! 1.常量常量(Constant)是程序中使用的一个确定数值,在汇编阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量,因为是编码在指令中的量,和指令一起存储了,所以不用单独开辟主存空间,所以也就没法动态改变它了,这也正是高级语言常量无法修改的原因。 进制数字组成举例10进制由0-9组成,以D或d(默认可以省略)100,100d,100D16进制由0-9,A-F组成,以H或h结尾;以A-F开头时,前面要加0,以免与寄存器混淆64h,64H2进制由0,1组成,以B或b结尾01110010B,01110010b 1.1字符和字符串 用单引号或双引号括起来的字符,其数值是每个字符对应的ASCII码值。例如:‘d’ = 64H;“Hello,Assembly!”在支持汉字的系统中,也可括起汉字,每个汉字是两个字节。如果字符串中有单引号本身,可以用双引号,反之亦然。 1.2符号常量 MASM提供的符号定义伪指令有“等价EQU” 和 “等号=”,用来定义常量符号名。符号名 EQU 数值表达式 符号名 EQU <字符串> 符号名 = 数值表达式 通俗的说,在用于数值等价时,EQU用于判断两个量的数值是否相同,“=”表示判断两个量是否是同一个量 EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。 COUNT = 100 COUNT = COUNT + 64H 举例:1.var1是字符串变量-Personal Computer var1 byte Personal Computer2.var2是字符串(常量)-Personal Computer var2 equ Personal Computer 1.3数值表达式 数值表达式是指用运算符(MASM中统称为操作符, Operator)连接各种常量所构成的算式。 汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也属于常量。由于表达式是在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就确定。 主要应用算术运算符: +、- 、*、/ 、和MOD(取余数) 运用与圆括号表达运算的先后顺序 2.变量随程序运行会发生变化的数据 保存在可读可写的主存空间 变量实质上是主存单元的数据(即存储器操作数),因而可以改变;变量需要先定义才能使用;变量具有属性方便使用。 重复次数 DUP (重复参数) 举例: byte 2 dup(2, 3, dup(4)) 2,3,4,4,2,3,4,4 2.2变量定义伪指令 助记符byteworddwordqword变量类型字节字双字4字变量定义功能每个数据是字节量,也可以是字符串常量,字节量为8位每个数据是字量,为16位每个数据是双字量,为32位每个数据是4字量,为64位数据范围无符号整数0255;补码表示的有符号整数-128+12716位无符号整数065535;16位补码表示的有符号整数-32768+3276832位无符号整数02^32-1;32位补码表示的有符号整数-2^31+2^31-1 byte、word、dword分别对应C语言中的char、short、long类型 2.3多字节数据的存储顺序 2.3.1字节变量顺序存储 变量定义的存储空间是按照书写的先后顺序一个接一个分配的。但是,定位伪指令可以控制其存放的偏移地址. 2.4.1 ORG伪指令 ORG伪指令将参数表达的偏移地址作为当前偏移地址,从参数指定位置存放: ORG 参数 2.4.2 ALIGN伪指令 对于字节位存储单元的主存储器来说,多字节数据不仅存在按小端或大端方式存放的问题,还有是否对齐地址边界的问题。 地址最低位的二进制表示的后两位是“00”,则对齐。例如: 400412H ,2的二进制表示为“0010”,后两位是“10”,故没有对齐 IA-32处理器允许不对齐边界存放数据,不过这样处理器需要更多的读写操作,其性能不如访问对齐地址边界的数据,尤其是在有频繁的存储器数据操作时。故为了更好的性能,需进行地址边界对齐,ALIGN伪指令便是用于此目的(顺序执行的指令之间不能使用),格式为: ALIGN N其中,N是对齐的地址边界值,取2的乘方(2,4,8…)。 EVEN伪指令用于实现对齐偶地址,与“ALIGN 2”语句的功能一样。 2.5变量属性 2.5.1地址操作符offset: 返回变量名所在的偏移地址,只能用在变量名面前,只能出现在某条指令中 ***$***: 返回当前偏移地址,可在数据段中,也可在代码段出现 2.5.5【补充问题】-type 后面加寄存器? type edx 结果 : 4 因为edx是32位的寄存器,32位是4个字节,故返回4 位(bit)是计算机内部储存的最小单位,一个字节(byte,习惯上用B表示),1B=8bit |
CopyRight 2018-2019 实验室设备网 版权所有 |