2016-05-15 4 views
1

私はこの.asmコードを完了するのに非常に悩まされています。 この結果は、Insertion_Sortを使用して、順番に印刷する必要があります。x86アセンブリ:初心者としてInsertion_sortをプログラミング

アルゴリズムのロジックが間違っている場合は、実際にBubble_Sortを試しました。私はあなたにこのコードを読むように依頼したいと思います。どんな助言も大歓迎です。私は本当に私が逃したものを知りたい。

バブルソートのrltも非常に奇妙です。私はasmでどのようにデバッグするのか分からないので、コードを何度も何度も読んでいるだけです。 。ヘルプの絶望)

%include "asm_io.inc" 
section .data 
    array dd 3,1,5,7,2,8,4,9,6,10 
    size dd 10 
    segment .bss 
    next resw 1 
segment .text 
global main 
main: 
    enter 0,0 
    pusha 
    ; Insertion Sort Start from here 
    mov eax,[array+4*ecx] 
    mov [next], eax 
    ; j = i-1 
    mov ebx, ecx 
    dec ebx 
while2: 
    cmp ebx,0 
    jl EndLoop2 
    mov eax, [next] 
    cmp [array+4*ebx],eax 
    jle EndLoop2 
    ;array[j+1] = array[j] 
    mov eax, [array+4*ebx] 
    mov [array+4*(ebx+1)], eax 
    ; j-- 
    dec ebx 
    ; Go back to the top of this loop 
    jp while2 
EndLoop2: 
    mov eax, [next] 
    mov [array+4*(ebx+1)],eax 
    inc ecx 
    jmp while1 
EndLoop1: 
    mov ecx,0 
nextInt: 
    mov eax, [array+4*ecx] 
    call print_int 
    call print_nl 
    inc ecx 
    cmp [size], ecx 
    jne nextInt 
    popa 
    mov eax, 0 
    leave 
    ret 
+1

asmでデバッグする方法を学ぶ必要があります。各asm命令は1つのことしか実行しないので、高水準言語をデバッグするよりもはるかに簡単です。 (すると、 'jp'で面白いことに気付くでしょう。) –

+0

自分でデバッガを手に入れよう!利用可能なものがたくさんあります。プログラムが何かを理解するのは、それが逐一実行されるときに見ることができます。質問をするのを忘れてしまったことに気づきます。あなたの質問は何ですか? –

答えて

1

エラーが含まれる:

  • ECXレジスタはmov eax,[array+4*ecx]に登録していますが、あらかじめ設定することはできません。 mov [next], eax

  • あなたは単語と定義した変数にDWORDを書きます。

  • ここでこれはjmp while1になりますか?そのようなラベルはありません!

  • アセンブラがこのアドレッシングを理解できるかどうかわからない:mov [array+4*(ebx+1)], eax。おそらくそれを次のように変更してください:mov [array+4*ebx+4], eax

  • jp while2これは単なるjmpではありませんか?ここでチェックされるパリティはありません。まず、これらのすべてを解決

...は

私は疑問を別のアカウントにログインして、なぜ私は、見当がつかない
0

、上記1(user3787105は)私はちょうど私が解決することを言いたい、私です問題。私が狂ったようなエラーは、不必要に使われた "DEC"と "INC"が原因です。ありがとう、みんな、 私がuser3787105アカウントのパスワードを忘れてしまったためにあなたに何の利点も与えてくれなかったことを申し訳ありません。

関連する問題