2012-03-04 119 views
0

編輯: 對不起,我犯了一個新手錯誤,並且一直在改變BX的價值! :) 無論如何,謝謝。BX副作用?

我很喜歡NASM和MBR,由於某些原因,BX寄存器被設置爲「某些」值,即使我沒有寫入(只讀)。

這是爲什麼?我確定我錯過了一些明顯的東西,但我似乎找到了任何可以解釋這種行爲的教程。

代碼中的問題:

partfun: 
    mov bx, 01beh ; store a starting address to BX 
        ; I will increment it later 
    mov cx, 0 

    mov al, bl ; BX changes here already, I think! 
    mov al, bh 
    ; do something with AL here 

.loop: 
    mov al, [bx]  
    ; do something with AL here 

    add bx, 16 ;BX is 0110h now, not 01ceh, as I would expect! 
       ;I wish to increment the stored value (address) by 16 

    inc cx 
    cmp cx, 4 
    jl .loop 

    ret 

回答

0

您可以訪問bl是16位bx的低8位,而bh是高8位。

所以通過改變bl你也改變了bx

+0

僅限「mov al,bl」*將BL值複製到AL,從而使BX寄存器完全不變,否? – user1248092 2012-03-04 13:16:40

+0

@ user1248092:對不起,你說的沒錯,我的回答是錯誤的。我總是對AT&T和Intel語法感到困惑...... – cha0site 2012-03-04 13:24:15