Rutina que calcula el máximo de los enteros que están almacenados en una tabla.
Los enteros son de 16 bits. El resultado se devolverá en el registro AX.
Versión sin función:
tabla dw 2,4,8,1,3
tam dw 10
datos ends
pila segment stack ‘stack’
db 128 dup(?)
pila ends
codigo segment
assume cs:codigo,ds:datos,ss:pila
ppal proc far
push ds
xor ax,ax
push ax
mov ax,datos
mov ds,ax ;5 instrucciones
mov bx, tam
sub bx,2 ;como estoy en la posicion 10 decremento 2 para poder sacar el ultimo
mov ax,tabla[bx] ;meto en ax el numero q hay en la tabla
bucle:mov cx,tabla[bx] ;meto en cx el numero q hay en la tabla
cmp ax,cx ;comparo ax con cx y se activa el flag de signo si cx>ax
jns sigue
mov ax,cx
sigue:sub bx,2
jns bucle
retf
ppal endp
codigo ends
end ppal
Versión con función:
tabla dw 2,255,9,1,3
tam dw 10
datos ends
pila segment stack ‘stack’
db 128 dup(?)
pila ends
codigo segment
assume cs:codigo,ds:datos,ss:pila
ppal proc far
push ds
xor ax,ax
push ax
mov ax,datos
mov ds,ax ;5 instrucciones
mov ax,offset tabla
push ax
mov ax, tam
push ax
call mayor ;llamo a la funcion
retf
ppal endp
mayor proc
push bp
push si
push bx
push cx
mov bp,sp ;hago copia del puntero sp
mov si, 12 [bp] ;recupero la tabla
mov bx, 10 [bp] ;recupero tam
sub bx,2 ;como estoy en la posicion 10 decremento 2 para poder “sacar el
ultimo
mov ax,[si][bx] ;inicializo ax al ultimo numero d la tabla
bucle: mov cx, [si][bx] ;meto en cx el numero q hay en la tabla
para luego compararlo con ax
cmp ax, cx ;comparo ax con cx
jns sigue
mov ax, cx
sigue: sub bx, 2
jns bucle
pop cx
pop bx
pop si
pop bp
ret 4
mayor endp
codigo ends
end ppal