【进击的汇编小小白】 您所在的位置:网站首页 常见的字符常量 【进击的汇编小小白】

【进击的汇编小小白】

2023-12-11 23:29| 来源: 网络整理| 查看: 265

文章目录 常量与变量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 Computer

2.var2是字符串(常量)-Personal Computer

var2 equ Personal Computer 1.3数值表达式

​ 数值表达式是指用运算符(MASM中统称为操作符, Operator)连接各种常量所构成的算式。

​ 汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也属于常量。由于表达式是在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就确定。

主要应用算术运算符:

+、- 、*、/ 、和MOD(取余数)

运用与圆括号表达运算的先后顺序

2.变量

随程序运行会发生变化的数据

保存在可读可写的主存空间

变量实质上是主存单元的数据(即存储器操作数),因而可以改变;变量需要先定义才能使用;变量具有属性方便使用。

在这里插入图片描述

2.1变量定义

在这里插入图片描述

变量名,自定义,用于表示初值表首个数据的逻辑地址(有时也被称为符号地址)变量名可以省略,这时汇编程序将直接为初值表分配空间,没有符号地址设置变量名是为了便于存取他指示的存储单元“?”表示初值不确定,即未赋初值如果多个存储单元初值相同,可以用复制操作符DUP进行说明

重复次数 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.3.2多字节数据(字、双字)小端存储

在这里插入图片描述

wvar6 word 3139h,3832h bvar6 dword 38323139h

在这里插入图片描述

2.3.3根据地址读出数据

在这里插入图片描述

2.4变量定位

​ 变量定义的存储空间是按照书写的先后顺序一个接一个分配的。但是,定位伪指令可以控制其存放的偏移地址.

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地址操作符

在这里插入图片描述

2.5.2类型操作符

在这里插入图片描述

2.5.3总结速记 计算某个字符串的长度:sizeof或 length计算某个数组的元素个数:length获得某个变量的首元地址:offset获得当前地址:***$***改变某个变量的访问类型:PTR 2.5.4补【补充问题】-offset与$有何区别?

offset: 返回变量名所在的偏移地址,只能用在变量名面前,只能出现在某条指令中

***$***: 返回当前偏移地址,可在数据段中,也可在代码段出现

2.5.5【补充问题】-type 后面加寄存器?

​ type edx

结果 : 4

因为edx是32位的寄存器,32位是4个字节,故返回4

位(bit)是计算机内部储存的最小单位,一个字节(byte,习惯上用B表示),1B=8bit

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有