2016-04-12 1 views
1

これまでのところ、最大の数値を取得してレジスタに格納する方法を理解していますが、最小の数値を引き続き取得する方法はわかりません。どんな助けでも大いに感謝されるでしょうし、私が現在やっていることをやるより効率的な方法です。私はnasm x86は最大値と最小値を見つけてレジスタに保存します

section .data 

A dw 1 
B dw 3 
C dw 8 
D dw 5 

section .bss 

section .text 
    global _start 

_start: mov eax,0  ;clear registers 
     mov ecx,3 
     mov esi,A 
     mov ax, [esi] 
     add esi,2 

again: cmp ax,[esi] 
     jg cont 
     mov ax,[esi] 

cont: add esi,2 
     dec ecx 
     cmp ecx,0 
     jnz again 

exit: mov eax,1 
     mov ebx,0 
     int 80h 
+1

この比較の後にもう1つ別のレジスタを追加します。 –

+0

私はまた私のカウンターを3に再起動する必要がありますか?減るか? –

+0

あなたは同じループの中でそれを行うことができます、別のループを行う必要はありません –

答えて

1

DXに斧と最小数の最大数を格納するために、私は現在の値が(AXに格納されている)最大電流よりも大きい場合 をテストした後、別の比較を追加するには、それを考えだろうな方法をしようとしています現在の要素が現在の最小要素(dxに格納されている)よりも小さいかどうかをテストします。また、最初にdxを最初の要素と同じにする必要があります。

dxレジスタの初期設定とチェックを実行する余分なセクション "isSmaller"を追加し、チェックされている現在の値がdxに格納されている値より小さい場合はdxレジスタを設定します。

section .data 

A dw 1 
B dw 3 
C dw 8 
D dw 5 

section .text 
    global _start 

_start: mov eax,0  ;clear registers 
     mov ecx,3 
     mov esi,A 
     mov ax, [esi] ; Initially set largest 
     mov dx, [esi] ; and initial smallest 
     add esi,2 

again: cmp ax,[esi] 
     jg isSmaller 
     mov ax,[esi] 

isSmaller: cmp dx, [esi] 
     jl cont 
     mov dx, [esi] 

cont: add esi,2 
     dec ecx 
     cmp ecx,0 
     jnz again 

exit: mov eax,1 
     mov ebx,0 
     int 80h 
+0

同じルーチンを実行したいが、符号なし変数を使用したいのであれば、単にjgをjaに、jlをjbに変更するだけですか? –

関連する問題