2015-05-15 107 views
0

在使用Turbo Debugger執行我的代碼時,我的bx寄存器中有一個0001值。將ebx寄存器放入DD變量時包含隱藏值

(我只能查看bx寄存器在Turbo調試器,以及怎麼也找不到查看整個ebx方問題:?如何看待整個EAX/EBX/...寄存器)

後,立即當我發送ebxDD變量sum1時,發送的值變爲30310001h

它是什麼原因,我該如何避免它?

我是有原因的唯一的猜測:sum1收到一個無形的價值,這包括在ebx但不bx(由ebx包含)。

(我是新來的EBX/EAX/...記錄BTW)

如果我猜得不錯,那我怎麼才能訪問的ebx看不見的部分?

這是縮短的代碼,loop2a將字符串轉換爲十進制值char-by-char並將其放入ebx

loop2a: 
    mov  eax, [di] 
    mov  ah, 0 
    sub  eax, '0' 

    imul eax, ecx 
    add  ebx, eax 
    mov  sum1, ebx 

    imul ecx, ten  

    dec  di 

    cmp  di, a 
    jne  loop2a 

    mov  sum1, ebx 

(編譯:渦輪彙編,處理器:英特爾X86)

+1

請將您的代碼的相關摘錄加入您的問題陳述中,而不是整個鏈接。請注意'e__'寄存器是32位寄存器。所以'ebx'是32位,'bx'是16位(代表'ebx'的低16位)。如果你把某些東西放到'bx'中,'ebx'的前16位不會自動設置爲零。如果你隨後將'ebx'移動到'dd'位置(這是一個32位的位置),你將會得到高16位的任何情況。如果您想將16位寄存器移動到32位,您可能需要查看「movzwl」指令。 – lurker

+0

大概你正在使用16位調試器。切換到32位版本。 – Jester

+0

@ lurker什麼是'ebx'分成? 'bx'和...?什麼代表它的高16位? – dziadek1990

回答

1

任何地方在你的代碼初始化BXxor bx,bxmov bx,0)。只需將其更改爲EBXxor ebx,ebxmov ebx,0)。您不能單獨訪問32位寄存器的高位字。