;* ------------------------------------------------------------------ ;* -- _____ ______ _____ - ;* -- |_ _| | ____|/ ____| - ;* -- | | _ __ | |__ | (___ Institute of Embedded Systems - ;* -- | | | '_ \| __| \___ \ Zurich University of - ;* -- _| |_| | | | |____ ____) | Applied Sciences - ;* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - ;* ------------------------------------------------------------------ ;* -- ;* -- Project : CT1 - Lab 7 ;* -- Description : Control structures ;* -- ;* -- $Id: main.s 3748 2016-10-31 13:26:44Z kesr $ ;* ------------------------------------------------------------------ ; ------------------------------------------------------------------- ; -- Constants ; ------------------------------------------------------------------- AREA myCode, CODE, READONLY THUMB ADDR_LED_15_0 EQU 0x60000100 ADDR_LED_31_16 EQU 0x60000102 ADDR_7_SEG_BIN_DS1_0 EQU 0x60000114 ADDR_DIP_SWITCH_15_0 EQU 0x60000200 ADDR_HEX_SWITCH EQU 0x60000211 NR_CASES EQU 0xB jump_table ; ordered table containing the labels of all cases ; STUDENTS: To be programmed ; END: To be programmed ; ------------------------------------------------------------------- ; -- Main ; ------------------------------------------------------------------- main PROC EXPORT main read_dipsw ; Read operands into R0 and R1 and display on LEDs ; STUDENTS: To be programmed LDR R0, =ADDR_DIP_SWITCH_15_0 LDRH R0, [R0] ; Load Values of DIP Switches 15-0 in R0 LDR R2, =ADDR_LED_15_0 STRH R0, [R2] ; Display R0 on LEDs 15-0 MOVS R1, R0 ; Coppy Bits to R1 LSRS R0, R0, #8 ; Shift Bits in R0 right to only have DIP SWITCH 15-8 LDR R2, =0xff ; Bitmask to get only lower Byte ANDS R1, R1, R2 ; Only keep lower Byte in R1 LDR R2, =ADDR_LED_15_0 STRH R0, [R2] ; END: To be programmed read_hexsw ; Read operation into R2 and display on 7seg. ; STUDENTS: To be programmed LDR R2, =ADDR_HEX_SWITCH LDRB R2, [R2] LDR R3, =ADDR_7_SEG_BIN_DS1_0 STRB R2, [R3] ; END: To be programmed case_switch ; Implement switch statement as shown on lecture slide ; STUDENTS: To be programmed LDR R3, =0x0a CMP R2, R3 BHI case_bright LDR R3, =jump_table ; Get Address of Jumptable LDRB R3, [R3, R2] ; Load Label Address from J BX R3 ; GOTO Speified label ; END: To be programmed ; Add the code for the individual cases below ; - operand 1 in R0 ; - operand 2 in R1 ; - result in R0 case_dark LDR R0, =0 B display_result case_add ADDS R0, R0, R1 B display_result ; STUDENTS: To be programmed case_bright LDR R0, =0xFFFF B display_result case_sub SUBS R0, R0, R1 B display_result case_mult MULS R0, R1, R0 B display_result case_and ANDS R0, R0, R1 B display_result case_or ORRS R0, R0, R1 B display_result case_xor EORS R0, R0, R1 B display_result case_not MVNS R0, R0 B display_result case_nand ANDS R0, R0, R1 MVNS R0, R0 B display_result case_nor ORRS R0, R0, R1 MVNS R0, R0 B display_result case_xnor EORS R0, R0, R1 MVNS R0, R0 B display_result ; END: To be programmed display_result ; Display result on LEDs ; STUDENTS: To be programmed ; END: To be programmed B read_dipsw ALIGN ENDP ; ------------------------------------------------------------------- ; -- End of file ; ------------------------------------------------------------------- END