Download presentation
Presentation is loading. Please wait.
1
Chapter 3 – Digital Logic and Binary Numbers
These are lecture notes to accompany the book SPARC Architecture, Assembly Language Programming, and C, by Richard P. Paul, 2nd edition, 2000. By Michael Weeks Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
2
Binary A computer is a “bistable” device A bistable device:
Easy to design and build Has 2 states: 0 and 1 One Binary digit (bit) represents 2 possible states (0, 1) Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
3
With 2 bits, 4 states are possible (22 = 4)
Bit1 Bit0 State Bit2 Bit1 Bit0 State With 3 bits, 8 states are possible (23 = 8) With n bits, 2n states are possible Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
4
Binary Coded Decimal (BCD)
Why not use 4 bits to represent decimal? Let 0000 represent 0 Let 0001 represent 1 Let 0010 represent 2 Let 0011 represent 3, etc. This is called BCD Only uses 10 of the 16 possibilities Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
5
Binary Number System From left to right, the position of the digit indicates its magnitude (in decreasing order) E.g. in decimal, 123 is less than 321 In binary, 011 is less than 100 A subscript indicates the number’s base E.g. is 100 decimal or binary? We don’t know! But 1410 = is clear Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
6
Bytes A group of 8 bits is a byte
A byte can represent 28 = 256 possible states Registers are usually a multiple of bytes SPARC registers have 32 bits (4 bytes) 232 = 4,294,967,296 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
7
Memory Addresses Memory addresses are in binary K = kilo = thousand,
often 32 bits, these days if each memory address maps to 1 byte: 232 bytes = 4 GB K = kilo = thousand, but 1KB actually means 1024 bytes 1MB = 1024 x 1024 bytes 1GB = 1024 x 1024 x 1024 bytes Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
8
Octal and Hexadecimal It is difficult for a human to work with long strings of 0’s and 1’s Octal and Hexadecimal are ways to group bits together Octal: base 8 Hexadecimal: base 16 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
9
Hexadecimal With 4 bits, there are 16 possibilities
Bit3 Bit2 Bit1 Bit0 Symbol a b c d e f With 4 bits, there are 16 possibilities Use 0, 1, 2, 3, …9 for the first 10 symbols Use a, b, c, d, e, and f for the last 6 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
10
Binary to Hexadecimal 01010110101100112 = ? in hex
Group into 4 bits, from the right: 0101, 0110, 1011, 00112 Now translate each (see previous table): 01012 => 5, => 6, => b, => 3 So this is 56b316 What if there are not enough bits? Pad with 0’s on the left Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
11
Hexadecimal to Binary f0e516 = ? in binary
Translate each into a group of 4 bits: f16 => 11112, 016 => 00002, e16 => 11102, 516 => 01012 So this is Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
12
Decimal to Any Number Base
Take the decimal number, and divide by the new number base Keep track of the quotient and remainder Repeat until quotient = 0 Read number from the bottom to the top Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
13
Decimal to Binary Binary is base 2
Example: convert 35 (decimal) to binary Quotient Remainder 35 / 2 = 17 1 17 / 2 = 8 1 8 / 2 = 4 0 4 / 2 = 2 0 2 / 2 = 1 0 1 / 2 = 0 1 So 3510 = Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
14
Any Number Base to Decimal
From right to left, multiply the digit of the number-to-convert by its baseposition Sum all results Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
15
Binary to Decimal Binary is base 2
Example: convert (binary) to decimal = 1x24 + 0x23 + 1x22 + 1x21 + 0x20 = 1x16 + 0x8 + 1x4 + 1x2 + 0x1 = = 22 So = 2210 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
16
Hexadecimal to Decimal
Hexadecimal is base 16 Example: convert 16 (hex) to decimal 1616 = 1x x160 = 1x16 + 6x1 = = 22 So 1616 = 2210 Not surprising, since 1616 = 0001, 01102 If one of the hex digits had been > 9, say c, then we would have used 12 in its place. Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
17
ASCII American Standard Code for Information Interchange
Use byte values to represent characters The assembler allows double-quotes mov 0x4d, %r3 ! Moves capital M to register 3 mov “M”, %r3 ! This command does the same ASCII used to be a 7-bit standard, but it is now 8-bits. Unicode is often used today, since it allows for more possibilities (16 bits), such as letters used in other languages, like é and ç. Note: mov %r3, “M” would NOT work! Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
18
ASCII chart Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
19
Bitwise Logical Operations
There are several binary operations: NOT AND OR XOR NAND NOR Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
20
NOT The NOT operation simply complements a binary value not (a) a’
a not(a) 0 1 1 0 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
21
AND The AND operation uses 2 binary values a and b a b a and b 0 0 0
0 0 0 0 1 0 1 0 0 1 1 1 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
22
OR The OR operation uses 2 binary values a or b a b a or b 0 0 0 0 1 1
0 0 0 0 1 1 1 0 1 1 1 1 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
23
XOR The XOR (exclusive-or) operation uses 2 binary values
True when only one input is true. a xor b a b a xor b 0 0 0 0 1 1 1 0 1 1 1 0 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
24
NAND The NAND (Not-AND) operation uses 2 binary values
Take the AND function, and complement it. a nand b a b a nand b 0 0 1 0 1 1 1 0 1 1 1 0 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
25
NOR The NOR (Not-OR) operation uses 2 binary values
Take the OR function, and complement it. NAND and NOR are easy to make on a chip. Why? Take CSc 4250 and find out! a b a nor b 0 0 1 0 1 0 1 0 0 1 1 0 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
26
Possible Logic Functions
Suppose you have 2 binary digits: a, b Imagine that some function operates on them to create c. What could this function be? There are only 16 possibilities And some of these are not useful! ab some function c Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
27
Logic Operations A 0011 Logical Sparc B 0101 0 0000 false
a and b and a and (not b) andn a b and (not a) b a xor b xor a or b or a nor b a xor (not b) xnor A not b B a or (not b) orn C not a D b or (not a) E a nand b F true Yes, this is different from the book’s figure. I do not like the way the book shows the numbers on the left. Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
28
Bitwise Each of these logic functions is a bitwise operation, meaning that the result is independent of the bits to the left or right e.g or 0 1 1 1 1 1 compare this with addition Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
29
Logic Instruction Examples
mov 0x47, %l0 and %l0, 0xca, %l1 andn %l0, 0xca, %l1 or %l0, 0xca, %l1 orn %l0, 0xca, %l1 mov 0x55, %l0 not %l0 42 mov 0x21, %l0 and %l0, 0x3c, %l1 or %l0, 0x3c, %l1 mov 0x55, %l0 xnor %l0, 0x3c, %l1 xor %l0, 0x3c, %l1 20 5 3d cf ffffff96 All answers are in Hex. Note that the answers that start with “ffffff” do so because all 32 bits of the register are used. I.e., “not 0x55” is really “not … ” in binary. ffffff77 69 ffffffaa Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
30
A Few More Logic Examples
In all the examples below, these registers have the following initial values: %l0 = 0x %l1 = 0x9abcdef0 What are the values for %l1 after the instruction? xor %l0, %l1, %l1 not %l0, %l1 and %l0, %l1, %l1 or %l0, %l1, %l1 You cannot “mov 0x , %reg”, but can put that value in a register in 2 commands. Also, the registers used are “L0” and “L1”, only in lower-case. edcba987 9abcdef8 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
31
SPARC Instruction Format
These commands are in the form: command source register 1, source register 2, destination register command source register 1, immediate value, destination register command can be any of the following: and, andn, xor, or, xnor, orn andcc, andncc, xorcc, orcc, xnorcc, orncc the cc means “set condition codes” andn means a and (not b) orn means a or (not b) I will not expect my students to remember andn, xnor, orn for the test. I do expect them to know and, or, not, nand, nor, xor. Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
32
SPARC Logical Instruction Example
cmp %a_r, 0 ble next nop add %b_r, 1, %b_r next: This is equivalent to: if (a > 0) b++; %a_r and %b_r will be replaced by the actual registers, such as %r2 and %r3 Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
33
Synthetic Instructions
The cmp command is a synthetic one. It is a macro that uses %g0. The above cmp command will be expanded to: subcc %a_r, %g0, %g0 Also, the tst command compares a register to 0: tst %a_r which the assembler turns into: orcc %a_r, %g0, %g0 Since %g0 ignores any updates, only the condition codes are affected. Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
34
Flags Since individual bits are used to represent boolean flags, a word may contain 32 flags. Common flag operations and mnemonics set: bset ( done with or ) clear: bclr ( done with andn ) toggle: btog ( done with xor ) Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
35
Testing Flags This command will see if one or more flags is set
btst reg_or_imm, regrs1 it expands to: andcc regrs1, reg_or_imm, %g0 (notice how the operands are switched) example: test if flag 0x02 is set btst 0x02, %a_r be clear nop set: clear: rs1 must mean “source register number 1” Richard P. Paul, SPARC Architecture, Assembly Language Programming, and C
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.