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 :)