B. Gonzalez Kriegel - N. Wolovick
Y: ld [k], %r1 addcc %r1, -4, %r1 st %r1, [k] bneg X ld [a], %r1, %r2 ld [b], %r1, %r3 addcc %r2, %r3, %r4 st %r4, %r1, [c] ba Y X: jmpl %r15 + 4, %r0 k: 40 |
x .equ 4000 .org 2048 ba main .org 2072 main: sethi x, %r2 srl %r2, 10, %r2 lab_4: st %r2, [k] addcc %r1, -1, %r1 foo: st %r1, [k] andcc %r1, %r1, %r0 be lab_5 jmpl %r15 + 4, %r0 cons: .dwb 3 |
k .equ 1024 addcc %r4, k, %r4 ld %r14, %r5 addcc %r14, -1, %r14 st %r5, [x] |
10000010 10000000 01100000 00000001 10000000 10010001 01000000 00000110 00000010 10000000 00000000 00000011 10001101 00110001 10100000 00001010 00010000 10111111 11111111 11111100 10000001 11000011 11100000 00000100 |
Los 3 primeros bits de la instrucción define el opcode y la siguiente tabla resume los 8 posibles códigos de operación4:
|
|
|
.begin .macro push arg1 addcc %r14, -4, %r14 st arg1, %r14 .endmacro .macro pop arg1 ld %r14, arg1 addcc %r14, 4, %r14 .endmacro |
A manera de ejemplo, la siguiente secuencia de instrucciones evalúa la expresión :
PUSH B PUSH C MULT PUSH A ADD |
for (i=0; i!=l; i++) A[i]=B[i]+C; |
.begin A .equ 1024 !direccion base del arreglo A B .equ 1424 !direccion base del arreglo B C .equ 1824 !escalar C i .equ 1828 !escalar i l .equ 1832 !escalar l |
do x>y x:=x-y y>x y:=y-x od |
Se busca que funcione el siguiente programa que hace uso de la rutina mcd e indica si dos
números almacenados en las posiciones de memoria e resultan coprimos7.
!%sp .equ %r14 esta implicitamente definido |
Invente sus propios mnemónicos de lenguaje ensamblador y escriba el mejor código
ensamblador equivalente para el siguente fragmento de lenguaje de alto nivel.
Escriba las cuatro secuencias de código para:
A = B + C; B = A + C; D = A - B; |