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
Mnemónico | Opcode | Significado |
LOAD | 000 | Dst Src o memoria |
STORE | 001 | Dst o memoria Src |
ADD | 010 | Dst Src + Dst |
AND | 011 | Dst AND(Src,Dst) |
BZERO | 100 | Salta si Src=0 |
JUMP | 101 | Salto incondicional |
COMP | 110 | Dst complemento de Src |
RSHIFT | 111 | Dst Src desplazado a la izq. 1 bit |
|
|
!los argumentos a, b y c estan listos en la pila
x: call foo
z: ld %r1, %r2
foo: !aqui empieza la subrutina
y: jmpl %r15 + 4, %r0
PUSH B
PUSH C
MULT
PUSH A
ADD
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
.begin
.macro push arg1
addcc %r14, -4, %r14
st arg1, %r14
.endmacro
.macro pop arg1
ld %r14, arg1
addcc %r14, 4, %r14
.endmacro
! Comienzo del programa
.org 2048
pop %r1
push %r2
.end
do
x>y x:=x-y
y>x y:=y-x
od
!%sp .equ %r14 esta implicitamente definido
.begin
.org 2048
ld [x], %r1
ld [y], %r2
addcc %sp, -4, %sp
st %r1, %sp !push del 1er argumento
addcc %sp, -4, %sp
st %r2, %sp !push del 2do argumento
call mcd
ld %sp, %r3
addcc %sp, 4, %sp !pop del resultado
addcc %r3, -1, %r0 !%r3=1?
be isCoprime
sethi 0, %r3
ba cont
isCoprime: sethi 0,%r3
add %r3, 1, %r3 !el ser coprimo lo indico con %r3=1
cont: !aqui continua el codigo
mcd:
!Bloque de entrada
!Codigo del ejercicio anterior
!Bloque de salida
x: 231
y: 22
.end