2013-06-25 161 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搜索針對該處理器的指令集。供應商文檔通常包含操作碼映射或基本上每條指令的每條指令的機器碼。一些非供應商網站可能只有程序員參考的語法,而不是機器代碼,所以這些不會幫助你。一個或幾個寄存器映射到內存的處理器也將具有文檔(我所考慮的文檔已經夠久了,儘管您可能找不到原始的供應商文檔)。