2011-04-29 68 views
0

這個代碼應該計算:使用移位操作無法理解這樣的彙編代碼

Data Segment 
Db p 
Db v 
Db q 
Data ends 
Code Segment 
Assume cs:code,ds:data 
Start: mov ax,p 
     Shr ax,01 
Mov cl,02 
Shr ax,cl 
Mov bx,ax 
Mov ax,v 
Shr ax,01 
Mov cl,03 
Shr ax,cl 
Mov dx,q 
add bx 
Mov q,ax 
Code ends 
end 

我的主要問題P/4 + V/8: 對我來說,好像我們計算p/8 + v/16?!!! 1 因爲我認爲有2個不需要的移位操作

+0

是的,你似乎是正確的。每個'Shr reg,value'用'2 ^(value)'分隔'reg'的內容,最後'q'應該包含你找到的值。 – Niloct 2011-04-29 17:17:36

回答

1

這段代碼按照你的說法計算p/8 + v/16。

你轉移1位到右側就像是你被2

這樣算下來整數除法每一次,你應該從兩個位置刪除SHR斧頭,01拿到P/8 + V/16

+0

我應該刪除它以獲得p/4 + v/8?我想你的意思是? – Max 2011-04-29 17:34:23

+0

對。如果你想獲得p/4 + v/8,你應該刪除SHR AX,01。 – gusbro 2011-04-29 17:44:19