RPI assembler tutorial #2

Een cpu is in eigenlijk een heel krachtig rekentoestel. Deze bewerkingen kunnen enkel uitgevoerd worden met data opgeslagen in kleine opslagplaatsen genaamd registers. De RPI ARM cpu heeft 16 integer (gehele) registers, en 32 floating point (kommagetallen) registers. Een cpu gebruikt deze register om integer en floating-point bewerkingen uit te voeren. Floating point registers zal ik later op terug komen.

De 16 integer registers in ARM hebben de namen r0 tot R15. Deze kunnen 32 bits data houden. Deze kunnen in principe ook andere data bevatten (met een andere encoding) maar we zullen er hier van uit gaan dat er integers in zitten.

Niet alle registers van r0 tot r15 zijn dezelfde, sommige hebben speciale functies (zoals r0 die de error code bevat op het einde). Hier zullen we er van uitgaan dat dit niet uit maakt.

Basisbewerkingen

Bijna elke cpu kan basisbewerkingen doen met integerregisters. Net als ARM cpu’s. Zo kan je 2 register aan elkaar toevoegen (ADD). Laat ons hier het voorbeeld uit deel 1 uit halen. Als we het een beetje aanpassen ziet het er zo uit:

/* -- sum01.s */
.global main
 
main:
    mov r1, #3      /* r1 ← 3 */
    mov r2, #4      /* r2 ← 4 */
    add r0, r1, r2  /* r0 ← r1 + r2 */
    bx lr

In r1 zetten we 3 en in r2 zetten we 4. Deze tellen we op en zetten we in r0. Als we dit compilen (zie deel 1) en uitvoeren (ook, zie deel 1) dan zullen we 7 terugkrijgen zoals verwacht (want 3(r1)+4(r2)=7)

Dit was alles voor deel 2. (andere delen)