Grupo 611 John Yara

Arquitectura de PC CÓDIGO: 301302 Ciclo de la Tarea 3 Lenguaje de máquina Ensamblador - Formato de las instrucciones Pr

Views 107 Downloads 3 File size 547KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Arquitectura de PC CÓDIGO: 301302 Ciclo de la Tarea 3 Lenguaje de máquina Ensamblador - Formato de las instrucciones

Presentado a: Anyelo Gerley

Entregado por: John Jairo Yara Oyola Código: 79512473 Grupo: 301302A_611

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: JOHN YARA ; Código ; Grupo No ;Fecha

: 79512473 : 301302A_611 : 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

Arquitectura par-impar.asm

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: John Jairo Yara O ; Código: ; Grupo No:

;Fecha:

79512473 301302A_611

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&t m=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&t m=1543530714213