0% found this document useful (0 votes)
21 views18 pages

14 - Instruction Encoding

Uploaded by

ranbir singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views18 pages

14 - Instruction Encoding

Uploaded by

ranbir singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

Machine Instruction Encoding

1
Readings and Exercises
• P & H: Sections 2.5, 2.10
• ARM Architecture Reference Manual: Chapter
C4

2
Objective
At the end of this section, you will understand
1. How ARM instructions are encoded

3
Introduction
• All ARMv8 instructions are 32 bits in size
▪ Encodes things such as:
• The opcode
▪ Eg: add, ldr
• The destination and source registers
▪ 1 bit: determines whether 32-bit or 64-bit registers
▪ 5 bits for each register: determines register number
• Remember: 25 = 32
• An immediate value (if used)
• An address (if used)

4
Introduction (cont’d)
• The ARMv8 has several different instruction
formats
▪ Each uses particular fields to encode the needed
information
▪ Some fields are further divided into subfields

5
R-Type Format
• Form:
opcode Rm imm6 Rn Rd
11 bits 5 bits 6 bits 5 bits 5 bits

▪ opcode: specifies the particular instruction to execute


▪ Rd: destination register
• 5 bits encode the unsigned integers 0 - 31
▪ Rn: first source register
▪ Rm: second source register
▪ imm6: optional shift amount
• Is 000000 if not used
6
R-Type Format (cont’d)
• Eg: add x19, x0, x1
▪ Machine instruction is: 0x8b010013
• In binary: 1000 1011 0000 0001 0000 0000 0001 0011
10001011000 00001 000000 00000 10011
11 bits 5 bits 6 bits 5 bits 5 bits

• Eg: add w19, w0, w1


▪ Machine instruction: 0x0b010013
00001011000 00001 000000 00000 10011
11 bits 5 bits 6 bits 5 bits 5 bits

7
R-Type Format (cont’d)
▪ The left-most bit in the opcode is the size format (sf)
subfield
• 0 indicates 32-bit registers
• 1 indicates 64-bit registers
• Eg: add w19, w0, w1, LSL 3
▪ Machine instruction: 0x0b010c13
00001011000 00001 000011 00000 10011
11 bits 5 bits 6 bits 5 bits 5 bits

8
I-Type Format
• Form:
opcode imm12 Rn Rd
10 bits 12 bits 5 bits 5 bits

▪ opcode: the particular instruction to execute


▪ Rd: destination register
▪ Rn: source register
▪ imm12: immediate value
• Is a 12-bit unsigned integer
• Range: 0 to 4095

9
I-Type Format (cont’d)
• Eg: add w19, w0, 4095
▪ Machine instruction: 0x113ffc13
0001000100 111111111111 00000 10011
10 bits 12 bits 5 bits 5 bits

10
D-Type Format
• Form:
opcode imm9 op2 Rn Rt
11 bits 9 bits 2 bits 5 bits 5 bits

▪ opcode: instruction to execute


▪ Rt: source/destination register for store/load
▪ Rn: base register (always an x register)
▪ imm9: immediate value specifying the offset
• Is a 9-bit signed integer
• Range: -256 to +255
▪ op2: set to 00 for unscaled loads/stores
11
D-Type Format (cont’d)
• Eg: str x19, [x20, 5]
▪ Machine instruction: 0xf8005293
11111000000 000000101 00 10100 10011
11 bits 9 bits 2 bits 5 bits 5 bits

12
B-Type
• Form:
opcode imm26
6 bits 26 bits

▪ opcode: the type of unconditional branch


• b: 000101
• bl: 100101
▪ imm26: 26-bit signed integer specifying the branch
offset in words
• Range in words: -225 to +225-1
• Range in bytes: -227 to +227-1 (±128MB)
13
B-Type (cont’d)
• The offset is added to the current address in the
PC register, to specify the address to jump to
▪ Is called PC-relative addressing
▪ Since absolute addresses are not used, the machine
instructions are relocatable in memory
• Eg:
top: add x1, x1, 1
cmp x1, 10
b.ge next
b top // branch instruction
next: . . .

14
B-Type (cont’d)
▪ Machine instruction for b top: 0x17fffffd
000101 11 1111 1111 1111 1111 1111 1101
6 bits 26 bits

• The offset is -3 words (-12 bytes)

15
CBI-Type
• Form:
opcode imm19 0 cond
8 bits 19 bits 1 4 bits

▪ opcode: 01010100 for conditional branch


▪ imm19: 19-bit signed integer specifying the branch
offset in words
• Range in words: -218 to +218-1
• Range in bytes: -220 to +220-1 (±1MB)
▪ cond: 4-bit code specifying the particular conditional
branch instruction:
16
CBI-Type (cont’d)

ARM Architecture Reference Manual: p. C1-122


17
CBI-Type (cont’d)
• Eg: top: add x1, x1, 1
cmp x1, 10
b.ge next // cond. branch
b top
next: . . .

▪ Machine instruction for b.ge next: 0x5400004a


01010100 0000 0000 0000 0000 010 0 1010
8 bits 19 bits 1 4 bits

• The offset is +2 words (+8 bytes)

18

You might also like