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