Arquitectura de PC
CÓDIGO: 301302
Ciclo de la Tarea 3
Lenguaje de máquina Ensamblador - Formato de las instrucciones
Presentado a:
Entregado por:
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA - UNAD
ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA
ABRIL 2019
CIUDAD
INTRODUCCIÓN
La presente actividad se fundamenta en según la guía de actividad, permitiendo adquirir
conocimiento sobre lengua asembler, uso de programa emul8086 asimismo avanzar en la
profundización del código y análisis de problemas.
OBJETIVOS
Traducir lenguaje ensamblador a lenguaje de maquina
Conocimiento de registros
Conocer formato de instrucciones
Conocer comportamiento de bucles
Conocer como es el control directo de hardware mediante instrucciones de assembler
Actividades a desarrollar
1 Explicar mediante una infografía en que consiste las instrucciones tipo salto del Lenguaje
Ensamblador (Direcciones corta, cercana y lejana, etiquetas, saltos incondicionales, saltos
condicionales, instrucciones de testeo, decisiones y bucles). Cada instrucción debe tener una
definición y 1 ejemplo en lenguaje ensamblador. NO se aceptan enlaces de ningún tipo, todo
debe ser subido mediante un documento al foro.
2. Desarrollar un código en lenguaje ensamblador que permita leer un número de un digito
por teclado y determinar si el número es par, impar o cero. Documentar perfectamente todo el
código. Generar tres capturas por pantalla de la ejecución del programa. Anexar Archivo .asm
del programa
; Nombre del Autor; Código
;Fecha : 20-04-2019
.model small ; define el tipo de memoria que se utilizara
.stack 64 ; es para darle el grandor a la pila
.data
msn1 db 13,10,"por favor ingrese un numero: ", '$'
msn2 db 13,10, "el numero ingresado es Par: ", '$'
msn3 db 13,10, "el numero ingresado es Impar: ", '$'
msn4 db 13,10, "el numero ingresado es cero: ", '$'
var1 db 0; definimos variables
.code
inicio proc far ; iniciamos procedimiento
mov ax, @data ; direccionamiento de segmentos
mov ds, ax
; limpiar pantalla
mov ah, 00
mov al, 03h
int 10h
mov ah, 09h
lea dx, msn1
int 21h
;leer y convertir el numero para verlo en pantalla
mov ah,01h
int 21h
sub al, 30h; para convertir en ascii y visualizarlo
mov var1, al
int 21h
sub al, 30h
mov ah, var1
mov bl, var1
cmp bl,1
JP PAR ; si es par
JNP IMPAR; si es impar
Jz CERO ; es cero
;cuando es par que muestre en el msn3
PAR:
mov ah,09h
lea dx, msn3
int 21h
jmp salir
;cuando es impar mostrar el msn2
IMPAR:
mov ah,09h
lea dx, msn2
int 21h
jmp salir
;cuando es cero mostrar el msn4
CERO:
mov ah,09h
lea dx, msn4
int 21h
jmp salir
; salir del programa
salir:
mov ax, 4c00h
int 21h
inicio endp
end inicio
Evidencia entrega código fuente
3. Desarrollar un código en lenguaje ensamblador que permita realizar una multiplicación de
dos números a través de sumas sucesivas y una potencia a través de multiplicaciones
sucesivas (para ello debe utilizar instrucciones tipo bucle). Al inicio del programa se deben
capturar por teclado dos números de un digito cada uno. Documentar perfectamente todo el
código. Generar tres capturas por pantalla de la ejecución del programa. Anexar Archivo .asm
del programa
;------------------------------------------------------------------------------------
; Nombre del Autor; Grupo No
;Fecha: 19-04-2019
; Desarrollar un código en lenguaje ensamblador que permita
; realizar una multiplicación de dos números a través de sumas
; sucesivas y una potencia a través de multiplicaciones sucesivas (para
;ello debe utilizar instrucciones tipo bucle). Al inicio del programa se
;deben capturar por teclado dos números de un digito cada uno
;------------------------------------------------------------------------------------
.model small; modelo de memoria ; cadena de caracteres
.stack 100; tamaño de la pila
.data
msj1 db 10,13,10,13, "INGRESE Primer Numero:",'$'
msj2 db 13,10,"INGRESE Segundo Numero:",'$'
msj3 db 13,10,'Multiplicacion:','$'
msj4 db 13,10,'Potencia":','$'
var1 db 0 ;primer numero
var2 db 0 ; segundo numero
potencia db 1 ; la potencia vale uno inicalmente
:base db 0 ; verificar
; exponente db 0
diez dw 10 ;se usa como divisor
.code : programa
inicio:
mov dx,@data ; inicializa direccion segmneto datos
mov ds, dx ; pone puntero
xor ax ,ax ; se gurada valores de operando
xor bx,bx
xor cx,cx
mov var1,0
mov var2,0
mov ah,09
lea dx, msj1
int 21h
mov ah,01h
lea dx, msj3 ; mensaje ingrese primer numero
int 21h
sub al,30h
mov var1,al
mov ah,09
lea dx, msj2
int 21h
mov ah,01h
int 21h
sub al,30h
mov var2,al
cmp var2,0
jz sr
mov cl,var2
multi: ; operacion multiplicacion
add bl,var1 ; suma numero 1 asimismo
loop Multi
sr:
mov ah,09
lea dx, msj3
int 21h
mov ax,bx
call PRINT_NUM
mov ah,09
lea dx, msj4
int 21h
xor ax,ax ;deja regsitro enc eros para continuar con operacion
xor bx,bx
xor cx,cx
mov al, potencia
cmp var2,0
jz sh
mov cl,var2
Pot:
mul var1
loop Pot
sh:
call PRINT_NUM
jmp inicio ; vuelve al inicio de programa solicita valores se repetite como bucle
PRINT_NUM PROC NEAR
PUSH DX
PUSH AX ; guarda residuo
CMP AX,0
jnz not_zero
;PUTC '0'
JMP printed
not_zero:
CMP AX,0
JNS positive
NEG AX
;PUTC '-'
positive:
;CALL PRINT_NUM_UNS
printed:
POP AX ; devuelve valor que tenia AX
POP DX
RET
PRINT_NUM ENDP
;PRINT_NUM_UNS NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,1
MOV BX, 10000
; AX =0?
CMP BX,0
;JZ print_zero
begin_print:
CMP CX,0
JZ end_print
;CMP CX.0
JE calc
CMP AX,BX
JB skip
calc:
MOV CX,0
MOV DX,0
DIV BX
ADD AL,30h
;PUTC AL
MOV AX,DX
skip:
PUSH AX
MOV DX, 0
MOV AX,BX
DIV diez
MOV BX, AX
POP AX
JMP begin_print
;print_zero:
;PUTC '0'
end_print:
POP DX
POP CX
POP BX
POP AX
RET
;PRINT_NUM_UNS ENDP
end
CODIGO FUENTE:
Conclusiones
Se profundiza en el uso de instrucciones que contienen las órdenes a seguir para llevar a
cabo una acción. Asimismo como estas órdenes mediante variables y uso de emul8086
permite cargarlas en memoria teniendo claro el comportamiento final de las órdenes escritas
en lenguaje assembler
REFERENCIAS BIBLIOGRÁFICAS
García, F. (2011). Procesadores digitales de señal de altas prestaciones de Texas
InstrumentsTM: de la familia TMS320C3x a la TMS320C6000 (págs.13 -68). Recuperado de
[Link]
ppg=1&docID=3194922&tm=1543531162476
Lindig Bos, M. (12 de 04 de 2010). ¿Qué hay detrás de las computadoras?. [N.p.]: Instituto
Politécnico Nacional (págs. 1 - 152). Recuperado de
[Link]
ppg=1&docID=3187364&tm=1543530714213