These are my notes for where I can see PPC varying from ia32, as presented in the video Part 4 — Hello World. Let me know if I’ve missed something important, obvious or got something wrong.
http://www.ibm.com/developerworks/library/l-ppc/ gives a good starting overview of PPC asm, including syscalls. The syscall number goes into gpr0 and the args in gpr3 and following, so JustExit.s becomes:
.text .globl _start _start: li 0,1 # load 1 into reg 0 li 3,0 # load 0 into reg 3 sc # system call
Simple enough.
Modifying the provided HelloWorldProgram.s example (and using the example from the above link) yields
.data HelloWorldString: .ascii "Hello World\n" .text .globl _start _start: # Load all the arguments for write () li 0, 4 # syscall number of 4 (write) li 3, 1 # filenumber 1 (stdout) lis 4, HelloWorldString@ha # load upper 16 bits of addr addi 4, 4, HelloWorldString@l # add lower 16 bits of addr li 5, 12 # length of string sc # exit the program li 0,1 li 3,0 sc
There’s some subtlety in the @ha and @l high and low parts of addresses that I don’t yet have my head around fully, but I’ll be coming back to this in a later part.
Previous assembly primer notes…
Part 1 — System Organization — PPC — SPU
Part 2 — Memory Organisation — SPU
Part 3 — GDB Usage Primer — PPC & SPU
Cool, low/high part was interesting (by comparison to what I am familiar with), otherwise all looks familiar. What, no variable length null terminated string? :o
Not yet :)