ensamblador - cartagena99.com 2 - ensamblador.pdf · ensamblador martes, 9 de septiembre de 2014...
Post on 01-Nov-2018
229 Views
Preview:
TRANSCRIPT
EJERCICIO 9:_Palabra y direccion de 32 bits.30 registros generales.500 instrucciones
El Codigo de Operación ocupa 9 bits(combinacion necesaria para obtener al menos 500 números(instrucciones))El R7 ocupa 5 bits y el desplazamiento ocupa el resto(18 bits)
a)- BR #8[.R7]
b)- ADD [.R4],#4
Estructura de computadores página 11
El Codigo de Operación ocupa 9 bits(combinacion necesaria para obtener al menos 500 números(instrucciones))
Estructura de computadores página 12
COMPUTADORES CISC Y RISC
-Su modelo de ejecución es de registro a registroCISC - Complex instruction set computer(juegos de instrucciones complejos)
Tienen alrededor de sólo 30 instrucciones, lo que hace que los programas sean mas largos para que hagan lo mismo, aun así como son instrucciones mas sencillas, la ejecución es mucho más rápida
-
RISC - Reduced instruction set computer(juegos de instrucciones reducidos)
EJERCICIO 9:_Palabra y direccion de 32 bits.30 registros generales.500 instrucciones
El Codigo de Operación ocupa 9 bits(combinacion necesaria para obtener al menos 500 números(instrucciones))El R7 ocupa 5 bits y el desplazamiento ocupa el resto(18 bits)
a)- BR #8[.R7]
El codigo ocupa 9 bitsEl R4 ocupa 5 bitsInmediato(operandos) ocupa 18 bits
b)- ADD [.R4],#4
El código ocupa 9 bitsEl R4 ocupa 5Los operandos ocupan 18La dirección como necesita muchos bits es otra palabra a parte de 32 bits
c)- ST .R4,/2000
El C.O. son 9 bitsR4 y R7 son 5 bits cada unoEl desplazamiento son 13 bits
d)- LD .R4,#4[.R7]
EJERCICIO 8.
Para un computador de dos direcciones con modelo de ejecución registro a registro, palabras y direcciones de 32 bits y direcc ionamiento a byte que dispone únicamente de los siguientes modos de direccionamiento: inmediato, directo a registro e indirecto a registro Realice los programas (conj. De instrucciones) correspondientes para las instrucciones que se muestran a continuación para el computador indicado. Si es nece sario utilice los registros RT1, RT2, y RT3 como registros auxiliares.
ADD /1000,/2000; M(1000)<-- M(1000) + M(2000) Esta operación contendría 3 palabrasa.Esta operación accede 6 veces a memoria.
Leer la segunda palabra de la instrucción(1000)2.Acceder a 1000 y coger ese dato3.Leer la 3 palabra(2000)4.Accede a 2000 y coge el dato5.Guarda la información en 10006.
1. Fetch de lectura
LD .RT1,#1000LD .RT2,#2000LD .RT3,[.RT1]LD .RT2,[.RT2]ADD .RT3,.RT2ST .RT3,[.RT1]
Puede haber varias soluciones válidas:
MOVE .R7,.RT1 Como es direccionamiento a R. Base no se modifican el contenido de los registros
ADD .RT1,#4CALL [.RT1]
Se puede hacer: b. CALL #4[.R7] (Carga el PC con esa dirección)
R7 <-- R7 + 4 (Post incremento por direccionamiento a byte?)Hay 2 direcciones de memoria implicadas: R1 <-- R1 - M(M(R7 + 4))
MOVE .R7,.RT1ADD .RT1,#4LD .RT1,[.RT1] //acceso a memoria para obtener la direccionLD .RT1,[.RT1] // acceso para obtener la operandoSUB .R1,.RT1ADD .R7,#4
c. SUB .R1,[#4[.R7++]] (Hace un Salto?)
PROB1EN un computador con palabras y direcciones de 16 bits, direccionamiento a nivel de palabra, se ejecuta el siguiente fragment o de código en el que el tamaño de cada instruccion se indica como comentario.Considere que a partir de la dirección de memoria #'1008 se encuentran a lmacenados los siguientes datos: #'0001(#'1008) #'0002(#'1009) #'0003(#'100A) #'0004(#'100B) #'000E(#'100C)Indique los valores sucesivos…
LD .R1, #100C ; 2 palabrasLD .R2, #1008; 2 palabrasSUB .R1,[.R2--]DEC .R1ST .R1,#4[++.R2]; 2 palabrasCMP .R1,.R2BNZ $-6MOVE [++.R2],[.R1++]HALT
PROBLEMA 4Suponga un procesador con palabras de 32 bits y acceso a memoria a nivel de byte en el que utiliza e registro r31 como punter o de pila r31=SP, apuntando a éste a la primera posicion LIBRE de la pila, indique razonadamente que hacen las siguientes secuencias de instrucciones sup oniendo que el contenido de ambas se indique en la figura(pag. 2 de 5)
LD .r1,#8[.r31] r1< -- M(r31+8), r1<--20PUSH .r1 M( r31)<--20, r31<--r31-4(para que siga apuntando a la siguiente posicion libre)ADD .r1,#4[.r31] r1< --20+20 = 40ST .r1,#8[.31] M(r31 +8)<-- 40 //almacena en esa dir. De memoria pero no modifica el puntero(ST)_________________ Son códigos independientesLD .r2, #12[.r31] r2< --30SUB .r2, #8[.r31] r2< -- 30 - 20 = 10POP .r1 (saca de la pila el dato de la cima de la pila) r31< --r31+4ADD .r1, #12[.r31] r1< --2
En la posición en que apunta la pila) M(r31)<--PC r31<--r31-4(Vuelve a apuntar a una posicion vacía(Anterior por eso -4))
CALL [.r1] (Guarda en PC la pila, como está vcia lo guarda r1< --2+2000 = 2002
PROBLEMA 11
1000 1004 1008 1012 1016
1 2 3 4 5
Estructura de computadores página 13
El Codigo de Operación ocupa 9 bits(combinacion necesaria para obtener al menos 500 números(instrucciones))
La dirección como necesita muchos bits es otra palabra a parte de 32 bits
Para un computador de dos direcciones con modelo de ejecución registro a registro, palabras y direcciones de 32 bits y direccionamiento a byte que dispone únicamente de los siguientes modos de direccionamiento: inmediato, directo a registro e indirecto a registro Realice los programas (conj. De instrucciones) correspondientes para las instrucciones que se muestran a continuación para el computador indicado. Si es necesario utilice los registros RT1, RT2, y RT3 como registros auxiliares.
ADD /1000,/2000; M(1000)<-- M(1000) + M(2000) Esta operación contendría 3 palabras
Como es direccionamiento a R. Base no se modifican el contenido de los registros
R7 <-- R7 + 4 (Post incremento por direccionamiento a byte?)Hay 2 direcciones de memoria implicadas: R1 < -- R1 - M(M(R7 + 4))
EN un computador con palabras y direcciones de 16 bits, direccionamiento a nivel de palabra, se ejecuta el siguiente fragmento de código en el que el tamaño de cada instruccion se indica como comentario.Considere que a partir de la dirección de memoria #'1008 se encuentran almacenados los siguientes datos: #'0001(#'1008) #'0002(#'1009) #'0003(#'100A) #'0004(#'100B) #'000E(#'100C)
Suponga un procesador con palabras de 32 bits y acceso a memoria a nivel de byte en el que utiliza e registro r31 como puntero de pila r31=SP, apuntando a éste a la primera posicion LIBRE de la pila, indique razonadamente que hacen las siguientes secuencias de instrucciones suponiendo que el contenido de ambas se indique en la figura(pag. 2 de 5)
LD .r1,#8[.r31] r1< -- M(r31+8), r1<--20PUSH .r1 M( r31)<--20, r31<--r31-4(para que siga apuntando a la siguiente posicion libre)ADD .r1,#4[.r31] r1< --20+20 = 40ST .r1,#8[.31] M(r31 +8)<-- 40 //almacena en esa dir. De memoria pero no modifica el puntero(ST)
LD .r2, #12[.r31] r2< --30SUB .r2, #8[.r31] r2< -- 30 - 20 = 10POP .r1 (saca de la pila el dato de la cima de la pila) r31<--r31+4ADD .r1, #12[.r31] r1< --2
En la posición en que apunta la pila) M(r31)<--PC r31<--r31-4(Vuelve a apuntar a una posicion vacía(Anterior por eso -4))
CALL [.r1] (Guarda en PC la pila, como está vcia lo guarda r1<--2+2000 = 2002
1016 PC SP Z R1 R2 R3 5000 4996 4992 4988
5 0 5000 1 0 1000 5 1000 5 0 32
4 4996
8 4992
12 4988
16 4984
20
24
28
32
500
Estructura de computadores página 14
Es lo que hace el programa de la pág. 53
N(numero de datos)RESULT(resultado, devuelve -1 en algun caso)OVF-SI =1 r30=1 Si =0 r30=0
Variables: SUMDOS(datos)
-Cargar direcciones e inicializar registros.-Bucle-Almacenar resultados-OVF
Estructura del Programa:
Or ra,ro,low(eti) Or.u ra, ra, lenght(eti)
ENDMACRO
LEA: MACRO(ra, eti)Sub ra, ra, 1Cmp r4, ra, 0Bbo 2, r4, eti
ENDMACRO
DBNZ: MACRO(ra,eti)
LEA(r20,N); r20<--N (direccion de memoria que contiene el numero de datos)LEA(r21,SUMDOS); r21<--SUMDOS(direccion de los datos)LEA(r22,result); r22<--RESULT(direccion del resultado)Ld r5,r20,r0; r5<--M(r20) r5 contiene el número de datosXor r10,r10,r10 ; r10<--0;Comienzo del bucle
Ld r11, r21, r0; r11<--M(r21)Add r21,r21,4; incrementar puntero a datosAddu.co r10, r10, r11; sumo dato (genera acarreo de salida para saber si hay desbordamiento o no)Ldcr r4; r4<-- PSR (registro de estado)Bb1 28, r4, Overflow; si hay acarreo se salta, si no(sig) ---se ve si el bit 28 es uno, si es así se crea desbordamientoDBNZ(r5,bucle)
St r10, r22, r0; M(r22)<-- r10Add r30, r0, 0; r30<--0Br finalOverflow:add r30, r0 <-- -1Final: stop
Programa.
Org 0
Estructura de computadores página 23
LEA carga la dirección y ld el contenido de ésta
Org 0; poner a 0 el vector resultadoLOAD (r2, COLUMNAS); r2<--NLEA(r3, VSUMA); r3<--VSUMAAdd r1, r0, 0; r1<--0(para hacer limpieza en doble precisión, necesitamos dos registros a 0, el r0(que está siempre a 0) y r1)St.d r0,r3,0Add r3, r3, 8DBNZ (r2, poner_cero); inicializar contadores y punterosLEA (r2, MATRIZ); r2<--MATRIZLOAD(r7,FILAS); r7<--M
LOAD (r8, COLUMNAS); r8<--NBucle-fila: LEA(r3,VSUMA); r3<--VSUMA
;hacer sumas y almacenad
; primero la parte baja ld r10, r3, 0; r10<--M(r3) addu.co r10, r10, r11 st r10, r3, 0; M(r3)z--r10;y luego la parte alta ld r10, r3, 4; r10<--M(r3+4) addu.ci r10, r10, r0 st r10, r3, 4; M(r3+4)<-- r10
Bucle-Columna: ld r11, r2, 0; r11<--elemento
;incremento punteros y decremento contadoresadd r2, r2, 4add r3, r3, 8DBNZ(r8,bucle-columna)DBNZ(r7, bucle-fila)stop
Org 0Or r20, r0, low(NOMBRE)Or.u r20, r20, high(NOMBRE); r20<-- NOMBREOr r21, r0, low(LONG)Or.u r21, r21, high(LONG); r21<--LONGOr r22, r0,low(NUEVO)Or.u r22. r22, high(NUEVO); r22<-- NUEVOLd r5, r22, r0Ld r6, r21, r0
bb1 2, r3, insertar ld r4, r20, r0 cmp r3, r4, r5 bb1 2, r3, final add r20, r20, 4 sub r6, r6, 1 br buscar
Buscar: cmp r3, r6, 0
Insertar: st r5, r20, 0
add r6, r6, 1 st r6, r21, r0
ld r6, r21, r0
Final: stop
Estructura de computadores página 25
FP - Marco de pila: puntero que apunta a la dirección de retorno de la subrutina; o sea4 cuando se acaba de ejecutar la subrutina lo que hace es volver a la ejecución del programa principal justo donde lo había dejado.
Restaurar puntero de pila(r30)-
Recuperar FP antiguo(r31)-
" " direccion de retorno-
Retorno subrutina-
Destruccion del marco de pila y retorno de la subrutina.
Almacenar dir. De retonro(que está en r1)-
Guardar FP antiguo(" " r31)-
Establecer el nuevo valor de FP(de r31)○
Recuperar espacio en pila para las variables locales○
Inicializar variables locales○
Crear marco de pila-
Codigo de la subrutina-
Activacion de la subrutina y creacion del marco de pila
Los parámetros en la pila se borran igual que en los compiladores.
Estructura de computadores página 31
top related