我有一个简单的程序,它增加1 + 1直到它达到一百万,然后它打印“完成!”到控制台。但是当它运行时,它什么都不做。这是代码:
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
main dd 0
msg db "Done!", 0
.code
start:
_loop: mov eax, 1
mov main, eax
cmp main, 1000000
jz _next
jmp _loop
_next: invoke StdOut, addr msg
invoke ExitProcess, 0
end start
我运行时没有做任何事情。我不明白为什么。我目前通过cmd运行它,通过单击并将其拖动到提示并按Enter键。而且,MASM32是最容易学习的汇编程序,还是有更好更容易的汇编程序?如果是这样,有人可以发布那些更好的吗?谢谢。我只是需要一个地方开始学习x86汇编。
提前致谢,
Progrmr
答案 0 :(得分:5)
您的程序不会增加任何内容。你可能想在那里找一条add
指令。
答案 1 :(得分:1)
有各种各样的错误。为了清楚和其他用户阅读这篇文章...
每个循环都将EAX设置为1:
_loop:
mov eax, 1 ;eax set to 1
无需在eax中移动值 - 直接针对eax进行测试。
mov main, eax
OP希望每次增加1,因此缺失的指令是“inc eax” - 不需要“添加”:
start:
xor eax,eax ;eax=0
_loop: ;Begin loop
inc eax ;Increment eax by 1 each loop
cmp eax,1000000 ;Compare
je _next ;Done - exit loop
jmp _loop ;Continue loop
_next:
...
答案 2 :(得分:0)
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
main dd 0
msg db "Done!", 0
.code
start:
mov eax,1 ;set eax register to 1
IncreaseBy_1:
inc eax ;increase eax by 1
cmp eax,1000000 ;compare eax to 1000000
jnz IncreaseBy_1 ;jump if eax not equal to 1000000
_next:
invoke StdOut,addr msg
invoke ExitProcess,0
end start