Where is -32768 coming from?

2019-01-29 04:55发布

问题:

This is LC3 Assembly code I am working with

.ORIG x3000
LOOP LDI R0, KBSR 
BRzp LOOP

From LC3 Assembly, I know that LDI is a load indirect addressing mode, meaning it read in an address stored at an location and then read the value at that location

From Lc3 Keyboard, I know that KBSR is the keyboard status register, which is one when keyboard has received a new character.

Here is my test run in Lc3 simulator? I entered the character 'a'

After executing LDI R0, KBSR, register 0 stores a value of -32768.

Does anyone know, based off my definitions for ldi and KBSR where this number is coming from? I was expecting something like 1 to be stored because the keyboard has received a new character.

回答1:

In KBSR (keyboard status register) bit 15 is set when a key is read, so you get 0b1000_0000_0000_0000 (or 0x8000) ... which - interpreted as a 2's complemented negative number - happens to be -32768 decimal.