Recap:ISA的演进 Accumulator a Register-Memory Register-Register Processor Processor Processor Processor TOP ALU 9ALU ALU ALU Memory Memon Memory Memory Load a Push a oad R1.A oad Rl.A C=A+B Add B Push B Add R1. B oad R2, B Store c Add Store R1.C Add R3 R1 R2 Pop C Store R3. C 202125
Recap:ISA 的演进 2021/2/5 7
Recap:ISA必须说明哪些东西? Instruction Fetch 指令格式或编码方式。即如何编码? ·操作数和操作结果的存放位置 Instruction 存放位置? Decode 多少个显式操作数 存储器操作数如何定位 Operand 哪些操作数可以或不可以放到存储器 Fetch 寻址方式 Execute 数据类型和大小 ·支持哪些操作 Result 下一条指令地址 Store jumps, conditions branches fetch-decode-execute is implicit Next Instruction 202125
Recap:ISA必须说明哪些东西? • 指令格式或编码方式。即如何编码? • 操作数和操作结果的存放位置 – 存放位置? – 多少个显式操作数? – 存储器操作数如何定位? – 哪些操作数可以或不可以放到存储器 中? – 寻址方式 • 数据类型和大小 • 支持哪些操作 • 下一条指令地址 – jumps, conditions, branches – fetch-decode-execute is implicit! 2021/2/5 8 Instruction Fetch Instruction Decode Operand Fetch Execute Result Store Next Instruction
Recap:有关SA的若干问题 存储器寻址 操作数的类型与大小 所支持的操作 控制转移类指令 指令格式 202125 9
Recap: 有关ISA的若干问题 • 存储器寻址 • 操作数的类型与大小 • 所支持的操作 • 控制转移类指令 • 指令格式 2021/2/5 9
Recap:存储器寻址 ·80年以来几乎所有机器的存储都是按字节编址 一个存储器地址可以访问 一个字节、2个字节、4个字节、更多字节 不同体系结构对字的定义是不同的 16位字( Intel x86)32位字(MIPS) 如何读32位字,两种方案 每次一个字节,四次完成;每次一个字,一次完成 问题 (1)如何将字节地址映射到字地址(尾端问题) (2)一个字是否可以存放在任何字节边界上对齐问题 202125
Recap: 存储器寻址 • 80年以来几乎所有机器的存储器都是按字节编址 • 一个存储器地址可以访问: – 一个字节、2个字节、4个字节、更多字节….. • 不同体系结构对字的定义是不同的 – 16位字(Intel X86)32位字(MIPS) • 如何读32位字,两种方案 – 每次一个字节,四次完成;每次一个字,一次完成 • 问题: (1)如何将字节地址映射到字地址 (尾端问题) (2)一个字是否可以存放在任何字节边界上(对齐问题) 2021/2/5 10
Recap 尾端问题 little endian, big endian,在一个字内部的字节顺序问题 X+3x+2x+1 1. Little Endian byte te ordering Byte 3 Byte 2 Byte 1 Byte 0 32-bit Register Y Memory address x address of least-significant by yte(Intel x86 +1x+2 +3 2. Big Endian byte orderingByte 0 Byte 1 Byte 2 Byte 3 32-bit Register t Memory address X= address of most-significant byte(SPARC) 如地址xXx00指定了一个字(int),存储器中从xXx0处 连续存放fff000,则有两种方式: - Little endian方式下xX00位置是字的最低字节,整数值为0000 ffff Intel 80X86, DEC Vax, DEC Alpha(Windows NT Big endian方式下XX×00位置是字的最高字节,整数值为fft00BM 360/ 370, Motorola 68k, MIPS, Sparc, HP pa 202125
Recap: 尾端问题 • little endian, big endian, 在一个字内部的字节顺序问题 • 如地址xxx00指定了一个字(int), 存储器中从xxx00处 连续存放ffff0000, 则有两种方式: – Little endian 方式下xxx00位置是字的最低字节,整数值为0000ffff, Intel 80x86, DEC Vax, DEC Alpha (Windows NT) – Big endian 方式下xxx00位置是字的最高字节,整数值为ffff0000, IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA 2021/2/5 11