0

我希望我不会让这个问题超出范围,我是一名程序员,每当我遇到困难时,我总是会咨询这个网站,所以问题是我不了解寄存器以及它们如何工作我只知道一件事寄存器是cpu内的少量内存,但我想知道更多如何将寄存器值从程序集转换为十六进制这似乎是knida noob,但如果我有这样的程序集,我还没有学到这个东西

mov dl,oah
mov ah,oaah
mov bh,0010b

知道这里有些东西被转移到 dl,啊,bh 我只想知道如何计算那里的地址和十六进制值是否有任何表格可以用来找出这个或计算这个的好方法

4

2 回答 2

0

寄存器本身通常没有地址,它们通常不能通过内存空间访问。有一些处理器实际上是这种情况,但这是例外而不是规则。

寄存器具有的地址的小概念是机器代码中使用的值。您在这里选择使用 x86,它不一定遵循该概念,但如果您查看 arm 或 mips 或其他一些东西,它会更加明显。r0 将在指令本身的机器代码中具有 0b0000、r1 0b0001、r2 0b0010 等位模式。并且处理器的内部可能有一个 ram 可以使用这些寄存器位是否被修改,但是除了作为保存寄存器内容的地方之外,程序员无法以任何其他方式访问该 ram。

对于任何处理器,请访问处理器供应商网站或在谷歌上搜索该处理器的指令集。供应商文档通常包括一个操作码映射,或者基本上是每条指令的机器代码,每条指令。一些非供应商网站可能只有作为程序员参考的语法而不是机器代码,所以这些不会帮助你。寄存器映射到内存的一个或几个处理器也将具有文档(我想到的那个已经足够老了,尽管您可能找不到原始供应商文档)。

于 2013-06-25T13:37:59.590 回答
0

将寄存器视为 CPU 上的存储的一种方式。不同的处理器具有不同数量和类型的寄存器。寄存器通常是处理器的宽度。因此,32 位处理器将主要具有 32 位宽的寄存器。寄存器可以加载绝对值,也可以加载内存地址。用于列出汇编指令的反汇编器或调试器将显示正在发生的事情。汇编代码通常以十六进制显示值,但其他格式也是可能的。这取决于您的 CPU/调试器/反汇编器。您应该为您感兴趣的 CPU 寻找一些汇编语言教程。

于 2013-06-25T13:30:37.853 回答