Simple ASM Codes - by Romaap

OK, i'm a bit bored so i'll try to show you guys how to make some simple ASM codes.

Introduction to ASM
First you need to know, what is assembly?
Well, assembly is a low-level programming language. (languages like C and Java are high-level programming languages)
An example of an assembly instruction:
li  rA, value
What this does is, it tells the Wii to load value to rA. (li means 'Load immediate')

But what is rA?
rA is a register, the Wii has 31 registers.
A register is sort of a temporary space to store values, like RAM but the registers are easier to access by the CPU.

So if we have li r16, 0x14  then the Wii will write 0x14 to r16.
Another example is 'Add immidiate':
addi rD, rA, value
What this does is add value to the value at rA and store it in rD.
So if we have addi r16, r20, 0x3 and the value of r20 is 0x2 then 0x5 is stored to r16.
(This is the same as 'Subtract immediate': subi rD, rA, value)
rD is in most examples the destination register, the destination register is almost always the first register.
The other registers are not altered (in this example r20 stays 0x2).

Another example is 'Subtract':
sub rD, rA, rB
This one subtracts the value in rB from rA and store it in rD (and again, only rD is altered).
So if we have sub r16, r20, r21  and the value of r20 is 0x9 and r21 is 0x3 then 0x6 will be stored to r16.
(This is the same as 'Add': add rD, rA, rB)

The last example is 'Store word', which will store the value in a register to the RAM:
stw rS, d(rA)
This will store the value in rS to the address in rA + d.
So if we have stw r20, 100(r0)  and the value of r20 is 0xA and r0 is 0x80605040 then 0xA will be stored to 0x806050A4 (0x80605040 + 100 (0x64))
If you want to load a value from an address then you use 'Load word and Zero':
lwz rD, d(rA) which works like stw but the opposite, the value from the address in rA + d will be stored to rD.

This concludes the introduction to ASM, I hope you understand it Smiley

First you'll need the address of the thing you want to hack, like health. (If you dont know this basic stuff I recommend you to read/watch some other tutorials first)
I use Klonoa for example in this tutorial.

Health hack (using nop)
So, if you found the address of the health you right click it and press ->Breakpoint.

Go to the breakpoint tab and click the write button and click Set Breakpoint.

Now get hit in the game, the game will freeze.

WiiRd will show some numbers, the numbers in the top box are the registers.
The 2nd box shows the ASM instructions that were about to be executed.

Now go to the disassembler tab and you will see something that looks like the second box in the breakpoint tab.

In this tab you can edit the ASM instructions.
Now i'll introduce another ASM instruction: nop, wich does... nothing Cheesy
So... we have an ASM instruction that writes the health to the health address, and we know how to change instructions... and we know an instruction that does nothing...
Lets replace some instructions Cheesy
Click on the box wich has the stw intruction and replace it with nop, and click update.
Now click run and try to get hit in the game Cheesy Cheesy Cheesy no damage
So, now to make it a code: right click on the instruction and click ->gct codes

Add a new code and replace the first 80 with 04 click add code.

Simple ASM RAM Writes

Money is worth twice its value

Please give some feedback Cheesy
If you dont understand something, or have something to add please tell me Cheesy