TP2 Ensamblador
EJERCICIO Nº1 Realizar un programa que al ingresar por teclado un nombre me lo
muestre en el centro de pantalla. Usar ensamblador y compilarlo.
TITLE
NOMBRE.ASM
;---------------------------------------------------------------.MODEL SMALL
.STACK 64
;---------------------------------------------------------------.DATA
NAMEPAR
LABEL BYTE
MAXNLEN
DB
20
NAMELEN
DB
?
NAMEFLDDB
21 DUP (' ')
PROMPT
DB
'Nombre? ', '$'
;----------------------------------------------------------------.CODE
BEGIN
PROC FAR
MOV AX,@data
MOV DS,AX
MOV ES,AX
CALL Q10CLR
A20LOOP:
MOV DX,0000
CALL Q20CURS
CALL B10PRMP
CALL D10INPT
CALL Q10CLR
CMP NAMELEN,00
JE A30
CALL E10CODE
CALL F10CENT
JMP A20LOOP
A30:
MOV AX,4C00H
INT 21H
BEGIN
ENDP
;---------------- exhibe indicador ---------------B10PRMPPROC NEAR
MOV AH,09H
LEA DX,PROMPT
INT 21H
RET
B10PRMP
ENDP
;lista de parámetros nombre:
;longitud máxima de nombre
;nº de caracteres introducidos
;nombre introducido
; iniciar registros
; de segmento
; despejar pantalla
;fijar cursor en 00,00
;exhibir indicacion
;proporciona entradas de nombre
;despejar pantalla
;¿se ingresó el nombre?
;no, salida
;fijar campana y '$'
;centra y exhibe el nombre;salir a dos
;petición de exhibición
;---------------- Acepta entrada de nombre ---------------D10INPT
PROC NEAR
MOV AH,0AH
;petición de teclado
LEA DX,NAMEPAR
; entrada
INT 21H
RET
D10INPT
ENDP
;---------------- Fijar campana y delimitador `$´---------------E10CODE PROC NEAR
MOV BH,00
;reemplaza caracter enter
MOV BL,NAMELEN
MOV NAMEFLD[BX],07
;con el de la campana (07)
MOVNAMEFLD[BX+1],'$'
;pone el delimitador
RET
E10CODE ENDP
;---------------- Centrar y exhibir nombre ---------------F10CENT
PROC
NEAR
MOV DL,NAMELEN
;localiza columna central
SHR DL,1
;divide longitud en dos
NEG DL
;invierte el seguro
ADD DL,40
;suma 40
MOV DH,12
;centra hilera
CALL Q20CURS
;fija cursor
MOV AH,09
;exhibe nombre
LEA DX,NAMEFLD
INT 21H
RET
F10CENT
ENDP
;---------------- Despejar pantalla---------------Q10CLR
PROC NEAR
MOV AX,0600H
MOV BH,30
MOV CX,0000
MOV DX,184FH
INT 10H
RET
Q10CLR
ENDP
;---------------- Despejar pantalla ---------------Q20CLR
PROC NEAR
MOV AX,0700H
MOV BH,30
MOV CX,0000
MOV DX,0020H
INT 10H
RET
Q20CLR
ENDP
;recorrido de pantalla
;color 07 blanco y negro
;de 00 a 00
;a 24, 79
;recorrido de pantalla
;color 07 blanco y negro
;de 00 a 00
;a 00, 79
;---------------- Fijarhilera / columna del cursor ---------------Q20CURS PROC NEAR
MOV AH,02
;DX fija en entrada
MOV BH,00
;petición de ubicar cursor
INT 10H
RET
Q20CURS ENDP
END BEGIN
EJERCICIO Nº2
El mismo ejercicio anterior con la variante de escribir los nombres
en una columna central. Ensamblarlo.
TITLE
NOMBRE.ASM
;---------------------------------------------------------------.MODEL SMALL
.STACK 64;---------------------------------------------------------------.DATA
NAMEPAR
LABEL BYTE
MAXNLEN
DB
20
NAMELEN
DB
?
NAMEFLD
DB
21 DUP (' ')
FILA
DB 0
;----------------------------------------------------------------.CODE
.STARTUP
MOV AX,DS
MOV ES,AX
CALL Q10CLR
A20LOOP:
MOV DX,0000
CALL Q20CURS
CALL D10INPT
CALL Q20CLR
CMP NAMELEN,00
JE A30
CALL E10CODE
CALL F10CENT
INC FILA
CMP FILA,24
JNZ A20LOOP
A30: .EXIT;lista de parámetros nombre:
;longitud maxima de nombre
;nºde caracteres introducidos
;nombre introducido
;iniciar registros
; de segmento
;despejar pantalla
;fijar cursor en 00,00
;proporciona entradas de nombre
;¿se ingresó el nombre?
;no, salida
;fijar campana y '$'
;centra y exhibe el nombre
;salir a dos
;---------------- Exhibe indicador y Acepta entrada de nombre ---------------D10INPTPROC NEAR
MOV AH,0AH
;petición de teclado
LEA DX,NAMEPAR
; entrada
INT 21H
RET
D10INPT
ENDP
;---------------- Fijar campana y delimitador `$´---------------E10CODE PROC NEAR
MOV BH,00
;reemplaza caracter enter
MOV BL,NAMELEN
;con el de la campana (07)
MOV NAMEFLD[BX],07
MOV NAMEFLD[BX+1],'$'
;pone el delimitador
RET
E10CODE ENDP
;---------------- Centrar y exhibir nombre ---------------F10CENT...
Regístrate para leer el documento completo.