Published on Saturday 24 April, 2021

Hello World

Hello World 1

Dit kort assembly programma toont de string “Hello World!”.

Hieronder vind je de assembly code voor het “Hello World 1” programma

        ld hl, MESG
loop:   ld a, (hl)
        cp 0x00
        jr z, end
        call 0x00A2     :'CHPUT BIOS CALL
        inc hl
        jr loop
end:    ret

MESG: DEFM "Hello World!"

Dit is het complete MSX-BASIC programma

10 REM Hello World
 20 REM
 30 REM by Gwen De Brul
 40 REM
 50 SCREEN 0
 60 ST=&HC000
 70 L=&H1B
 80 FOR I=0 TO L
 90 READ A$
 110 POKE ST+I,VAL("&H"+A$)
 120 NEXT I
 130 DEF USR=&HC000
 140 X=USR0(0)
 150 data 21,0F,C0
 160 data 7E         
 170 data FE,00      
 180 data 28,06      
 190 data CD,A2,00   
 200 data 23         
 210 data 18,F5      
 220 data C9
 250 data 48,65,6c,6c,6f,20,57,6f,72,6c
 260 data 64,21,00

Uitleg

De regels 10 t/m 140 ga ik hier niet meer behandelen, meer uitleg hierover vind je op MSX Experiment 1.

We beginnen op regel 150. Hier wordt het adres van de string met label “MESG” geladen in het HL register.

Op regel 160 wordt de waarde van het HL register dat je net hebt gezet in het A register geladen. Op dit moment wijst het HL register naar het eerste karakter van de string met label “MESG”.

Regel 170 vergelijkt de waarde in het A register met 0 (het einde van de string). Indien de waarde van 0 verschilt wordt regel 190 aangeroepen. Indien de vergelijking positief is dus als het einde van de string is bereikt springt het programma naar regel 220, het einde van het programma.

Regel 180 is de jump als de waarde in het A register 0 is wordt de Z flag gezet en springt dan naar het label “end”, wat hier het einde van het programma is.

Op regel 190 staat een functie aanroep, dit is het adres 00A2H in het BIOS wat een karakter dat in het A register staat toont op het scherm. Deze regel wordt enkel aangeroepen als het einde van de string nog niet bereikt is.

Meer info over BIOS aanroepen vind je op MSX Bios Calls

Regel 200 verhoogt het adres in het HL register met 1 (het volgende karakter). Deze regel wordt ook enkel aangeroepen als het einde van de string nog niet bereikt is.

De voorlaatste regel 210 maakt een relatieve jump terug naar het label “loop” op regel 160. Deze regel wordt ook enkel aangeroepen als het einde van de string nog niet bereikt is.

En als laatste regel 220. Dit geeft de instructie om terug te gaan naar MSX-BASIC en zo het programma beeindigt.

Slot

Met 15 bytes (exclusief de string) is het mogelijk om een “Hello World!” programma te maken in assembly. Momenteel toont dit programma “Hello World!” op de volgende regel na aanroep van het programma en aan het begin van de lijn.

Het volgende “Hello World!” programma gaat de tekst centreren in het midden van het scherm.