0
在使用Turbo Debugger執行我的代碼時,我的bx
寄存器中有一個0001
值。將ebx寄存器放入DD變量時包含隱藏值
(我只能查看bx
寄存器在Turbo調試器,以及怎麼也找不到查看整個ebx
方問題:?如何看待整個EAX/EBX/...寄存器)
後,立即當我發送ebx
到DD
變量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)
請將您的代碼的相關摘錄加入您的問題陳述中,而不是整個鏈接。請注意'e__'寄存器是32位寄存器。所以'ebx'是32位,'bx'是16位(代表'ebx'的低16位)。如果你把某些東西放到'bx'中,'ebx'的前16位不會自動設置爲零。如果你隨後將'ebx'移動到'dd'位置(這是一個32位的位置),你將會得到高16位的任何情況。如果您想將16位寄存器移動到32位,您可能需要查看「movzwl」指令。 – lurker
大概你正在使用16位調試器。切換到32位版本。 – Jester
@ lurker什麼是'ebx'分成? 'bx'和...?什麼代表它的高16位? – dziadek1990