Я очень новичок в сборке (начал изучать вчера) и у меня проблема с циклами:
Код ниже должен напечатать значения 0-49, но вместо этого он печатает 0-49, а затем ~ 20 строк мусора (я предполагаю, что это часть стека, которую используют другие программы / другие части программы).Я ожидаю, что проблема заключается во втором цикле, .loop
, поскольку он печатает неправильное количество строк, а печать обрабатывается .loop
.
Я использую программу FASM (Flat Assembler) для компиляции этого.
Код:
format PE console
include "win32ax.inc"
start:
mov ecx, 50 ;number of loops
.mainloop: ;for testing purposes, just pushes 49-0 onto the stack
push ecx ;push onto stack
dec ecx ;decrement counter
jnz .mainloop ;jump if counter not zero
mov ecx, 50 ;reset ecx (counter)
.loop: ;prints the stack, should print 0-49 but also prints garbage at the end
pop eax ;pop from stack to eax
cinvoke printf,formatstring,eax ;print eax
dec ecx ;decrement counter
jnz .loop ;loop if counter not zero
int 15;wait 5 seconds ish
invoke ExitProcess ;exit
formatstring db "%d",13,10,0 ;to print digits instead of ASCII chars
section '.idata' import data readable ;stuff I copied but seems to work
library msvcrt,'msvcrt.dll',\ ;don't understand it
kernel32,'kernel32.dll' ;^
import msvcrt,printf,'printf';^^
import kernel32,ExitProcess,"ExitProcess";^^^
Заранее спасибо.
пс Как отформатировать код с подсветкой синтаксиса?