I need scan codes for arrows (right,left,down,up). I am making software in Assembler and I need to know the hex values for the scan codes of the keyboard arrows.
-
2Do you need scan codes for the keyboard arrow keys, or ASCII codes for arrow characters? Those are different numbers. The latter might be codepage dependent. – Seva Alekseyev Apr 20 '14 at 23:09
-
2codes for the keyboard arrow keys – Marko Stojkovic Apr 20 '14 at 23:11
-
3No such thing as just "code". Do you want to detect arrow key presses or display arrows on screen? – Seva Alekseyev Apr 20 '14 at 23:14
-
2to detect arrow key presses – Marko Stojkovic Apr 20 '14 at 23:23
-
2Scan codes, then. See my answer. – Seva Alekseyev Apr 20 '14 at 23:35
-
@TechNomad This is the first time I hear about ascii codes for arrows. Could you show me how these characters look like? The author of the post clearly meant scan codes as was clarified in the comments back in 2014. I edited it because I thought the question should be reopened. – Dharman Jun 18 '20 at 18:24
3 Answers
Those are the character codes for arrow characters in the lower portion of the ASCII codepage:
- Up: 0x18
- Down: 0x19
- Right: 0x1A
- Left: 0x1B
There are also arrow characters in Unicode.
And the scan codes for the arrow keys are:
- Up: 0x48
- Left: 0x4B
- Right: 0x4D
- Down: 0x50
Notice the different order.
The scan codes are returned, for example, from the BIOS interrupt 16h. In general, scan codes don't correspond to ASCII characters, because some keys legitimately don't represent a character - like Shift, or Caps Lock, or the arrow keys. Those don't produce a character in the input stream, but they do have scan codes, and programs are capable of retrieving those.
Even the alphanumeric keys that do correspond to characters may represent different characters at different time, depending on Shift and on the chosen keyboard layout.
Whatever Linux thinks, neither the keyboard nor the screen are byte streams.

- 59,826
- 25
- 160
- 281
Great can obtain scan codes in linux with:
sudo showkey -s
- Up: 0x48 (pressing) 0xc8 (release)
- Down: 0x50 (press) 0xd0 (release)
- Left: 0x4b (press) 0xcb (release)
- Right: 0x4d (press) 0xcd (release)

- 21
- 3