Assembly learning (39)

23 Name: #!/usr/bin/anonymous : 2006-02-28 19:56 ID:393L4sIP

Ah yeah, I've got a buddy I talk to online who's always telling me how great 68k assembly is. He sent me a C program once that was converted from 68k assembly. I bet he won't mind if I post it here:

/* 13371z3r written in "68000" */


#include <stdio.h>

char d0b;
char*a0b;
long d0l;
long*a0l;
long*a7l;
char status;
unsigned char mainmemory[1024]="leet TESTING string";

main()
{
a7l=1024+mainmemory; // movea.l #1024,a7
a0b=a0l=mainmemory; // move.l #mainmemory,a0
*(--a7l)=a0b=a0l; // movea.l a0,-(a7)

loop: status=d0b=*a0b; // loop: move.b (a0),d0
if(!status)goto finished; // beq finished

status=d0b-='A'; // subi.b #'A',d0b
if(status<0)goto quit2; // bmi quit2
status=d0b-=26; // subi.b #26,d0b
if(!(status<0))goto quit1; // bpl quit1
d0b+=('z'+1); // addi.b #'z'+1,d0b
goto go; // bra go

quit1: d0b+=27; // quit1: addi.b #27,d0b
quit2: d0b+='A'; // quit2: addi.b #'A',d0b
go: // go:


status=d0b-'t'; // cmpi.b #'t',d0
if(status)goto l2; // bne l2
*(a0b++)='7'; // move.b #'7',(a0)+
goto loop; // bra loop

l2: status=d0b-'l'; // l2 cmpi.b #'e',d0
if(status)goto l3; // bne l3
*(a0b++)='1'; // move.b #'3',(a0)+
goto loop; // bra loop

l3: status=d0b-'a'; // l3 cmpi.b #'e',d0
if(status)goto l4; // bne l4
*(a0b++)='4'; // move.b #'3',(a0)+
goto loop; // bra loop

l4: status=d0b-'b'; // l4 cmpi.b #'e',d0
if(status)goto l5; // bne l5
*(a0b++)='8'; // move.b #'3',(a0)+
goto loop; // bra loop

l5: status=d0b-'g'; // l5 cmpi.b #'e',d0
if(status)goto l6; // bne l6
*(a0b++)='6'; // move.b #'3',(a0)+
goto loop; // bra loop

l6: status=d0b-'j'; // l6 cmpi.b #'e',d0
if(status)goto l7; // bne l7
*(a0b++)='9'; // move.b #'3',(a0)+
goto loop; // bra loop

l7: status=d0b-'o'; // l7 cmpi.b #'e',d0
if(status)goto l8; // bne l8
*(a0b++)='0'; // move.b #'3',(a0)+
goto loop; // bra loop

l8: status=d0b-'s'; // l8 cmpi.b #'e',d0
if(status)goto l9; // bne l9
*(a0b++)='5'; // move.b #'3',(a0)+
goto loop; // bra loop

l9: status=d0b-'e'; // l9 cmpi.b #'e',d0
if(status)goto end; // bne end
*(a0b++)='3'; // move.b #'3',(a0)+
goto loop; // bra loop

end: // end:
a0b++; // addq.l #1,a0
goto loop; // bra loop
finished: d0l=0; // finished: moveq #0,d0
*(a0b++)=d0l; // move.b d0,(a0)+
*(a0b++)=d0l; // move.b d0,(a0)+
*(a0b++)=d0l; // move.b d0,(a0)+
*(a0b++)=d0l; // move.b d0,(a0)+
*(a0b++)=d0l; // move.b d0,(a0)+
*(a0b++)=d0l; // move.b d0,(a0)+
*(a0b++)=d0l; // move.b d0,(a0)+
*(a0b++)=d0l; // move.b d0,(a0)+
printstring(); // jsr printstring
return; // rts
}

printstring()
{
a0l=*(a7l++); // movea.l (a7)+,a0
// loop2: move.l (a0)+,(a1)
loop2: status=*a0l;fwrite(a0l++,4,1,stdout);
if(status)goto loop2; // bne loop2
return; // rts
}
Name: Link:
Leave these fields empty (spam trap):
More options...
Verification: