0

我有一个简单的程序,它添加 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 汇编。

提前致谢,

程序

4

3 回答 3

5

您的程序不会增加任何内容。您可能需要add在某处获得说明。

于 2012-04-19T02:37:31.427 回答
1

有各种错误。为了清楚起见和其他阅读这篇文章的用户......

EAX 在每个循环中设置为 1:

_loop:
mov eax, 1         ;eax set to 1

无需移动 eax 中的值 - 直接针对 eax 进行测试。

mov main, eax

OP希望每次增加1,因此缺少的指令是“inc eax”-不需要“add”:

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:
...
于 2014-01-26T16:18:08.997 回答
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
于 2015-09-25T14:26:23.507 回答