注册工作

时间:2013-06-25 13:10:37

标签: assembly cpu-registers

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

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

知道这里有些东西正在转移到dl,啊,而且我只是想知道如何计算那里的地址和十六进制值是否有任何表我可以用来找出这个或一个好方法来计算这个< / p>

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

寄存器本身通常没有地址,通常无法通过存储空间访问。有几个处理器实际上就是这种情况,但这是例外而不是规则。

寄存器具有的地址的轻微概念是机器代码中使用的值。你选择在这里使用x86并不一定遵循这个概念,但如果你看一下像arm或mips或其他许多东西,它就会更加明显。 r0将在指令本身的机器代码中具有0b0000,r1 0b0001,r2 0b0010等位模式。并且处理器的内部可能有一个ram可能会使用这些寄存器位进行修改,但是ram不能以任何其他方式访问程序员而不是寄存器内容的位置。

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