- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们正在使用 MASM 6.1/16 位/大数据模型编写汇编代码,并且我们有一个名为 MY_VAR 的变量(标签)、一个名为 MY_SEG 的段和一个名为 MY_GROUP 的段组。假设 MY_VAR 放置在 MY_SEG 中,并且 MY_SEG 属于 MY_GROUP。
那么,下面两条语句有什么区别:
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) 的结果是相同的。但我想确切地知道......
非常感谢,
比纳鲁斯
最佳答案
在 MASM 中,标签 MY_VAR
转换为 MY_VAR 地址相对于其声明的段的偏移部分(如果您像 mov ax, MY_VAR
那样使用它) )或相对于您为用于访问它的段寄存器假设的 to 段(如果您像 mov ax, WORD PTR [MY_VAR]
使用它)。
正如您所知,给定变量(通常是线性地址)具有多个逻辑地址,例如 8000h
线性地址的变量可以通过 0800h:0000h
或0700h:1000h
依此类推。MY_SEG:MY_VAR
形式告诉汇编器计算相对于段 MY_SEG
的偏移量。因此,如果 MY_SEG 从 7000h
线性开始,MY_SEG2
从 6000h
线性开始,那么对于 var MY_VAR 在 8000h
线性 MY_SEG:MY_VAR
为 1000h,MY_SEG2:MY_VAR
为 2000h。
SEG
指令计算逻辑地址的段部分而不是偏移量,它是用来计算偏移量的段MASM(再次按照上面给出的规则)。
在第一个指令中,您告诉 MASM 将段 MY_SEG
的地址(让我们把重定位放在后面)放入 AX 中(因此,如果该段从 5000h 开始,则 AX 中的值为 500h)。
在第二条指令中,您明确告诉 MASM 在计算 MY_VAR 的偏移量时使用段 MY_SEG,然后通过 SEG
指令告诉它返回段部分,即 MY_SEG
。
所以它们是相同的,但第二个是多余的。
关于assembly - MASM SEG 运营商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800744/
这个问题已经存在: 关闭 13 年前。 Possible Duplicate: What is the !! (not not) operator in JavaScript? 我见过运算符 ! 像
我最近正在读《行动中的格鲁夫》。在第7章中,它介绍了*。运算符(operator) 。当我运行有关此运算符的代码时,我会遇到一些错误。 class Invoice {
我在沙箱 Groovy 上工作,我想阻止 .@ 运算符。我正在使用 SecureASTCustomizer 并编写了一个自定义的 SecureASTCustomizer.ExpressionCheck
我有一个函数接受一个包含大量数据的数组,例如,其中一个数据是“name”:$data = ['name' => 'John'] ; 现在,如果我想使用默认值从中获取名称,我有两个经常使用的选项。 $n
我只是想知道这是否是 C89 程序的“好”代码。 obj_ptr = (obj*) (ptr1 || ptr2); 本质上,如果 ptr1 != NULL 和 ptr2,它的作用(至少在我的计算机上的
我定义了一个类 User,并覆盖了它的 == 运算符,如下所示: class User attr_reader :age def initialize age @age = age
这个问题在这里已经有了答案: Why does "++x || ++y && ++z" calculate "++x" first, even though operator "&&" has hi
pipe(|) 和output(>) 重定向运算符有什么区别?我可以在哪里使用它们? 例如: 我通常只在 grep 中使用管道 (|) find . | grep abc 我遇到的输入输出重定向的唯一
我正在为此代码使用 g++ 10.2。有谁知道为什么我在最后一次 std::views::reverse 中收到编译器错误?在 results3 ? #include #include int m
假设我们正在使用 MASM 6.1/16 位/大数据模型编写汇编代码,并且我们有一个名为 MY_VAR 的变量(标签)、一个名为 MY_SEG 的段和一个名为 MY_GROUP 的段组。假设 MY_V
我试图在基类中使用宇宙飞船运算符,所以我将通过编译器定义所有运算符。 (来源:https://devblogs.microsoft.com/cppblog/simplify-your-code-wit
我在某处看到这段代码片段: var idx = SOME_VALUE; var color = { yellor: 1, red: 2, black: 0 }; var x = color
我观察到在某个时候有一个 ?海湾合作委员会的运营商。我如何在 GCC 4.5 下使用它们?它们是否已被移除,如果是,何时移除? Offset block_count = (cpfs->geo.bloc
我不是每天都阅读 C#,而是正在阅读最近的提交,其中包含一些让我感到困惑的内容: if (( length > maxLength) && ! IsTable(furniture.FurnitureT
拥有 public void Main() { int i = 0; Console.WriteLine($"I was {i++}, now I is {i}"); bool b = t
我观察到在某个时候有一个 ?海湾合作委员会的运营商。我如何在 GCC 4.5 下使用它们?它们是否已被移除,如果是,何时移除? Offset block_count = (cpfs->geo.bloc
今天,我听说了 Karatsuba 算法,一种快速乘法算法。我很好奇这个“快”是什么意思? 通常,我们在计算一段代码的时间复杂度时,会考虑使用 * 运算符作为 O(1) 的乘法运算,如果它始终为真,那
我观察到在某个时候有一个 ?海湾合作委员会的运营商。我如何在 GCC 4.5 下使用它们?它们是否已被移除,如果是,何时移除? Offset block_count = (cpfs->geo.bloc
我正在学习 Angular 和 RxJS 运算符。我正在使用 Hearthstone API 来训练它。我究竟做错了什么 ?我想过滤流以仅返回“萨满”卡。我知道,Api 让我有机会按类(class)获
正如标题所说,我正在尝试通过 += 运算符将文本附加到隐式解包的可选字符串,这给了我 'String!' is not identical to 'UInt8' 让你明白我的意思: var myStr
我是一名优秀的程序员,十分优秀!