Está en la página 1de 18

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
https://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
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
https://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
ppg=1&docID=3187364&tm=1543530714213

También podría gustarte