所以,我的目标是使循环通过x运行并打印msgTrue直到计数器等于零。从理论上讲,这应该起作用。我可能只是弄乱了寄存器。
comparesCounter:
cmp ah, 0 ;ah stores the amount of repetitions I want the code to go through
jne notNull ;jump if not true
jmp exit
notNull:
dec ah ;ah --
mov eax, 4 ;|
mov ebx, 1 ;|
mov ecx, msgTrue ;|>this code prints out what's stored in msgTrue
mov edx, len1 ;|
int 80h ;|
jmp comparesCounter ;jumps up into counter
我应该使用其他寄存器吗?或者仅仅是出于愚蠢程度我的代码概念无济于事?
答案 0 :(得分:0)
问题在于修改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
作为循环计数器,则可以将其临时放在堆栈上:
Name | ID | Total | CityName
--------------------------------
A 1 2 ABC
--------------------------------
B 2 1 XYZ
--------------------------------
C 3 1 ABC
--------------------------------