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 2016. 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 2016. 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 FB16 och en displayenhet ”HEXDISPLAY” som visar en byte i form av två hexadecimala siffror är ansluten till adress FC16 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 FB16 och FC16 i en FLISP-dator. Dessutom är en ljusdiodramp ansluten till en utport med adress FB16. 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