操作数(opr) ·操作数类型:进制,编码,立即数(补码) 一地址:无符号整数。寄存器、内存、/O端口D 一数值:常数、定点数(有符号/无符号)、浮点数、逻辑值 -字符:ASCl、汉字内码 。 字长:“RV321”32位, “RV64”一64位(“大立即数”) 字节 100 半字:2B 8 80 字:4B 60 双字:8B(大立即数) 40 物理操作数:存放位置 20 寄存器 0 主存 /O端口 Video Image Graphics Audio Speech Security Decode Encode Average Media type 外存? Floating-point ■Pointers ■Word■Half-word■Byte 6/41
6/41 操作数(opr) • 操作数类型:进制,编码,立即数(补码) – 地址:无符号整数。寄存器、内存、I/O端口ID – 数值:常数、定点数(有符号/无符号)、浮点数、逻辑值 – 字符:ASCII、汉字内码 • 字长:“RV32I”——32位,“RV64”——64位(“大立即数”) • 字节 • 半字:2B • 字:4B • 双字:8B(大立即数) • 物理操作数:存放位置 • 寄存器 • 主存 • I/O端口 • 外存?
指令字中的操作数 寄存器 Ripes 存储器 File Help 一内存地址 着G〈〉o1oos日》四田 698 字长:Sw 01 Source code Executable code Viev node:O Binary O Disassenbled Editor 1 main: 2 addi x2,x0,2 00000000<main>: 3addi×3,x0,3 0: 00200113 addi x2 x0 2IF ·立即数 目 4 addi x7,x3,-6 4: 00300193 addi x3 x0 3 5 8: ffa18393 addi x7 x3-6 一进制表示 6 j end c: 0080086f jal x0 0x14 <enc 7 addi x2,x0,2 10: 00200113 addi x2 x0 2 ·十进制 8 9 end: 00000014<end>: 十六进制 10sWx2,45(x0) 14: 022026a3 sW×245(x0) -0x12345 11 beq x7,x5,main 18: fe5384e3 beq x7 x5 -24 <r ·二进制 -0b1101 ·标号/行号 -main,end
指令字中的操作数 • 寄存器 • 存储器 – 内存地址 – 字长:sw • 立即数 – 进制表示 • 十进制 • 十六进制 – 0x12345 • 二进制 – 0b1101 • 标号/行号 – main,end
RV architected registers:RV64/RV32.2-14 Name Register Preserved Usage number on call? x0 0 The constant value O n.a. x1 (ra) 1 Return address (link register) yes x2 (sp) 2 Stack pointer yes x3 (gp) 3 Globa pointer yes x4 (tp) 4 Thread pointer yes x5-x7 5-7 Temporaries no x8-x9 8-9 Saved yes ×10-×17 10-17 Arguments/results no x18-x27 18-27 Saved yes ×28-×31 28-31 Temporaries no
RV architected registers:RV64/RV32,图2-14
RV典型内存地址空间分配 。段式 SP -0000 003f ffff fffOnex Stack -DATA Stack/Heap ·栈:自高向低 ·堆:自低向高 Dynamic data CODE Static data 0000000010000000nex Text ·I/O port? PC+0000000000400000nex Reserved ·硬盘 0 ·网络 图2-13用户地址空间划分 空间大小? 9/111
RV典型内存地址空间分配 • 段式 – DATA – Stack/Heap • 栈:自高向低 • 堆:自低向高 – CODE • I/O port? • 硬盘 • 网络 9/111 图2-13 用户地址空间划分 空间大小?
字存储顺序(Byte Ordering)$2.3.1 ·字存储的顺序中,字节的次序有两种 0000 低端 0001 -大尾端(big endness) 0010 ·低地址,高字节 -小尾端(little endness) ·低地址,低字节 ·X86和RV都为小端,ARM可以自主设置 ·00000000000000000000000000000001 00000000000001110000001100000001? 1110 高端 1111 大尾端:a00000000008800008000e0088008801 addr+0 addr+1 addr+2 addr+3 /1先存高有效位(在低地址) 小尾端:008000018008880888000800080e8080 addr+0 addr+1 addr+2 addr+3 /1先存低有效位(在低地址】
字存储顺序(Byte Ordering)$2.3.1 • 字存储的顺序中,字节的次序有两种 – 大尾端(big endness) • 低地址,高字节 – 小尾端(little endness) • 低地址,低字节 • X86和RV都为小端,ARM可以自主设置 • 00000000 00000000 00000000 00000001 – 00000000 00000111 00000011 00000001?