iT邦幫忙

DAY 17
3

freedos bochs 16位元 組合語言…等系列 第 17

組合語言熱身:debug之10,SHR 和AND指令

  • 分享至 

  • xImage
  •  

今天繼續練習指令。
SHR是SHift Right往右移的意思,到底移幾位呢,這時有了之前的練習經驗,例如REP(重覆)幾次,我們會用CX,所以這個計數暫存器對於要反覆做幾次動作,是專門來配合的。

而AND,當然高階語言也用得很兇。而低階語言比較有真值表的效果,
1 AND 1=1
1 AND 0=0
0 AND 1=0
0 AND 0=0

這些是常用的指令,而要換成2進位,比較能體會出其效果。
可參考小木偶前輩的說明:
http://home.educities.edu.tw/wanker742126/asm/ch04.html
練習1,筆者用F(16進位)=1111(2進位)效果比較簡單清楚

-a
08FA:0100 mov al,f0
08FA:0102 shr al,4
08FA:0105
-t
AX=00F0 
-t
AX=000F

移4次,就變到AL的低位。
可以更鮮明的感受,AX=AH+AL,而AL又可以用2個16進位數表示。F0, 移4位,變0F.
具體的用實際的數字代入。
再來一個練習:

-a
08FA:0100 mov al,f0
08FA:0102 shr al,1
08FA:0104 shr al,1
08FA:0106 shr al,1
08FA:0108 shr al,1
08FA:010A
-t
AX=00F0
-t
AX=0078
-t
AX=003C
-t
AX=001E
-t
AX=000F

1111-0000->0111-1000->0011-1100->0001-1110->0000-1111,
這樣可以很具體的感受次往右移,空的位置補0的效果。
---------------------------------
AND 的練習:

-a
08FA:0100 mov al,0f
08FA:0102 and al,0f
08FA:0104
-t
AX=000F
-t
AX=000F
-a 104
08FA:0104 and al,0
-t
AX=0000

AND是2進位0/1的運算,
但是程式裏是放16進位的數字,換算成0/1後,再來做運算,得次到結果,放回原暫存器。
小結:
看似簡單的練習,除了放鬆心情外,其實還是有意外的收獲。
更清楚AX,AL的長度。


上一篇
組合語言熱身:debug之F,SCASB 和 SCASW , 找尋字串中含某特定字元(byte,word)
系列文
freedos bochs 16位元 組合語言…等17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-10-10 00:51:06

timloo提到:
看似簡單的練習,除了放鬆心情外,其實還是有意外的收獲。

有時光聽鍵盤敲擊的聲音,頓時就覺得人生的存在有了意義.......灑花

我要留言

立即登入留言