问题标签 [addressing-mode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 汇编语言中的寻址模式 (IA-32 NASM)
由于这方面的网络资源很少,为了将来的搜索,我将首先列出 IA-32 汇编语言 (NASM) 的地址模式,然后回答一个简短的问题。
- 寄存器寻址
- mov eax, ebx:将 ebx 中的内容复制到 eax
- mov esi, var: 将 var 的地址(比如 0x0040120e)复制到 esi
- 立即寻址(第二个操作数是立即数)
- mov bx, 20: 16位寄存器bx获取实际值20
- 直接内存寻址(通过指定地址直接从内存中加载)
- mov ax, [1000h]:从地址 4096 的字节(十六进制的 0x1000)加载一个 2 字节的对象到一个名为“ax”的 16 位寄存器中
- mov [1000h], ax: 地址1000h的内存获取ax的值
- 直接偏移寻址(同3,只是使用算术修改地址)
- 移动,[byte_tbl+2]
- 间接寄存器(使用存储在寄存器中的地址访问内存)
- mov ax, [di]:将 di 指定的内存地址处的值复制到 ax 中
- mov dword [eax], var1: 将var1中的值复制到eax指定的内存槽中
请注意,以上内容适用于 NASM。对于 MASM/TASM,您将使用 "mov esi, OFFSET foo" 来获取地址,而 "mov esi, foo" 和 "mov esi, [foo]" 都将获取值(@Michael 的信任)。
所以,关于我的问题。它与以下教程第 29 页底部的示例有关:http ://www.tutorialspoint.com/assembly_programming/assembly_tutorial.pdf
它基本上列出了以下代码作为间接内存寻址的示例。
我的问题:
- “MOV EBX, [MY_TABLE]”实际上不应该是“MOV EBX, MY_TABLE”,因为我们想将表的地址放在 EBX 中,而不是值本身?
- 最后肯定是 MY_TABLE[2] 等于 123,而不是 MY_TABLE[1]?
arrays - 一个单词数组的总和不存储在另一个单词数组中
*分配给我的任务是编写一个汇编程序,找到三个 8 位值的总和并将其放在内存中的位置 SUMS 中。然后计算三字变量的总和,并将其放在内存中 SUMS + 2 的位置。使用以下数据:
我的问题是以下代码给了我一个错误
我知道一个是 16 位地址,另一个是 8 位地址,但是还有其他方法可以解决吗?
编辑:
完整代码:
我唯一剩下的问题是我不明白 SUMS + 2 的含义。问我要做什么的问题是什么?
binary - 无法在机器指令中编码 32 位二进制操作码
我一直在尝试为摩托罗拉 68000 格式化二进制操作码,但我一直发现不可能同时对目标内存地址、指令指定和寻址模式/大小以及要复制到内存映射的地址总线的数据值进行编码输入/输出。
对于 Sega Genesis 的视频显示处理器,我正在尝试写入控制端口,该控制端口在 Genesis 的内存映射中的 C00004 内存映射。
C0004 是二进制的 1100 0000 0000 0000 0000 0100 或三个字节。我正在写入的值是 87,VDP 在 VDP 寄存器 #7 中将其识别为 8787。我遇到的问题是弄清楚如何编码 32 位的数据,例如指令前缀指定move.b
、值 87,以及MMIO 重新路由到正确 VDP 端口#$87
的目标内存地址C00004
人民民主党。
总而言之,它看起来像这样:
松散地转换为不是四个,而是四个字节和一个半字节(准确地说是 36 位!)
由于 Motorola 68000 在处理到microcode时只会解析 32 位,如果没有足够的空间(并且在同一指令内),如何编码所需的信息?
我知道这超出了大多数程序员的预期水平,但我希望周围的人可以为我分解它并解释这种编码方案是如何工作的。
xml - 使用 XPath 和 XQuery 在 eXist-db 中显示时出错
我试图仅按名称显示节点的以下元素。
在 Xpath 中,这是我的声明://akweny[parent::akwen/nazwa="Atlantycki"]
这是我的 XML 文件
这是我的 DTD
这是我的 Xquery 语句
要使用我的 xml 快速测试 Xpath,您可以使用此工具:http ://www.online-toolz.com/tools/xpath-editor.php
最大的问题是 Exist-DB 数据显示不正确。
我的结果是没有想法......但它应该是节点父母......
我不知道我做错了什么。请帮我。
assembly - 内存引用汇编语言
我是汇编语言的初学者,到目前为止我了解很多东西,但是很多天我都停留在一个部分,这让我感到困惑,最糟糕的是,通过我在互联网上访问的许多页面,信息再次被扭曲,这部分是寻址模式特别是内存引用,例如在汇编语言中的寻址模式(IA-32 NASM)中
两条指令似乎相同,但评论不同
- mov esi, var :将 var 的地址(比如 0x0040120e)复制到 esi
- mov dword [eax], var1 : 将 var1 中的值复制到
eax 指定的内存槽中
两条指令都处理 var 或 var1 ,它们是标签,但在评论中提到它是复制内容,而另一个是复制地址。
所以另一个问题我问这个指令的cooment是什么:
- mov bx, [var]
以及这些指令之间的区别是什么
- mov [var], bx - 如果 var 是一个数组,如果不是它与下一条指令的区别,这是否仅适用
- mov var, bx
- lea eax, [var] — var 中的值放在 EAX 中。这里是平均值
- LEA EBX, [MY_TABLE]这里是它的平均有效地址
所以我需要知道有什么区别,是否有一个我可以从中读取的置信来源并确保它是正确的,顺便说一下我正在使用本教程,以及 NASM 作为 Windows 下的汇编程序。
linux - IA-32 中的寻址模式
我在 IA-32 中搜索过寻址模式,但我没有看到任何网站或文章简单地解释了寻址模式。我需要一篇文章或其他东西,只需通过一些内存图片来解释这个问题,并通过图片指定地址模式。
我知道在 IA-32 中,寻址的一般形式遵循以下形式:
Segment + Base + (index * scale) + 位移
我想知道位移、比例、索引以及最后的基数的确切含义。由于我也不懂英语,所以我被迫搜索它们,但我没有找到这种情况下单词的技术意思(我的意思是汇编编程语言)。
最后,我想简单地解释一下 IA-32 中的寻址模式,最好用关于内存及其偏移量的图片来表示......
我通过Linux 的汇编编程指南学习汇编编程语言。
那谢谢啦。
emulation - 有没有办法通过 6502 的操作码以编程方式确定寻址模式?
即在操作码中是否以某种方式编码了不同的寻址模式?是否可以通过编程方式提取它们,或者此信息是否仅存在于 6502 的文档中?我正在写一个模拟器,我不关心性能。如果可能的话,最好有一个接受操作码并返回寻址模式的函数。
到目前为止,我还没有发现任何迹象表明代码中有模式,除了所有零页指令似乎都设置了它们的第三位。
assembly - 执行 16 位加法的程序溢出错误
错误是:
(4)溢出!-无法评估:arr dw 1234h,4321h,1dup(?)
assembly - 索引寻址模式
我一直在尝试不同的寻址模式并对此主题进行研究;在我尝试使用索引寻址模式时,我从 SO 上的不同示例中借用了一些代码。在下面的示例中:
作者正在使用嵌套循环来解析二维数组,并找到最小的数字。我真正感兴趣的是(案例1):
因为这部分在编译代码时似乎会导致问题,并且会给出错误:“comma,colon or end of line expected”但是如果我将代码更改为(案例2):
一切似乎都运行良好。
哪一种是正确的索引寻址模式?我的直觉说,由于“矩阵”是数组,它应该位于左括号之外,但在实践中似乎并非如此。如果有人能解释案例 1 和案例 2 之间的区别,我将不胜感激。
unix - 间接寄存器寻址
我试图弄清楚寄存器间接寻址是如何工作的。我有一个存储 5 值的变量,如下所示:
在代码的最后两行,我实际上想要做的是让 eax 充当指向存储在 number 的数据的指针,然后将这些数据移动到 number2 变量中。我虽然间接寄存器寻址是通过 [register] 完成的,但我的代码似乎不起作用。任何有关语法的帮助将不胜感激。