Each of these groups represents a different number to the processor. In a set of machine code, each group represents a different command for the processor to carry out. In asm language coding, you have to learn how to think like the computer. You have to be able to use binary and decimal number bases along with hexadecimal, so you must learn the concept of changing between these number bases.
45 = %00101101 = $2d = %00101101 = 45
While you're browsing through, try using a
Converter to test what
you're reading. If you experiment as you go along, you'll learn the
concepts better.
Computers don't use numbers in the form of 2, 3, 9, 134, or 6
to do their math. Instead, they use groups of Let's work with the following number:
A Decimal
Decimal numbers are a base ten. It's base ten
because there are ten different symbols used: 0,1,2,3...9
. We
use decimal for almost everything, so I'm not going to
explain how to write a number in that form.
Binary
You probably have heard of binary numbers before, meaning
numbers represented by a series of ones and zeros:
3=%00000011
1
's
and 0
's.
%00010101 %01110100 %01101110 %01101111
Binary is just a group of eight ones and zeros with a
base two. It's base two because there are only two symbols
used: 0
and 1
. If you have a binary
number, you have to look at the whole thing starting from
the right side. Binary numbers are shown with a %
before
them or a b
; after
the number. I will reference them with a %
; in the
rest of this document. A number without any symbol before or
after it means that it is in decimal form.
%00100011 = 35
1
in a certain spot symbolizes a certain value. A
0
means no "no value here". The following chart shows how much a
one is worth in each spot:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Here's some binary and decimal equivalents starting at zero and working our way up a little.
0=%00000000 |
1=%00000001 |
2=%00000010 |
3=%00000011 |
4=%00000100 |
5=%00000101 |
6=%00000110 |
7=%00000111 |
8=%00001000 |
9=%00001001 |
10=%00001010 |
So with the number %00100011
you have a one in the
bit 0 place, so we add 1
to the total, which is zero
since we just started. We have another one in the bit 1 place, so we add
2
to the total bringing the total to 3
.
The next three bit places (bits 2 through bit 4) all have 0
's
in them so we skip them. Our last 1
is in the bit 5 place
which is worth 32
, so we add 32
to the total
so far and we have 35
. So, %00100011 = 35
.
The maximum value a byte can have is 255
.
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | ||
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
12 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | %00001100 |
44 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | %00101100 |
75 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | %01001011 |
00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | %00000000 |
128 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | %10000000 |
255 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | %11111111 |
3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | %00000011 |
4 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | %00000100 |
58 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | %00111010 |
69 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | %01000101 |
200 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | %11001000 |
Binary numbers can be grouped in different combinations. You can have a bit, one bit; a nibble, 4 bits; a byte, 8 bits; a word, two bytes; or a long word, 4 bytes. The z80 can only handle up to a word, two bytes.
Name | Size | Visual |
Bit | A single 1 or 0 | 0 |
Nibble | Four bits | 0000 |
Byte | 8 Bits | 00000000 |
Word | Two bytes | 00000000 00000000 |
Long Word | Four bytes | 00000000 00000000 00000000 00000000 |
A
Hexadecimal
Hexadecimal is our next number base used. This is on a
base sixteen because there are sixteen different symbols we can
use: 0,1,2,3,...9, A, B, C, D, E,
and F
.
$
before a number, or a h
after the number, denotes
that it is in hexadecimal form. The following chart is the best
way to learn the relationship between these numbers:
Dec | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
Hex | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | 10 | 11 |
Let's say you have the number 35
again,
the hexadecimal representation of that would be $23
in hexadecimal.
Dec | Hex |
1 | $1 |
23 | $17 |
52 | $34 |
12 | $0c |
255 | $ff |
128 | $80 |
69 | $45 |
95 | $5f |
74 | $4a |
111 | $6f |
Conversions
You can practice converting numbers with simple scripts such as the
Converter or
you can use your TI86's Base Conversion menu by pressing the
following keys:
$
before a number or a
h
after the number denotes that it's in
hexadecimal form, a %
before a number or a
b
after the number denotes that it's in binary
form, and when there's just a number without those symbols
it's just in plain old decimal form.