Machine Language - Binary

advertisement
1
Machine Language - Binary
Address
Contents
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
0000000000001100
0011000000001101
0001000000001110
0111000000010000
1001000000000111
0001000000001111
1000000000001010
0000000000010000
0101000000001110
0001000000001111
1110000000001111
1111000000000000
0000000000000110
0000000000000111
0000000000000000
0000000000000000
0000000000000000
Machine Language - Binary
Address
Contents
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
0000000000001100
0011000000001101
0001000000001110
0111000000010000
1001000000000111
0001000000001111
1000000000001010
0000000000010000
0101000000001110
0001000000001111
1110000000001111
1111000000000000
0000000000000110
0000000000000111
0000000000000000
0000000000000000
0000000000000000
Do you know HEX?
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Machine Language - Binary
Address
Contents
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
0000000000001100
0011000000001101
0001000000001110
0111000000010000
1001000000000111
0001000000001111
1000000000001010
0000000000010000
0101000000001110
0001000000001111
1110000000001111
1111000000000000
0000000000000110
0000000000000111
0000000000000000
0000000000000000
0000000000000000
Do you know HEX?
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Machine Language - Binary
Address
Contents
00000000
00000001
00000010
00000011
00000100
00000101
06
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
0000000000001100
0011000000001101
0001000000001110
0111000000010000
1001000000000111
0001000000001111
800A
0000000000010000
0101000000001110
0001000000001111
1110000000001111
1111000000000000
0000000000000110
0000000000000111
0000000000000000
0000000000000000
0000000000000000
Do you know HEX?
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Machine Language - Hexadecimal
Address
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
Contents
000C
300D
100E
7010
9007
100F
800A
0010
500E
100F
E00F
F000
0006
0007
0000
0000
0000
Is this any better?
Machine Language - Hexadecimal
Address
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
Contents
000C
300D
100E
7010
9007
100F
800A
0010
500E
100F
E00F
F000
0006
0007
0000
0000
0000
Is this any better?
What if we use op-codes?
0000 = 0 = LOAD
0001 = 1 = STORE
0010 = 2 = CLEAR
0011 = 3 = ADD
ETC.,…
Machine Language - Hexadecimal
Address
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
Contents
ADD
STORE
000C
00D
100E
7010
9007
00F
800A
0010
500E
100F
E00F
F000
0006
0007
0000
0000
0000
Is this any better?
What if we use op-codes?
0000 = 0 = LOAD
0001 = 1 = STORE
0010 = 2 = CLEAR
0011 = 3 = ADD
ETC.,…
Machine Language with Mnemonics
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
LOAD
00C
ADD
00D
STORE
00E
COMPARE 010
JUMPGT
007
STORE
00F
JUMP
00A
LOAD
010
SUBTRACT 00E
STORE
00F
OUT
00F
HALT
000
0006
0007
0000
0000
0000
What does this buy us?
At what cost?
Machine Language with Mnemonics
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
LOAD
00C
ADD
00D
STORE
00E
COMPARE 010
JUMPGT
007
STORE
00F
JUMP
00A
LOAD
010
SUBTRACT 00E
STORE
00F
OUT
00F
HALT
000
0006
0007
0000
0000
0000
}
Why didn’t I
substitute
for these?
Machine Language with Mnemonics
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
LOAD
00C
ADD
00D
STORE
00E
COMPARE 010
JUMPGT
007
STORE
00F
JUMP
00A
LOAD
010
SUBTRACT 00E
STORE
00F
OUT
00F
HALT
000
0006
0007
0000
0000
0000
Let’s write the remaining
constants in decimal form
with no leading zeros.
Proto-Assembly Language
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LOAD
12
ADD
13
STORE
14
COMPARE
16
JUMPGT
7
STORE
15
JUMP
10
LOAD
16
SUBTRACT 14
STORE
15
OUT
15
HALT
6
7
0
0
0
Let’s write the remaining
constants in decimal form
with no leading zeros.
Note: the assembler will then
have to translate decimal
numbers back into binary.
Proto-Assembly Language
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LOAD
12
ADD
13
STORE
14
COMPARE
16
JUMPGT
7
STORE
15
JUMP
10
LOAD
16
SUBTRACT 14
STORE
15
OUT
15
HALT
6
7
0
0
0
Now, let’s try to read this
program and understand
what it does.
15
Proto-Assembly Language
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LOAD
12
ADD
13
STORE
14
COMPARE
16
JUMPGT
7
STORE
15
JUMP
10
LOAD
16
SUBTRACT 14
STORE
15
OUT
15
HALT
6
7
0
0
0
Now, let’s try to read this
program and understand
what it does.
Proto-Assembly Language
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LOAD
12
ADD
13
ADD
??
STORE
14
COMPARE
16
JUMPGT
7
STORE
15
JUMP
10
LOAD
16
SUBTRACT 14
STORE
15
OUT
15
HALT
6
7
0
0
0
Suppose we want to add
an instruction…
Assembly Language
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LOAD
12
ADD
13
STORE
14
COMPARE
16
JUMPGT
7
STORE
15
JUMP
10
LOAD
16
SUBTRACT 14
STORE
15
OUT
15
HALT
6
7
0
0
0
Assembly Language
0
1
2
3
4
5
6
7
8
9
10
11
A:
13
14
15
16
LOAD
A
ADD
13
STORE
14
COMPARE
16
JUMPGT
7
STORE
15
JUMP
10
LOAD
16
SUBTRACT 14
STORE
15
OUT
15
HALT
6
7
0
0
0
Assembly Language
LOAD
A
ADD
B
STORE
C
COMPARE
ZERO
JUMPGT
NEGATE
STORE
D
JUMP
OUTPUT
NEGATE: LOAD
ZERO
SUBTRACT C
STORE
D
OUTPUT: OUT
D
HALT
A:
6
B:
7
C:
0
D:
0
ZERO:
0
Assembly Language
.BEGIN
LOAD
A
ADD
B
STORE
C
COMPARE
ZERO
JUMPGT
NEGATE
STORE
D
JUMP
OUTPUT
NEGATE: LOAD
ZERO
SUBTRACT C
STORE
D
OUTPUT: OUT
D
HALT
A:
.DATA
6
B:
.DATA
7
C:
.DATA
0
D:
.DATA
0
ZERO:
.DATA
0
.END
Assembly Language
.BEGIN
LOAD
A
ADD
B
STORE
C
COMPARE
ZERO
JUMPGT
NEGATE
STORE
D
JUMP
OUTPUT
NEGATE: LOAD
ZERO
SUBTRACT C
Assembler Responsibilities
STORE
D
• Mnemonics  Binary
OUTPUT: OUT
D
HALT
• Decimal  Binary
A:
.DATA
6
• Labels  Addresses
B:
.DATA
7
• Pseudo-ops
C:
.DATA
0
D:
.DATA
0
ZERO:
.DATA
0
.END
Java Version
int a = 6;
int b = 7;
int c, d;
c = a + b;
if (c >= 0) {
d = c;
} else {
d = -c;
}
System.out.println(d);
Assembly Language Examples
Simple examples:
x=y+3
input a and b
while a > b do
print a
a=a–2
LOAD Y
ADD THREE
STORE X
…
-- Data comes after HALT
X:
.DATA 0 -- X is initially 0
Y:
.DATA 5 – Y is initially 5
THREE: .DATA 3 –The constant 3
IN A
IN B
LOOP1: LOAD A
COMPARE B
JUMPLT LOOP1END
.DATA 2
JUMPEQ LOOP1END
OUT A
LOAD A
SUBTRACT TWO
STORE A
JUMP LOOP1
LOOP1END: …
A: .DATA 0
B: .DATA 0
TWO:
26
More Examples
LOOP:
.BEGIN
CLEAR
RESULT
LOAD
STORE
FIRST
COUNTER
LOOP:
LOAD
FINAL
COMPARE COUNTER
JUMPGT
FINISH
LOAD
ADD
STORE
RESULT
COUNTER
RESULT
.BEGIN
LOAD
COMPARE
JUMPGT
JUMPEQ
LIMIT
RESULT
DONE
DONE
LOAD
STORE
LOAD
STORE
SECOND
FIRST
RESULT
SECOND
LOAD
ADD
STORE
FIRST
SECOND
RESULT
JUMP
LOAD
STORE
HALT
.DATA
.DATA
.DATA
.DATA
.END
LOOP
SECOND
RESULT
INCREMENTCOUNTER
FINISH:
FIRST:
FINAL:
COUNTER:
RESULT:
JUMP
HALT
LOOP
DONE:
.DATA
.DATA
.DATA
.DATA
.END
1
7
0
0
FIRST:
SECOND:
RESULT:
LIMIT:
1
1
2
20
The End
Download