2017-04-08 64 views
0

我正在學習彙編器,我需要一些幫助來理解調試器中的代碼,特別是標記的部分。我知道指令如何工作,但在調試器中我有「2EA10301」和「BB0400」。理解8086彙編器調試器

這是什麼意思?
第一條指令將變量a從數據段移動到ax寄存器,但在調試器中我有cs:[0103]

這些括號和這些數字是什麼意思?

enter image description here

感謝您的幫助。

+0

首先,我認爲這是「** 2 ** EA10301」,它是十六進制的。 – Carcigenicate

回答

5

2EA10301BB0400數字是opcodes爲突出顯示的兩條說明。

2ECode Segment (CS) prefix並指示CPU訪問內存,其中CS段代替默認的DS
A1MOV AX, moffs16的操作碼和0301little endian的即時0103h,地址是從中讀取的。因此2EA10301mov ax, cs:[103h]
方括號是表示memory access through one the addressing mode的首選方式,但某些彙編程序支持不帶括號的混淆語法。
由於這種語法在不同的彙編器上比其他語言不明確,不太標準化,因此不鼓勵。

在組裝彙編保持(各「部分」 /段有其自身的計數器,即,計數器在每個「部分」的開始被複位)遞增發射的各個字節的位置計數器。
這給每個變量一個偏移量,用於訪問它並製作指令,變量名稱用於人類,CPU只能從地址,數字中讀取。

該偏移量稍後將在加載文件後在內存中尋址。
彙編器,鏈接器和加載器合作,there are various tricks at play,以確保適當地形成在內存和偏移轉化爲正確的地址最終指令。
在你的例子中,他們的努力最終達到了103h的值,即內存中的a的地址。
再次,在你的例子中,如果文件是COM(順便說一下,不要把變量放在執行流中),偏移量仍然是103h,因爲COM文件的特殊結構。
但總的來說,它可能是另一個數字。

BBMOV r16, imm16與寄存器BX。基本格式爲B8,低3位表示要使用的寄存器,BX用值3(二進制011b)表示,實際上0B8h + 3 = 0BBh。
在操作碼之後,再次,WORD立即0400,編碼4小尾數。


你現在在認識到彙編源並不總是完整信息,作爲裝配實現了某種形式的語法糖的位置。
指令mov ax, a,等同於它的語法mov bx, 4並在技術上是移動立即值,常數,在彙編時已知的,通過a地址給出到ax,相應地解釋爲動議內容a(存在於存儲器中並且只能用存儲器訪問進行讀取的值)轉換爲ax,因爲a被稱爲變量。

這種現象在x86限制,爲CISC,並在RISC世界裏,缺少通常所需的指令與pseudo-instructions補償更爲普遍。

2

那麼,首先,彙編器是x86彙編。彙編程序是將指令轉換爲機器代碼的東西。

當您反彙編程序時,它可能會使用十六進制值(如90是NOP指令或B8將某些東西移動到AX)。

方括號將拷貝寄存器指向的內存地址。 一邊的十六進制被稱爲地址。