Tarea 4
Tarea 4
Tarea 4
Lenguaje ensamblador
Nombre de la Licenciatura
Ing. Sistemas Computacionales
Nombre de la Tarea
Unidad #
Nombre de la unidad
Instrucciones:
Ejercicios de programación:
Escriba los siguientes programas en ensamblador de 16 bits con comentarios y estructura estándar. Para ello
puede utilizar todos los programas que se han realizado con anterioridad. Puede reutilizar código de las clases
y libros, pero no copiarlos en su totalidad.
1) Escriba un programa que reciba un hexadecimal de 2 cifras por teclado y regrese el valor en decimal
por la pantalla
.model small
.stack 256h
cr equ 13 ; constante cr (retorno carro)
lf equ 10 ; constante lf (salto de línea)
imprimir equ 9
fin equ 4c00h
dos equ 21h
tab equ 09h
bell equ 07h
;============================================
; declaracion del segmento de datos
;============================================
datos segment
encabezado db 13,10,13,10,tab,
db 13,10,13,10,tab,
db 13,10,13,10,tab,
db 13,10,13,10,"$"
valor_ascci db 4 dup (' '),13,10,"$"
Valor_binario dw 007ah,"$"
2
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
mensaje1 db cr,lf,tab,
db 13,10,tab,"imprime Valor Hexadecimal: ", "$"
mensaje2 db cr,lf,tab, "imprime el Valor ya convertido", "$"
m_espacio db 13,10,13,10,13,10,13,10, "$a"
datos ends
;declaracion del segmento pila
pila segment stack
db 64 dup('0')
pila ends
;declaracion del segmento de codigo
codigo segment
pe25_anb proc near ; inicio procedimiento
assume cs:codigo,ds:datos,ss:pila
mov ax,datos ; ax=dirección del segmento de datos
mov ds,ax ; ds=ax. indicar el segmento de datos
mov cx, 0010 ; factor de división
lea si, valor_ascci+3 ; direccion del valor ascci
mov ax, valor_binario ; obtiene campo binario
etiqueta_1:
cmp ax,cx ; el numero es menor a 10?
jb finaliza ; si entonces salir
xor dx,dx ; limpiar el cociente superior
div cx ; divide entre 10 en d se almacena el resto y el cociente en a
or dl,30h
mov [si],dl ; almacena el caracter ascci
dec si
jmp etiqueta_1
finaliza:
or al,30h ; almacena el ultimo cociente como caracter ascci
mov [si],al
lea dx,encabezado
call escribe
lea dx, mensaje1
3
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
call escribe
lea dx, valor_binario
call escribe
lea dx, m_espacio
call escribe
lea dx, mensaje2
call escribe
lea dx, valor_ascci
call escribe
call salir
pe25_anb endp ; fin del procedimiento
escribe proc ; inicio procedimiento escribe
mov ah,9 ; funcion dos para escribir texto en pantalla
int 21h ; llamar a la interrupcion del dos
ret ; volver a retornar
escribe endp ; fin del procedimiento escribe
salir proc near
mov ax, fin ; mueve la instruccion para terminar el programa.
int dos ;ejecuta la interrupción.
ret
salir endp
codigo ends
;================================================================
end pe25_anb
4
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
5
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
2) Escriba un programa que reciba por teclado una palabra de 5 letras y la muestre al revés en la
pantalla. (Por ejemplo, si introduce Hotel, mostrará: letoH)
title reves.asm
.model small
.stack 256h
.data
CR equ 13
LF equ 10
mens db 'Escribe algo y te lo pongo al reves'
salto db CR,LF,'$'
cadena label byte
cant db 20
max db 00
campo db 20 dup(' ')
.code
inicio:
mov ax,@data
mov ds,ax
push ds
pop es
mov ah,09h
lea dx,mens
int 21h
mov ah,0ah
lea dx,cadena
int 21h
mov ah,09h
lea dx,salto
int 21h
mov cl,cant
mov bx, offset campo
add bl, cant
loopo:
6
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
mov dl,[bx]
mov ah,02h
int 21h
dec bl
dec cl
cmp cl,0
je salir
jmp loopo
salir:
mov dl,[bx]
mov ah,02h
int 21h
mov ax,4c00h
int 21h
end inicio
7
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
8
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
3) Escriba un programa que reciba por teclado un número entero positivo de tres cifras y lo muestre en
binario (separado en nibbles) en la pantalla.
;---------------------------------------------
; Nibbles, nibbles everywhere
;---------------------------------------------
.model small
.data
carry db 0dh,0ah,'$'
msn db 'Escribe un numero',0dh,0ah,'$'
cinco db 5
cadena db 4 dup (' ')
nibble db '00' , '0000 ', '0001 ','0010 ','0011 ','0100 ','0101 ','0110 ','0111 ','1000 ','1001 '
.code
inicio:
mov ax,@data
mov ds,ax
push ds
pop es
lea dx, msn
mov ah,09h
int 21h
mov ah,0ah
lea dx,cadena
int 21h
lea dx,carry
mov ah,09h
int 21h
;-------conversion
xor ax,ax
xor dx,dx
lea si,cadena + 2
mov cx,0003
j01:
9
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
lea di,nibble + 2
push cx
mov al,[si]
xor al,30h
mul cinco
add di,ax
call imprime
pop cx
inc si
loop j01
mov ax,4c00h
int 21h
;---------------------
imprime proc near
mov cx,0005
ca2:
mov dl,[di]
mov ah,02h
int 21h
inc di
loop ca2
xor di,di
ret
imprime endp
;----------------------
end inicio
1
0
Unidad 4. Interrupciones en Ensamblador
Lenguaje Ensamblador, Tarea 4
1
1