增加nasm程序集中的变量



我正在制作一个32位保护模式的操作系统,需要增加(或减少)一个变量。我的变量是这样定义的:

Var: db 1

我试着像这样增加它:

mov ebx, [Var]
inc ebx
mov [Var], ebx

但是,该变量增加了一个值WAY比1大。为什么会发生这种情况,我该如何解决它

您的问题是您将Var定义为字节大小的变量,但是您对它进行操作,就好像它是dword大小的变量一样。这会导致您在变量周围读/写不相关的字节,从而导致您观察到的奇怪数字。

要解决这个问题,总是用正确的数据大小操作数据。例如,do

movzx ebx, byte [Var]
inc ebx
mov [Var], bl

注意不对称:我们可以使用mov bl, byte ptr [Var],但是写入部分寄存器很慢(即blebx的一部分)。指令movzx确保写入整个寄存器,同时只从内存中取出一个字节。

或者更简单的

inc byte [Var]

最新更新