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