2013-06-25 112 views
0

我希望我不会让这个问题超出了范围,我是一个程序员的家伙,我总是做这个网站每当我stucked 所以现在的问题是,我不知道寄存器和如何他们咨询工作中,我只知道一两件事,寄存器内的CPU 存储量小,但我想知道更多的怎么样了如何将寄存器值从装配转换为十六进制,这似乎knida菜鸟,但我hav'nt了解到这件事,如果我有 这样寄存器工作

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

装配知道这里的一些东西正在被移动到DL啊,和bh我只是想知道如何计算有地址和十六进制值是否有任何表,我可以用它来找出这样或计算这个

+0

0010b是二进制值0010(参见后面的b char),十进制值是2.以'h'结尾的值是十六进制值。我认为oah实际上是0ah(0十六进制,十进制),oaah是0aah(0AA十六进制,170十进制)。 – Artemix

+0

artemix谢谢你的答复先生,我知道所有这一切,但我想知道的是如何找出这些值将要保存的寄存器的十六进制值,以及每个寄存器的内存地址是什么 –

+0

寄存器不会有内存地址。内存是处理器的“外部”,而寄存器是处理器的“内部”。您可以通过AX,BX,CX等名称引用寄存器,您可以从寄存器(AH,AL,EAX)的“低”或“高”部分写入或读取值,但它们不会存储在存储器中因此他们没有内存地址。 – Artemix

回答

0

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

+0

好吧,这是我想要的东西,事实上,我想代码一个简单在vb.net中可以找到内存地址,如果我把汇编代码像mov啊,0ah它应该给我内存地址 –

+0

如果你想学习指令集,然后找到汇编语言参考手册对于您感兴趣的CPU。然后可以浏览不同指令的所有寻址模式。如果您对真实程序的实际值感兴趣,请使用Windbg等调试器。 – BillH

0

注册自己一般不会有一个地址,它们通常不通过的内存空间进行访问。有几个处理器实际上是这种情况,但这是例外而非规则。

,一个寄存器具有地址的轻微概念是在机器代码中使用的值。你已经选择了使用x86,它不一定遵循这个概念,但是如果你看起来像arm或mips或其他许多类似的东西,那就更加明显了。在指令本身的机器码中,r0的位模式为0b0000,r1 0b0001,r2 0b0010等等。而且处理器的内核中可能会使用这些寄存器位进行修改或不修改,但是对于程序员而言,该RAM无法以任何其他方式访问,而不是保存寄存器内容的地方。

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