Daha önceden c ve c# ile en büyük sayı bulma örnekleri paylaşmıştım. Assembly ile bu örneği de aynı mantık ile yapacağız. Assembly, performans olarak çok iyi sonuç verse de büyük çaplı programlarda programcıları çok fazla uğraştırmaktadır. Bu örneğimizde ilk olarak 5 adet sayıyı biz tanımlıyoruz. İşlemlerimizi ax registerında yapacağımız için xor işlemiyle temizliyoruz. Datalar olarak tanımladığımız 5 sayının offset adreslerini “inc” komutuyla birer birer artırarak karşılaştırma işlemi yapıyoruz(cmp). CX, genellikle sayaç olarak kullanılır ve bu programda da ilk sayıyı en büyük olarak varsaydığımız için cx’e “4” değerini atıyoruz. Bir artırdıktan sonra bl registerına yazıyoruz ve al’deki ile karşılaştırma yaparak ja(jump above) komutu ile al registerındaki sayının bl registerındaki sayıdan büyük olup olmadığına bakıyoruz, büyükse “next” etiketine gönderiyoruz. Değilse bl registerındaki sayıyı al registerına atıyoruz. Son olarak al’de kalan sayımız, en büyük sayı oluyor ve bunu da “sonuc”a atıyoruz.
.stack 64
.data
datalar db 69,87,96,45,75
sonuc db ?
.code
main proc far
mov ax,@data
mov ds,ax
xor ax,ax
mov si, offset datalar
mov al,[si]
mov cx,04
inc si
dongu: mov bl,[si]
cmp al,bl
ja next
mov al,bl
next: inc si
loop dongu
xor bl,bl
mov bl
,al
mov sonuc, al
mov ah,4ch
int 21h
main endp
end main
anlattıkları kadar varmış assembly programlama dili bi ara öğrenmek için merak saldım ama gerçekten çok karışıkmış