Проблема в том, что изменение eax
также изменяет ah
.Вот простая диаграмма, показывающая соотношение между ah
и eax
:
eax
--------------------------
| | ax |
| | ----------- |
| | | ah | al | |
| | ----------- |
---------------------------
3 2 1 0
Как видите, ah
является самой значимой половиной ax
, что, в свою очередь, является наименее значимымполовина eax
.Поэтому, когда вы устанавливаете eax = 4
, вы неявно устанавливаете ah = 0
.
Если вы хотите продолжать использовать ah
для своего счетчика циклов, вы можете временно поместить его в стек:
push eax ; Save eax's current value on the stack
mov eax, 4
...
int 80h
pop eax ; Restore eax from the stack