Assemblerprogrammering
8.1 Följande figur illustrerar några fragment minne hos en FLISP-dator. I minnet finns en ”branch”-instruktion samt dess mål indikerade. Bestäm instruktionens operand, dvs. det värde som finns lagrat på adress 5A.

OPERAND = Adress – (PC+2) = 81 – (59+2) = 26
(Alla adressvärden på hexadecimal form)
8.2 Följande figur illustrerar några fragment minne hos en FLISP -dator. I minnet finns en ”branch”-instruktion samt dess mål indikerade. Bestäm instruktionens operand, dvs. det värde som finns lagrat på adress 63.

OPERAND = Adress – (PC+2) = 10 – (62+2) = AC
(Alla adressvärden på hexadecimal form)
8.3 För vilka värden på U utförs hoppet nedan? Betrakta U som ett tal [0,255].
LDA #$85
CMPA #U
B(Villkor) Hopp
om den villkorliga instruktionen är
a) BHI e) BGT
b) BHS f) BGE
c) BLS g) BLE
d) BLO h) BLT
8.4 Översätt följande sekvens av assemblerdirektiv för FLIS-assemblatorn till maskinkod (assemblera programmet). Komplettera figuren så att det klart framgår hur maskinkod och assemblerkod hör ihop och vilka minnesadresser maskinkoden är placerad på.
8.5 Översätt följande assemblerprogram för FLISP till maskinkod (assemblera programmet). Komplettera figuren så att det klart framgår hur maskinkod och assemblerkod hör ihop och vilka minnesadresser maskinkoden är placerad på.
8.6 Översätt följande assemblerprogram för FLISP till maskinkod (assemblera programmet). Komplettera figuren så att det klart framgår hur maskinkod och assemblerkod hör ihop och vilka minnesadresser maskinkoden är placerad på.
8.7 Ur en FLISP-dators minne avläser vi följande minnesinnehåll (hexadecimalt):
90,48,91,94,F5,24,03,EB,21,FA,21,FE
Utgå i från att ett program är lagrat här med början på adress 20
16. Identifiera instruktionssekvensen, dvs. disassemblera minnesinnehållet.
20: LDX #start
22: LDY #dest
24: L1: LDA ,X+
25: BEQ L2
27: STA ,Y+
28: BRA L1
2A: L2: BRA L2
8.8 Ur en FLISP-dators minne avläser vi följande minnesinnehåll (hexadecimalt):
F1,7A,06,0E,A6,C4,A5,C5,24,02,F0,01,21,FE
Utgå i från att ett program är lagrat här med början på adress 20
16. Identifiera instruktionssekvensen, dvs. disassemblera minnesinnehållet.
20: LDA $7A
22: NEGA
23: RORA
24: ADDA $C4
26: ADCA $C5
28: BEQ L2
2A: LDA #1
2C: L2: BRA L2
8.9 En 8-bitars strömbrytare, ”DIP_SWITCH” är ansluten till adress FB
16 och en displayenhet ”HEXDISPLAY” som visar en byte i form av två hexadecimala siffror är ansluten till adress FC
16 i en FLISP dator.
Konstruera en subrutin
DipHex
som läser av strömbrytaren och indikerar den minst signifikanta påslagna biten genom att skriva dess position, räknat från höger, till displayenheten. Om exempelvis bitarna 2 och 4 utgör ettställda strömbrytare ska positionen för bit 2, (dvs. 3) skrivas till displayenheten.
Om ingen strömbrytare är ettställd ska siffran 0 skrivas till displayen.
Speciellt gäller att symboler ska definieras och användas för absoluta adresser.
; Symboliska adresser
DipSwitch: EQU $FB
HexDisp: EQU $FC
; Subrutin DipHex
DipHex: LDA DipSwitch
LDX #0
DipHex10: TSTA
BEQ DipHex20
LEAX 1,X
LSRA
BCC DipHex10
DipHex20: STX HexDisp
RTS
8.10 Två strömbrytare är anslutna till inportar med adresser FB
16 och FC
16 i en FLISP-dator. Dessutom är en ljusdiodramp ansluten till en utport med adress FB
16.
Konstruera en subrutin
DipSwitchOr
som bildar logisk ELLER av värdena som läses från strömbrytarna.
Subrutinen ska utformas så att avläsningen och indikering görs en gång. Kontinuerlig funktion fås genom att subrutinen, oupphörligt anropas från ett huvudprogram "main". Speciellt gäller att symboler ska definieras och användas för absoluta adresser.
DipSwitch1: EQU $FB
DipSwitch2: EQU $FC
LedDisplay: EQU $FB
main: JSR DipSwitchOr
BRA main
DipSwitchOr:
LDA DipSwitch1
ORA DipSwitch2
STA LedDisplay
RTS