logo资料库

OpenRISC(or1200)指令集整理.pdf

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
OR1200 OR1200 OR1200 OR1200 指令集整理学习笔记 张智彬 zhangzhibin010@gmail.com MSN:zezeba@live.cn MSN:zezeba@live.cn MSN:zezeba@live.cn MSN:zezeba@live.cn 本文包括所有 ORBIS32 I 类指令。 说明:指令格式中的 D,A,B 下面的 5bit 是指相应通用寄存器的具体地址。 l.add l.add l.add l.add AddAddAddAdd Signed Signed Signed Signed l.add l.add l.add l.add 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . 11 10 9 8 7 . . 4 3 . . 0 opcode 0x38 D A B reserved opcode 0x0 reserved opcode 0x0 6 bits 5 bits llll.add .add.add rD,rA,rB rD,rA,rB .add rD,rA,rB rD,rA,rB 5 bits 5 bits 1 bits 2 bits 4 bits 4bits 通用寄存器 rA 的值和通用寄存器 rB 的值相加,所得到的结果存入通用寄存器 rD 中。 rD[31:0] < - rA[31:0] + rB[31:0] SR[CY] < - carry SR[OV] < - overflow 发生异常的模式是越界。 l.addc l.addc l.addc l.addc Signed andandandand Carry Signed AddAddAddAdd Signed Carry Signed Carry Carry l.addc l.addc l.addc l.addc 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . 11 10 9 8 7 . . 4 3 . . 0 opcode 0x1 opcode 0x38 D 5 bits 6 bits l.addc rD,rA,rB l.addc rD,rA,rB l.addc rD,rA,rB l.addc rD,rA,rB A 5 bits B reserved opcode 0x0 reserved 5 bits 1 bits 2 bits 4 bits 4bits 通用寄存器 rA 的值、通用寄存器 rB 的值和进位 CY 三者相加,所得到的结果存入通用 寄存器 rD 中。 rD[31:0] < - rA[31:0] + rB[31:0] + SR[CY] SR[CY] < - carry SR[OV] < - overflow 发生异常的模式是越界。
l.addi l.addi l.addi l.addi Immediate AddAddAddAdd Immediate Signed Immediate Signed Immediate Signed Signed l.addi l.addi l.addi l.addi 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . . . . . . . . 0 . I 16bits opcode 0x27 6 bits l.addi rD,rA,I l.addi rD,rA,I l.addi rD,rA,I l.addi rD,rA,I D 5 bits A 5 bits 带符号扩展的立即数的值和通用寄存器 rA 的值相加,所得到的结果存入通用寄存器 rD 中 。 rD[31:0] < - rA[31:0] + exts(Immediate) SR[CY] < - carry SR[OV] < - overflow 发生异常的模式是越界。 l.addic l.addic l.addic l.addic Signed andandandand Carry Signed Immediate AddAddAddAdd Immediate Carry Immediate Signed Carry Immediate Signed Carry l.addic l.addic l.addic l.addic 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . . . . . . . . 0 . I 16bits opcode 0x28 6 bits l.addic rD,rA,I l.addic rD,rA,I l.addic rD,rA,I l.addic rD,rA,I D 5 bits A 5 bits 带符号扩展的立即数的值、通用寄存器 rA 的值和进位 CY 三者相加,所得到的结果存入 通用寄存器 rD 中。 rD[31:0] < - rA[31:0] + exts(Immediate) + SR[CY] SR[CY] < - carry SR[OV] < - overflow 发生异常的模式是越界。 l.and l.and l.and l.and AndAndAndAnd l.and l.and l.and l.and 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . 11 10 9 8 7 . . 4 3 opcode 0x38 6 bits D 5 bits A 5 bits B reserved opcode 0x0 reserved 5 bits 1 bits 2 bits 4 bits 4bits . . 0 opcode 0x3
l.and rD,rA,rB l.and rD,rA,rB l.and rD,rA,rB l.and rD,rA,rB 通用寄存器 rA 的值与通用寄存器 rB 的值按位相与,所得到的结果存入通用寄存器 rD 中。 rD[31:0] < - rA[31:0] AND rB[31:0] 无异常模式。 l.andi l.andi l.andi l.andi Immediate AndAndAndAnd withwithwithwith Immediate Immediate HalfHalfHalfHalf WordWordWordWord Immediate l.andi l.andi l.andi l.andi 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . opcode 0x29 6 bits l.andi rD,rA,K l.andi rD,rA,K l.andi rD,rA,K l.andi rD,rA,K D 5 bits A 5 bits . . . . . . . 0 . K 16bits 立即数被 0 扩展,然后与通用寄存器 rA 的值按位相与,所得结果存入通用寄存器 rD 中。 rD[31:0] < - rA[31:0] AND extz(Immediate) 无异常模式。 l.bf l.bf l.bf l.bf Branch Branch ifififif FlagFlagFlagFlag Branch Branch l.bf l.bf l.bf l.bf 31 . . . . 26 25 . . . . . . . . . . . . . . . . . . . . . . . . 0 opcode 0x4 6 bits l.bfl.bf l.bf NNNN l.bf N 26bits 立即数左移 2bit,符号扩展到程序计数器的宽度,然后这个值与分支指令的地址相加, 所得到的结果就是分支的有效地址。如果 flag 被置位,那么程序分支到 EA(有效地址)要 经过一条指令周期的延迟。 EA < - exts(Immediate < < 2) + BranchInsnAddr PC < - EA if SR[F] set 无异常模式。
0 0 l.bnf l.bnf l.bnf l.bnf Branch Branch ifififif NoNoNoNo FlagFlagFlagFlag Branch Branch l.bnf l.bnf l.bnf l.bnf 31 . . . . 26 25 . . . . . . . . . . . . . . . . . . . . . . . . opcode 0x3 6 bits l.bnf l.bnf NNNN l.bnf l.bnf N 26bits 立即数左移 2bit,符号扩展到程序计数器的宽度,然后这个值与分支指令的地址相加, 所得到的结果就是分支的有效地址。如果 flag 被清零,那么程序分支到 EA(有效地址)要 经过一条指令周期的延迟。 EA < - exts(Immediate < < 2) + BranchInsnAddr PC < - EA if SR[F] cleared 无异常模式。 l.jl.jl.jl.j Jump Jump Jump Jump l.jl.jl.jl.j 31 . . . . 26 25 . . . . . . . . . . . . . . . . . . . . . . . . opcode 0x0 6 bits l.jl.jl.jl.j NNNN N 26bits 立即数左移 2bit,符号扩展到程序计数器的宽度,然后这个值与跳转指令的地址相加, 所得到的结果就是跳转指令的有效地址。程序经过一条指令周期的延迟无条件的跳转到 EA (有效地址)。 PC < - exts(Immediate < < 2) + JumpInsnAddr 无异常模式。
0 0 l.jal l.jal l.jal l.jal Jump Jump andandandand LinkLinkLinkLink Jump Jump l.jal l.jal l.jal l.jal 31 . . . . 26 25 . . . . . . . . . . . . . . . . . . . . . . . . opcode 0x1 6 bits l.jal l.jal NNNN l.jal l.jal N 26bits 立即数左移 2bit,符号扩展到程序计数器的宽度,然后这个值与跳转指令的地址相加, 所得到的结果就是跳转的有效地址。程序经过一条指令周期的延迟无条件的跳转到 EA(有 效地址)。在延迟槽后的指令地址被存入 LR(Link Register)。 PC < - exts(Immediate < < 2) + JumpInsnAddr LR < - DelayInsnAddr + 4 无异常模式。 l.jalr l.jalr l.jalr l.jalr Jump andandandand LinkLinkLinkLink Register Jump Register Jump Register Jump Register l.jalr l.jalr l.jalr l.jalr 31 . . . . 26 25 . . . . . . . . 16 15 . . . 11 10 . . . . . . . . . opcode 0x12 6 bits l.jalr l.jalr rBrBrBrB l.jalr l.jalr reserved 10 bits B 5 bits reserved 11bits 通用寄存器 rB 的值就是跳转指令的有效地址。程序经过一条指令周期的延迟无条件的 跳转到 EA(有效地址)。在延迟槽后的指令地址被存入 LR(Link Register)。在这里不允许 将 LR 指定为通用寄存器 rB。 PC < - rB LR < - DelayInsnAddr + 4 无异常模式。
l.jrl.jrl.jrl.jr Jump Register Jump Register Jump Register Jump Register l.jrl.jrl.jrl.jr 31 . . . . 26 25 . . . . . . . . 16 15 . . 11 10 . . . . . . . . . 0 opcode 0x11 6 bits l.jrl.jr l.jr rBrBrBrB l.jr reserved 10 bits . B 5 bits reserved 11bits 通用寄存器 rB 的值就是跳转指令的有效地址。程序经过一条指令周期的延迟无条件的 跳转到 EA(有效地址)。 PC < - rB 无异常模式。 l.lbs l.lbs l.lbs l.lbs Extend LoadLoadLoadLoad ByteByteByteByte andandandand Extend Extend withwithwithwith SignSignSignSign Extend l.lbs l.lbs l.lbs l.lbs 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . . . . . . . . . 0 opcode 0x24 6 bits l.lbs rD,I(rA) l.lbs rD,I(rA) l.lbs rD,I(rA) l.lbs rD,I(rA) D 5 bits A 5 bits I 16bits 立即数被符号扩展到通用寄存器 rA 的宽度,然后该值与通用寄存器 rA 的值相加,所得 结果代表着一个有效的地址。在存储器地址 EA 处的字节按照从高位到低位的顺序(8bit)load 到通用寄存器 rD 中。通用寄存器 rD 的高位的数值由 load 进来的 8 位数据的 bit 位 7 的数值 来代替。 EA < - exts(Immediate) + rA[31:0] rD[7:0] < - (EA)[7:0] rD[31:8] < - (EA)[7] 异常模式为: TLB miss Page fault Bus error
l.lbz l.lbz l.lbz l.lbz Extend LoadLoadLoadLoad ByteByteByteByte andandandand Extend Extend withwithwithwith ZeroZeroZeroZero Extend l.lbz l.lbz l.lbz l.lbz 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . . . . . . . . . 0 opcode 0x23 6 bits l.lbz rD,I(rA) l.lbz rD,I(rA) l.lbz rD,I(rA) l.lbz rD,I(rA) D 5 bits A 5 bits I 16bits 立即数被符号扩展到通用寄存器 rA 的宽度,然后该值与通用寄存器 rA 的值相加,所得 结果代表着一个有效的地址。在存储器地址 EA 处的字节按照从高位到低位的顺序(8bit)load 到通用寄存器 rD 中。通用寄存器 rD 的高位的数值由 0 值来代替。 EA < - exts(Immediate) + rA[31:0] rD[7:0] < - (EA)[7:0] rD[31:8] < - 0 异常模式为: TLB miss Page fault Bus error l.lhs l.lhs l.lhs l.lhs Extend LoadLoadLoadLoad HalfHalfHalfHalf WordWordWordWord andandandand Extend Extend withwithwithwith SignSignSignSign Extend l.lhs l.lhs l.lhs l.lhs 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . opcode 0x26 6 bits l.lhs rD,I(rA) l.lhs rD,I(rA) l.lhs rD,I(rA) l.lhs rD,I(rA) D 5 bits A 5 bits . . . . . . . 0 . I 16bits 立即数被符号扩展到通用寄存器 rA 的宽度,然后该值与通用寄存器 rA 的值相加,所得 结果代表着一个有效的地址。在存储器地址 EA 处的半字被 load 到通用寄存器 rD 的低 16bit 中。通用寄存器 rD 的高位的数值由半字的位 15 的值来代替。 EA < - exts(Immediate) + rA[31:0] rD[15:0] < - (EA)[15:0] rD[31:16] < - (EA)[15] 异常模式为: TLB miss Page fault Bus error Alignment
l.lhz l.lhz l.lhz l.lhz Extend LoadLoadLoadLoad HalfHalfHalfHalf WordWordWordWord andandandand Extend Extend withwithwithwith ZeroZeroZeroZero Extend l.lhz l.lhz l.lhz l.lhz 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . . . . . . . . 0 . I 16bits opcode 0x25 6 bits l.lhz rD,I(rA) l.lhz rD,I(rA) l.lhz rD,I(rA) l.lhz rD,I(rA) D 5 bits A 5 bits 立即数被符号扩展到通用寄存器 rA 的宽度,然后该值与通用寄存器 rA 的值相加,所得 结果代表着一个有效的地址。在存储器地址 EA 处的半字被 load 到通用寄存器 rD 的低 16bit 中。通用寄存器 rD 的高位的值由 0 值来代替。 EA < - exts(Immediate) + rA[31:0] rD[15:0] < - (EA)[15:0] rD[31:16] < - 0 异常模式为: TLB miss Page fault Bus error Alignment l.lws l.lws l.lws l.lws Extend Single WordWordWordWord andandandand Extend Single LoadLoadLoadLoad Single Extend withwithwithwith SignSignSignSign Single Extend l.lws l.lws l.lws l.lws 31 . . . . 26 25 . . . 21 20 . . . 16 15 . . . . . . opcode 0x22 6 bits l.lws rD,I(rA) l.lws rD,I(rA) l.lws rD,I(rA) l.lws rD,I(rA) D 5 bits A 5 bits . . . . . . . 0 . I 16bits 立即数被符号扩展到通用寄存器 rA 的宽度,然后该值与通用寄存器 rA 的值相加,所得 结果代表着一个有效的地址。在存储器地址 EA 处的单字被 load 到通用寄存器 rD[31:0]中。 EA < - exts(Immediate) + rA[31:0] rD[31:0] < - (EA)[31:0] 异常模式为: TLB miss Page fault Bus error Alignment
分享到:
收藏