nasm中的表达式

简介:

nasm表达式支持2个特殊的记号 $$$;前者标识其所在源码行的开始处地址,所以你可以这样写死循环:

jmp $

而后者标识当前段开始处的地址,你可以通过:

$-$$

找出当前代码在段内的偏移。
nasm提供以下运算符:
| ^ & << >> + -
* / //(带符号除) % %%(带符号模)
因为%符号也被宏预处理器使用,所以必须保证带符号和无符号的模操作符都必须跟有空格。

- +(一元+和一元-) ~ SEG WRT(非相同段基址?)
一元-将操作数取反,而~对操作数取补
SEG取得操作数的段地址

STRICT约束优化
当汇编时将优化器打开到2或更高级别时,nasm会使用尺寸约束,会给(byte word dword qword tword)尽可能小的尺寸,可以使用关键字STRICT来制约这种优化。强制一个特定的操作数为原来尺寸:

push strict dword 33

但当优化器关闭时,无论是否有strict,都会产生相同代码。
nasm是一个两遍汇编器,总是只做2遍汇编:第一遍确定所有代码与数据的尺寸大小,第二遍产生代码时即可以知道代码引用的所有符号地址。所以向后引用之类的代码nasm不能处理:一段代码尺寸依赖另一个符号值,而该符号在这段代码后面被声明,比如:

times (label-$) db 0
label:db "hello world"

nasm使用临界表达式禁止上述情况;临界表达式的值必须在第一遍汇编时都是可计算的。

相关文章
|
编解码
数字式电秒表、电子毫秒表,智能毫秒计,通用电脑式毫秒计,智能毫秒表
‌数字式电秒表的主要用途和作用包括在各种需要精确计时的场景中应用,如消防施工质量控制、技术检测、维护管理以及消防产品现场检查等‌。具体应用场景包括火灾自动报警系统的响应时间、水流指示器的延迟时间、电梯的迫降时间、灯具的应急工作时间等‌1。
|
10月前
|
SQL 存储 JavaScript
如何开发人事管理系统中的招聘管理板块?(附架构图+流程图+代码参考)
本文介绍了企业人事管理系统中招聘管理模块的设计与开发,涵盖职位发布、简历筛选、面试跟进、Offer管理等全流程数字化内容。文章详细解析了模块架构、业务流程、核心开发技巧,并提供了示例代码和实现效果展示,同时解答了落地实施中的常见问题,助力企业高效构建招聘管理体系。
|
缓存 网络协议 安全
为什么更新了 DNS 记录不生效
【10月更文挑战第20天】更新 DNS 记录不生效是一个常见但可能较为复杂的问题。需要我们仔细分析可能的原因,并采取相应的措施来解决。在网络世界中,理解和应对这些问题是确保我们能够顺畅访问网络资源的重要一环。
1134 44
|
机器学习/深度学习 资源调度 计算机视觉
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
700 15
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
8086 汇编笔记(一):寄存器
8086 汇编笔记(一):寄存器
|
传感器 监控 算法
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
1017 6
|
Go
带你玩转Go语言必会的包和模块
带你玩转Go语言必会的包和模块
393 1
|
存储 编译器 Linux
Windows 32 汇编笔记(二):使用 MASM
Windows 32 汇编笔记(二):使用 MASM
|
机器学习/深度学习 前端开发 数据可视化
Streamlit 入门教程:构建一个Dashboard
Streamlit 是一个用于创建数据科学和机器学习应用程序的开源 Python 库。它的主要目标是使开发人员能够以简单的方式快速构建交互式的数据应用,而无需过多的前端开发经验。Streamlit 提供了一种简单的方法来转换数据脚本或分析代码为具有可视化界面的应用程序,这些应用程序可以通过网络浏览器访问。
903 2