假设我们使用MASM 6.1/16位/大数据模型编写汇编代码,并且我们有一个名为MY_VAR的变量(标签),一个名为MY_SEG的段和一个名为MY_GROUP的段组。我们假设MY_VAR被放置在MY_SEG中,MY_SEG属于MY_GROUP。MASM SEG运算符
那么,什么是以下两个语句之间的区别:
1) MOV AX, MY_SEG
2) MOV AX, SEG MY_SEG:MY_VAR
此外,就是下面的两个语句之间的区别:
1) MOV AX, MY_GROUP
2) MOV AX, SEG MY_GROUP:MY_VAR
注:MASM高兴地处理所有的这些声明。按照预期(在我的情况下),每个1)和2)的结果是相同的。但是我想知道肯定...
非常感谢你,
Binarus
我一直认为MY_VAR在语法上等同于OFFSET MY_VAR。如果我是对的(可能我不是),这意味着MY_VAR转换为相对于MASM 5中的段的偏移量,但转换为相对于MASM 6中的组的偏移量。可以在这里添加更多细节(和也许纠正我错误的假设)? – Binarus
@ user3239842我想,但我没有MASM来做快速测试。 MASM中的AFAIR当你执行'mov ax时,[MY_VAR]'汇编程序查找已声明MY_VAR的段并将其用于偏移量计算。您必须使用带有MY_VAR段的'ASSUME',最终汇编程序会生成段覆盖前缀。有了群体,算法稍有不同,请看[这里](http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_8/CH08-3.html#HEADING3-192)。如果您使用'mov ax,MY_VAR',我认为偏移总是相对于MY_VAR的段落 –
感谢您的链接。这是一个很好而且容易理解的概要,我从MASM 6文档中以更难的方式了解了我所学到的知识。为了消除歧义,我现在用以下方法改变了所有独立的汇编代码:没有地方没有有效的ASSUME指令,每当采用SEG或OFFSET时,符号的名称都以合格形式给出,即MY_GROUP: MY_VAR或MY_SEG_MYVAR。我仍然有内联汇编相关的问题,因为我们显然不能使用ASSUME或那里的限定符号,请参阅[这里](http://stackoverflow.com/questions/30803553) – Binarus