0

1 + 1を100万に達するまで追加し、その後「Done!」と出力する単純なプログラムがあります。コンソールに。しかし、実行しても何もしません。コードは次のとおりです。

.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」であり、「追加」は必要ありません。

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 に答える