将ebx寄存器放入DD变量时包含隐藏值

时间:2015-05-15 12:32:19

标签: assembly 32-bit cpu-registers

在使用Turbo Debugger执行我的代码时,我的bx寄存器中有一个0001值。

(我只能在Turbo Debugger中查看bx注册,但无法找到如何查看整个ebx。方问题:如何查看整个eax / ebx / ...寄存器?)

当我将ebx发送到DD变量sum1后,发送的值立即变为30310001h

它是什么原因以及如何避免它?

我唯一猜测的原因是:sum1收到了一个不可见的值,该值包含在ebx中但不包含bx(由ebx包含)。

(我是ebx / eax / ...注册的新手。)

如果我猜对了,那我怎样才能访问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

(编译器:Turbo汇编程序,处理器:Intel x86。)

1 个答案:

答案 0 :(得分:1)

您初始化代码中的任何地方BXxor bx,bxmov bx,0)。只需将其更改为EBXxor ebx,ebxmov ebx,0)。您不能单独访问32位寄存器的高位字。