汇编OFFSET在一条指令中使用了两次,什么是offset的offset?

吉拉德·库斯蒂

我正在组装一个项目,其中出现了某种奇怪的offset指令属性我写下了以下说明:

mov ax, offset offset variable

当我执行程序时,我预计会出现错误,但程序运行时没有显示任何错误,并且mov ax, offset offset variable在调试工具中出现该行mov ax, 0784,这与该指令mov ax, offset variable出现的方式相同(0784是数据段变量的偏移) . 一时糊涂,我执行了这条指令:(mov ax, offset offset offset offset offset offset variable是的,有点搞笑)效果一样,结果一样(ax值变成了变量的偏移量)

我的问题是为什么寄存器 AX 中存储的值是变量的偏移量(我可以确定总是偏移偏移 = 偏移吗?),为什么这些行不会产生任何错误?而且,如果offset 的 offset有一个含义,它的含义是什么?(这些例子中汇编器遵循的含义)

谢谢。如果相关,我正在使用程序集 x86、TASM、DOSBox 模拟器和 Turbo Debugger :)

彼得·科德斯

的地址variable本身并不存储在内存中的任何地方,添加更多offset关键字不会创建指针对象并为您提供指向指针的指针的地址variable.

这显然与使用offset once相同这大概是 TASM 中解析器的一个怪癖:我猜解析逻辑会在offset内部看到并设置一个标志,然后再次开始解析,直到它得到一个变量名。如果它offset再次看到,它只是再次设置相同的标志并继续前进。

以这种方式编写代码没有任何理由或好处,所以不要故意这样做。无论offset您在调用时是否指定,都可以方便地制作可以工作的宏除此之外,请保持您的来源简单。

(有趣的事实:GNU 汇编器在.intel_syntax noprefix模式下也不会拒绝这一点。我仍然怀疑这是一个有意的功能,只是一个未记录的怪癖。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Powershell的一条语句中使用-replace两次

在不两次编译子节点的情况下用另一条指令替换指令

printf两次打印同一条语句

Extern在C ++中使用了两次

1 列在视觉中使用了两次

两次调用时jQuery offset(coords)的不连贯行为

当在同一条记录上使用两次Django的select_for_update死锁吗?

用汇编语言计算一条指令的成本

尽管我使用XMLHttpRequest在JavaScript中调用了一次,但为什么api响应两次?

一条语句中有两次Bash替换?

两次函数调用,但仅显示一条轨迹

ISP在一条路由中两次拥有相同的IP是否正常?

在mongodb select中使用offset和limit

在VBA中使用activecell和offset

CSS ID使用了两次

为什么Kafka使用者忽略了auto.offset.reset参数中的“最早”指令,因而没有从绝对第一个事件中读取主题?

如何使LLVM优先使用一条机器指令而不是另一条机器指令?

无法重新打开表格。临时表在选择查询中使用了两次

为什么调用和跳转指令相对于下一条指令而不是当前指令使用位移?

为什么Java的编译成汇编两次?

为什么我不能在 SQL Server 存储过程中使用 LIMIT 和 OFFSET

jQuery offset()。top每隔一次关闭

为什么DetermineState:forRegion:方法被调用了两次

当sql视图中有两条记录时,列表视图显示同一条记录两次

在同一个查询中使用 JOIN 和 OFFSET

如何在Xcode 6.1.1上的GNU汇编器中重复一条指令?

CPU /汇编器如何知道下一条指令的大小?

汇编jmp偏移量<label + offset>是什么意思?

为什么我第一次打开Activity时onCreate在我的Fragment中调用了两次