110 lines
2.7 KiB
NASM
110 lines
2.7 KiB
NASM
segmento SEGMENT
|
||
ASSUME DS:segmento
|
||
ORG 100h
|
||
principal PROC NEAR
|
||
|
||
mov ax, OFFSET Cadena1
|
||
push ax
|
||
mov al, 1eh
|
||
push ax
|
||
|
||
call VerCadena
|
||
|
||
mov ah, 00h ; Se acepta una tecla
|
||
int 16h
|
||
|
||
mov ax, OFFSET Cadena2
|
||
push ax
|
||
mov al, 21h
|
||
push ax
|
||
|
||
call VerCadena
|
||
|
||
mov ah, 00h ; Se acepta una tecla
|
||
int 16h
|
||
|
||
mov ax, OFFSET Cadena3
|
||
push ax
|
||
mov al, 34h
|
||
push ax
|
||
|
||
call VerCadena
|
||
|
||
mov ah, 00h ; Se acepta una tecla
|
||
int 16h
|
||
|
||
mov ax, OFFSET Cadena4
|
||
push ax
|
||
mov al, 42h
|
||
push ax
|
||
|
||
call VerCadena
|
||
|
||
mov ah, 00h ; Se acepta una tecla
|
||
int 16h
|
||
|
||
mov ax, OFFSET Fin
|
||
push ax
|
||
mov al, 07h
|
||
push ax
|
||
|
||
call VerCadena
|
||
|
||
mov ah, 00h ; Se acepta una tecla
|
||
int 16h
|
||
|
||
mov ah, 4ch
|
||
int 21h
|
||
|
||
principal ENDP
|
||
|
||
VerCadena PROC NEAR
|
||
|
||
push bp
|
||
mov bp, sp
|
||
|
||
push bx ; Se almacenan en la pila los registros que va a utilizar
|
||
push cx ; la subrutina. El valor de SP disminuye en 3 * 2 = 6
|
||
push dx ; unidades
|
||
; Por otro lado, cuando se sabe que el registro AX es el
|
||
; empleado para pasar los par metros, no es necesario
|
||
; salvarlo
|
||
|
||
|
||
mov ax, 0600h ; Se borra la pantalla empleando el atributo
|
||
mov bh, [bp+4] ; pasado como par metro mediante el registro AL,
|
||
mov cx, 0000h ; almacenado ahora en la pila y recuperado con
|
||
mov dx, 184fh ; la instrucci¢n MOV BH, [BP+4]
|
||
int 10h
|
||
|
||
mov ah, 02h ; Se posiciona el cursor en (25,11)
|
||
mov bh, 00h
|
||
mov dh, 11
|
||
mov dl, 25
|
||
int 10h
|
||
|
||
mov ah, 09h
|
||
mov dx, [bp+6] ; El desplazamiento de la cadena que se va a visualizar
|
||
int 21h ; se mueve a DX
|
||
|
||
pop dx ; Se recuperan los valores de los registros, de forma que
|
||
pop cx ; al volver el control de la ejecuci¢n al m¢dulo principal
|
||
pop bx ; ‚stos almacenen los valores que pose¡an antes de la
|
||
; llamada al procedimiento. SP se incrementa en 3 * 2 = 6
|
||
; unidades
|
||
|
||
pop bp ; Se restaura BP
|
||
|
||
ret 4
|
||
|
||
VerCadena ENDP
|
||
|
||
Cadena1 DB 'Primera cadena que se visualiza$'
|
||
Cadena2 DB 'Segunda cadena que se visualiza$'
|
||
Cadena3 DB 'Tercera cadena que se visualiza$'
|
||
Cadena4 DB 'Cuarta cadena que se visualiza$'
|
||
Fin DB 'Fin del programa ejemplo$'
|
||
|
||
segmento ENDS
|
||
END principal
|
||
|