/* -------------------------------------------------- Define required labels for EGTAPI -------------------------------------------------- */ .global main, Stop, CodeEnd .global DataStart, DataEnd .global x, y /* -------------------------------------------------- Begin of the program instructions -------------------------------------------------- */ .text main: // short x contains 254 = 0000000011111110 movw r0, #:lower16:x // Moves the address of memory movt r0, #:upper16:x // variable x into register r0 // Move short x into r1 using ldrsh (correct !) ldrsh r1,[r0] // r1 = 254, correct // Move short x into r2 using ldrsb (gets a wrong value !) ldrsb r2,[r0] // r2 = -2, WRONG VALUE !! // Can you explain why r2 contains -2 ? // Move short x into r3 using ldr (gets a wrong value !) ldr r3,[r0] // r2 = 65790 = 2^16 + 254, WRONG VALUE !! // Can you explain why r2 contains 2^16 + 254 ? Stop: CodeEnd: nop /* -------------------------------------------------- Begin of the permanent program variables -------------------------------------------------- */ .data DataStart: x: .2byte 254 // short typed variable y: .2byte 1 // short typed variable DataEnd: .end