#------------------------------------------
# Se piden 10 numeros de un digito
# y se localiza a max y a min
# Mayo - 2006
#------------------------------------------
.data
vector: .int 0,0,0,0,0,0,0,0,0,0
CAD: .ascii "0123456789"
max: .int -500
min: .int 500
Pide: .ascii "Dato: "
LPide = . - Pide
CadMax: .ascii "\nEl mayor es: "
LCadMax = .- CadMax
CadMin: .ascii "\nEl menor es: "
LCadMin = .- CadMin
.text
.global main
main:
mov %esp, %ebp
movl $0, 8(%ebp) # valor del ciclo
# --------------------------Lectura del teclado
cicloLee:
movl 8(%ebp), %eax # rescato el paso de iteracion
cmp $9, %eax
jle PideDato
jmp MinMax
PideDato:
movl $4, %eax # funcion write
movl $1, %ebx # io
movl $Pide, %ecx # cadena a mostrar
movl $LPide, %edx # Longitud de lo que se lee
int $0x80 # llamada al sistema
# ------------------------
movl $3, %eax # funcion read
movl $1, %ebx # io
movl $2, %edx # Longitud ( el caracter y el enter )
int $0x80 # llamada al sistema
# ------------------------
movb (%ecx), %al # se lee el primer byte. (si es 23 entonces es el 2)
subl $48, %eax # Es un ascii. (1 = 49 entonces 49 - 48 = 1)
# Se almacena en su posicion
movl 8(%ebp), %edx
movl %eax, vector(, %edx, 4)
# se actualiza el paso iterativo
leal 8(%ebp), %eax
incl (%eax)
jmp cicloLee
# Busqueda de max y min
MinMax:
movl $0, 8(%ebp)
cicloRevisa:
movl 8(%ebp), %ebx # rescato el paso de iteracion
cmp $9, %ebx
jle Revisa
jmp Respuesta
Revisa:
movl 8(%ebp), %ebx
movl vector(, %ebx, 4), %eax
cmpl max, %eax
jg SwapMax
RevMin:
movl vector(, %ebx, 4), %eax
cmpl min, %eax
jl SwapMin
next:
leal 8(%ebp), %eax
incl (%eax)
jmp cicloRevisa
SwapMax:
movl vector(, %ebx, 4), %eax
movl %eax, max
jmp RevMin
SwapMin:
movl vector(, %ebx, 4), %eax
movl %eax, min
jmp next
Respuesta:
movl $4, %eax # funcion write
movl $1, %ebx # io
movl $CadMax, %ecx # cadena a mostrar
movl $LCadMax, %edx # Longitud de lo que se lee
int $0x80
mov max, %eax
leal CAD(,%eax,1), %eax
mov %eax, %ecx
movl $4, %eax
movl $1, %ebx
movl $1, %edx
int $0x80
movl $4, %eax # funcion write
movl $1, %ebx # io
movl $CadMin, %ecx
movl $LCadMin, %edx
int $0x80
movl min, %eax
leal CAD(,%eax,1), %eax
mov %eax, %ecx
movl $4, %eax
movl $1, %ebx
movl $1, %edx
int $0x80
Salir:
pop %ebp
ret