首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MASM SEG算子

MASM SEG算子
EN

Stack Overflow用户
提问于 2015-06-12 10:24:55
回答 1查看 904关注 0票数 4

假设我们使用MASM6.1/ 16位/巨型数据模型编写汇编代码,并且有一个名为MY_VAR的变量(标签)、一个名为MY_SEG的段和一个名为MY_GROUP的段组。让我们假设MY_VAR放在MY_SEG中,MY_SEG属于MY_GROUP。

那么,以下两种说法之间有什么区别:

代码语言:javascript
复制
1) MOV AX, MY_SEG
2) MOV AX, SEG MY_SEG:MY_VAR

此外,以下两种说法有何区别:

代码语言:javascript
复制
1) MOV AX, MY_GROUP
2) MOV AX, SEG MY_GROUP:MY_VAR

注意: MASM愉快地处理所有这些语句。正如我所预期的(在我的例子中),每个1和2的结果是相同的。但我想确定的是..。

非常感谢,

比纳鲁斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-13 08:13:07

在MASM中,标签MY_VAR转换为相对于在其中声明的段的MY_VAR地址的偏移部分(如果您像mov ax, MY_VAR一样使用它)或相对于您为访问它而使用的段寄存器假设的到段段(如果您像mov ax, WORD PTR [MY_VAR]一样使用它)。

正如您所知道的,给定的变量(通常是一个线性地址)具有多个逻辑地址,例如,8000h中的变量可以以0800h:0000h0700h:1000h等形式访问。

表单MY_SEG:MY_VAR告诉汇编程序计算相对于段MY_SEG的偏移量。因此,如果MY_SEG从7000h线性开始,MY_SEG26000h线性开始,对于在8000h线性MY_SEG:MY_VAR为1000 h的变量MY_VAR,MY_SEG2:MY_VAR是2000 h。

SEG指令计算逻辑地址的段部分而不是偏移量,它是用于计算偏移量的段MASM (同样是由上面给出的规则所使用的)。

在您的第一条指令中,您告诉MASM将段MY_SEG的地址(让我们离开重新定位)放在AX中(因此,如果段从5000 h开始,则AX中的值为500 h)。

在第二个指令中,您明确地告诉MASM在计算MY_VAR的偏移量时使用段MY_VAR,然后通过SEG指令,让它返回段部分,即MY_SEG

所以他们是一样的,但第二个是多余的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30800744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档