#------------------------------------------
# Se piden N numeros de un digito
# y se localiza a max y a min
# Mayo - 2006
#------------------------------------------
.data
max: .int -50
min: .int 0xA
Pide: .ascii "Dato: "
LPide = . - Pide
CadMax: .ascii "\nEl mayor es: "
LCadMax = .- CadMax
CadMin: .ascii "\nEl menor es: "
LCadMin = .- CadMin
N: .ascii "\N= "
LN = .- N
.text
.global main
main:
mov %esp, %ebp
# Se pide N
movl $4, %eax
movl $1, %ebx
movl $N, %ecx
movl $LN, %edx
int $0x80
movl $3, %eax
movl $1, %ebx
movl $2, %edx
int $0x80
movb (%ecx), %al
subl $48, %eax
mov %eax, 12(%ebp) # se guarda N
movl $0, 8(%ebp) # valor del ciclo
# --------------------------Lectura del teclado
cicloLee:
movl 8(%ebp), %eax # rescato el paso de iteracion
cmp 12(%ebp), %eax
jl PideDato
jmp MinMax
PideDato:
movl $4, %eax
movl $1, %ebx
movl $Pide, %ecx
movl $LPide, %edx
int $0x80
# ------------------------
movl $3, %eax
movl $1, %ebx
movl $2, %edx
int $0x80
# ------------------------
movb (%ecx), %al
subl $48, %eax
# Se almacena en su posicion
mov 8(%ebp), %edx
movl %eax, 16(%ebp, %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 12(%ebp), %ebx
jle Revisa
jmp Respuesta
Revisa:
movl 8(%ebp), %ebx
movl 16(%ebp, %ebx, 4), %eax
cmpl max, %eax
jg SwapMax
RevMin:
movl 8(%ebp), %ebx
movl 16(%ebp, %ebx, 4), %eax
cmpl min, %eax
jl SwapMin
next:
leal 8(%ebp), %eax
incl (%eax)
jmp cicloRevisa
SwapMax:
movl 16(%ebp, %ebx, 4), %eax
movl %eax, max
jmp RevMin
SwapMin:
movl 16(%ebp, %ebx, 4), %eax
movl %eax, min
jmp next
Respuesta:
movl $4, %eax
movl $1, %ebx
movl $CadMax, %ecx
movl $LCadMax, %edx
int $0x80
# conversion a ascii
leal max, %eax
add $48, (%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
# conversion a ascii
leal min, %eax
add $48, (%eax)
mov %eax, %ecx
mov $4, %eax
mov $1, %ebx
mov $1, %edx
int $0x80
movl $4, %eax
movl $1, %ebx
movl $N, %ecx
movl $LN, %edx
int $0x80
Salir:
pop %ebp
ret