本书的目标语 指令格式:一个运算符,一个目标地址,一个源 运算分量的列表 ·内存按照字节寻址 ·n个通用寄存器RO,R1
本书的目标语言 • 指令格式:一个运算符,一个目标地址,一个源 运算分量的列表 • 内存按照字节寻址 • n个通用寄存器R0, R1, …
本书的目标语言的指令集 加载: ld dst,src dst为寄存器 LDr.x dro. r1 Dr,#100 保存: st dst,src STx.r STx.#100 运算: oP dst,srcu,src2 SUBr1 r2 r3 无条件跳转:BRL 条件跳转: Bond r,L ·当r里的值小于0时跳转L:BLTz,L
本书的目标语言的指令集 • 加载:LD dst, src • dst为寄存器 • LD r, x LD r0, r1 LD r, #100 • 保存:ST dst, src • ST x, r ST x, #100 • 运算:OP dst, src1 , src2 • SUB r1, r2, r3 • 无条件跳转:BR L • 条件跳转:Bcond r, L • 当r里的值小于0时跳转L:BLTZ r, L
指令中的dst和src 变量名x(内存中的位置) ·寄存器r a(r),其中a是一个变量,r是一个寄存器 a(r)的内存位置:a的地址加上存放在寄存器r中的值 LDR1,a(R2)表示赋值R1= contents(a+ contents(R2) n(r),其中n是一个整数,r是一个寄存器 LDR1,100(R2)表示赋值R1= contents(100+ content(R2) *r,表示r的内容所表示的位置上存放的内存位置 n LD R1, *100(R2)/R1=content(contents(100+content(R2) #n,表示一个直接常数 LDR1,#100ADDR1R1,#100
指令中的dst和src • 变量名x(内存中的位置) • 寄存器r • a(r),其中a是一个变量,r是一个寄存器 • a(r)的内存位置:a的地址加上存放在寄存器r中的值 • LD R1, a(R2)表示赋值R1 = contents(a+contents(R2)) • n(r),其中n是一个整数,r是一个寄存器 • LD R1, 100(R2)表示赋值R1 = contents(100+content(R2)) • *r,表示r的内容所表示的位置上存放的内存位置 • *n(r) • LD R1, *100(R2)表示R1 = content(contents(100+content(R2))) • #n,表示一个直接常数 • LD R1, #100 ADD R1,R1,#100
目标机指令序列示例 Ld R1, y //R1 LD R2. Z //R2 =y-2 SUB R1. R1. R2 //R1=R1-R2 ST x, R1 //x=R1 对于实数数组a, Ld R1, i b=al i /R1=i MUL R1. R1. 8 /R1=R1* Ld R2, a (r1) // R2= contents(a contents(r1)) ST b, R2 //b=R2 LD R1. c /R1=c a LD R2, j //R2= MUL R2, R2, 8 R2=R2*8 sT a(R2), R1 // contents(a contents(R2))=R1 LD R1,p //R1 x=求p LDR2,0(R1) // R2 contents(o+ contents(r1)) sT x R2
目标机指令序列示例 对于实数数组a
目标机指令序列示例(续) LD R1, p //R1=p 米p=y LD R2,y //R2= ST0(R1),R2 // contents(o+ contents(R1))=R2 Ld R1. x //R1=x if x< y goto L LD R2, y /R2 SUB R1, R1, R2 // R1 R1-R2 BLTZ R1. M // if R1 0 jump to M
目标机指令序列示例(续)