Я пытаюсь увеличить регистр %si
на 1 в x86, однако у меня странное поведение. Примечание: я запускаю это в цикле.
Это увеличивает %si
на два во время каждой итерации цикла:
loop: inc %si
lodsb
jmp loop
И это увеличивает %si
на единицу для каждой итерации:
mov %si, %cx
loop: lodsb
inc %cx
mov %cx, %si
jmp loop
Правильно ли мое предположение? И это правильный способ сделать это?
Это пример использования прерываний BIOS, которые работают:
bios_write:
push %bp
mov %sp, %bp
pusha
mov 4(%bp), %cx
0: mov %cx, %si
lodsb
cmp $0, %al
je 1f
push %ax
call bios_putchar
pop %ax
inc %cx
jmp 0b
1: popa
mov %bp, %sp
pop %bp
ret
И это пример, который не:
bios_write:
push %bp
mov %sp, %bp
pusha
mov 4(%bp), %si
0: lodsb
cmp $0, %al
je 1f
push %ax
call bios_putchar
pop %ax
inc %si
jmp 0b
1: popa
mov %bp, %sp
pop %bp
ret