2017-09-19 21 views
0

我試圖理解這個命令,我有2種不同的意見。POP [BP-SI-80]正在做什麼? 16位彙編

POP [BP-SI-80]DS:[BP-SI-80]SS:[BP-SI-80]保存一個字從堆棧?

+1

後來因爲BP是基地。但是,您可能會拆解數據,而不是真正的代碼來完成某些工作。 –

+2

請注意,它可能是'[BP + SI-80]'或'[BP + SI + 80]'。 「BP-SI」沒有尋址模式。 – fuz

回答

6

如果BP是內存操作數中的寄存器,則默認段爲SS。這可以用段前綴覆蓋。

但是,請注意,不存在使用BP-SI的尋址模式。您可能輸入了錯字,正確的尋址模式是[BP+SI-80][BP+SI+80]。以下是編碼爲您比較:

8f 42 b0  pop [bp+si-80] 
8f 42 50  pop [bp+si+80] 

如果你的彙編interpretes 80爲十六進制常量,它是

8f 42 80  pop [bp+si-80h] 
8f 82 80 ff pop [bp+si-80h] 
8f 82 80 00 pop [bp+si+80h] 

注意[BP+SI-80h]因爲有兩種方式來編碼它出現了兩次。

+0

ohh,當然這是一個錯字,正確的是bp + si :) –

+0

如果我有堆棧,即123h和DS = 4000h,SS = 1000h,SI = 1h,BP = 1111h,並且我有命令POP [BP + SI。所以word123h將被保存在[1000:1111] = [11111]? –

+0

@ AdrianWaut差不多,但不是,你忘了添加si,否則你仍然誤解它。 (所有值都是六進制)'bp + si = 1111 + 0001 = 1112'=> [1000:1112 = 11112] = 23,[1000:1113 = 11113] = 01'。 – Ped7g

相關問題