我尝试将array_output中包含的值放到堆栈中,但是每次我从堆栈中打印值时,它都只打印0。
如果我尝试打印数组简单不使用堆栈它工作。我做错了什么?
stack_alloc:
sub esp, 1
mov al, byte [array_output + ecx]
mov byte [esp], al
add ecx, 1
cmp ebx, ARRAY_OUTPUT_LEN
cmp ebx, ecx
jg stack_alloc
cmp ebx, ARRAY_OUTPUT_LEN cmp ebx, ecx jg stack_alloc
你的代码中有一个错别字。cmp ebx, ARRAY_OUTPUT_LEN
指令不应该比较,而应该加载EBX登记册。
你可以纠正用mov
代替cmp
的问题,但我建议简化你的代码,只是比较ECX中的索引ARRAY_OUTPUT_LEN。这将需要选择相反的条件分支,并避免使用额外的寄存器EBX:
xor ecx, ecx
stack_alloc:
sub esp, 1
mov al, [array_output + ecx]
mov [esp], al
inc ecx
cmp ecx, ARRAY_OUTPUT_LEN
jb stack_alloc