【进击的汇编小小白】--常量与变量

常量与变量

没有人可以定义你,除了你自己!

1.常量

常量(Constant)是程序中使用的一个确定数值,在汇编阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量,因为是编码在指令中的量,和指令一起存储了,所以不用单独开辟主存空间,所以也就没法动态改变它了,这也正是高级语言常量无法修改的原因。

进制数字组成举例
10进制由0-9组成,以D或d(默认可以省略)100,100d,100D
16进制由0-9,A-F组成,以H或h结尾;以A-F开头时,前面要加0,以免与寄存器混淆64h,64H
2进制由0,1组成,以B或b结尾01110010B,01110010b

1.1字符和字符串

  1. 单引号或双引号括起来的字符,其数值是每个字符对应的ASCII码值。例如:‘d’ = 64H;“Hello,Assembly!”
  2. 在支持汉字的系统中,也可括起汉字,每个汉字是两个字节
  3. 如果字符串中有单引号本身,可以用双引号,反之亦然。

1.2符号常量

  1. MASM提供的符号定义伪指令有“等价EQU” 和 “等号=”,用来定义常量符号名。

符号名 EQU 数值表达式

符号名 EQU <字符串>

符号名 =  数值表达式

  1. 通俗的说,在用于数值等价时,EQU用于判断两个量的数值是否相同,“=”表示判断两个量是否是同一个量

  2. EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。

COUNT = 100

COUNT = COUNT + 64H

  1. 举例:

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总结速记
  1. 计算某个字符串的长度sizeof或 length
  2. 计算某个数组的元素个数length
  3. 获得某个变量首元地址offset
  4. 获得当前地址:***$***
  5. 改变某个变量的访问类型PTR
2.5.4补【补充问题】-offset与$有何区别?

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

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

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

​ type edx

结果 : 4

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

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

在这里插入图片描述

React-cookies是一个用于在React应用中操作cookie的库。你可以使用npm或yarn安装它,并通过import语句引入它。使用cookie.save()方法可以存储cookie,cookie.load()方法可以获取cookie的值,cookie.remove()方法可以删除cookie。\[1\] React-cookies的使用非常方便,特别是在处理国际化等场景下。你可以将语言类型存储在cookie中,并在需要的时候进行读取和删除。通过设置{ path: '/' },可以使得cookie在所有页面都可以访问到。\[2\]\[3\] 在一个具体的例子中,当用户登录成功时,可以将用户信息保存在cookie中。通过调用cookie.save()方法,将用户信息存储在名为"userInfo"的cookie中,并设置了过期时间为15分钟。\[3\] 总之,React-cookies是一个方便的库,可以帮助你在React应用中轻松地操作cookie。 #### 引用[.reference_title] - *1* [react 使用cookie react-cookies](https://blog.csdn.net/weixin_45774972/article/details/119253199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [react-cookie一个方便于我们操作cookie的react库](https://blog.csdn.net/sadasddpk/article/details/122869257)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [react如何在项目中使用cookie ?](https://blog.csdn.net/m0_59296903/article/details/124195556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰非一日之寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值