2011-09-22 47 views
1

我很難理解彙編語言的概念。我給出了這個示例代碼:與彙編語言拼搏

ploop: mov ax, 0201h 
     add al, ah 
     cmp al, 5 
     jb ploop 
eloop: 

循環結尾處的十六進制值是0205,但我不確定我是否理解了原因。

對於第一行,我們將0201轉換爲ax,所以al = 01和ah = 02。然後你給a​​l加上ah,使得al = 03。我們將al與5進行比較,因爲它適合於3,< 5 jb再次通過ploop。我們經歷了所有的步驟,並在cmp al = 05 == 5,所以它不再適合jb。

這是看它的正確方法嗎?

回答

3

幾乎正確。除非你可能希望它看起來像,而不是執行以下操作:

 mov ax, 0201h 
ploop: add al, ah 
     cmp al, 5 
     jb ploop 
eloop: 

因爲它,否則將進入一個無限循環的alah在每次循環迭代被覆蓋。

+0

哎呀!輸入錯誤。謝謝! – raphnguyen

2

我幾乎打賭你已經錯誤地抄錄了代碼。就目前而言,你有一個無限循環。它需要更多這樣的:

 mov ax, 0201h 
ploop: add al, ah 
     cmp al, 5 
     jb ploop 
eloop: 

當你的貼吧,ax被在每次循環的開始重新裝載0201h。然後,您將ah中的02添加到al中的01中。這會給出3.你將它與5進行比較,如果它小於(顯然總會是),則再次執行循環。

隨着標籤感動,我們有02 ah和01 al開始。但是,在循環的每次迭代中,我們將02添加到al的當前內容中,因此它將遵循序列1,3,5。在每次迭代時,我們將其內容與5進行比較,並且繼續循環,當且僅當它是小於(視爲無符號),因此循環執行三次迭代,然後停止,並且al = 5.