2016-04-12 34 views
1

Şimdiye kadar en büyük sayıyı nasıl elde edeceğimi ve bir kayıtta nasıl saklayacağımı anlıyorum ancak en küçük sayıyı almaya devam edeceğimden emin değilim? Herhangi bir yardım, şu anda yapmakta olduğum şeyi yapmaktan çok daha fazla takdir edilecek, hatta daha verimli bir yol olacaktır. Ben dx içindenasm x86 en büyük ve en küçüğü bulmak ve bir kayıtta saklamak

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

Bu karşılaştırmadan sonra başka bir kayıt ile başka bir karşılaştırma ekleyerek. –

+0

Sayacımı 3'e yeniden başlatmalı mıyım? ve azaltma? –

+0

Aynı döngü içinde yapabilirsin, başka bir döngü yapmanıza gerek yok –

cevap

1

Ben değeri şimdiki büyükse test ettikten sonra başka bir karşılaştırma eklemek istiyorsunuz yapacağını yolu balta en büyük sayı ve en küçük numarayı saklamak için çalışıyorum büyük (balta saklanır) Mevcut elemanın mevcut en küçük olandan daha küçük olup olmadığını test eder (dx'de saklanır). İlk olarak dx'i ilk öğe ile aynı olacak şekilde ayarlamanız gerekir.

Dx kaydının başlangıç ​​ayarını ve eki "isSmaller" ekini ekledim, bu kontrol işlemi gerçekleştirir ve mevcut değer kontrol edilirse dx kaydında saklanan değerden daha küçükse dx kaydını ayarlar.

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

Eğer aynı rutini gerçekleştirmek isteseydim ama imzasız değişkenler ile jg'yi ja ve jl'den jb'ye değiştirmek zorunda kalır mıyım? –