寻址模式 变量x:指向分配x的内存位置 a(r):地址是a的左值加上寄存器r中的值 constant(r):寄存器r中内容加上前面的常数即其 地址 *:寄存器r的内容所表示的位置上存放的内容位 置 *constant(r):寄存器r中内容加上常数所代表的位 置上的内容所表示的位置 。常数#constant 6
寻址模式 • 变量x:指向分配x的内存位置 • a(r):地址是a的左值加上寄存器r中的值 • constant(r):寄存器r中内容加上前面的常数即其 地址 • *r:寄存器r的内容所表示的位置上存放的内容位 置 • *constant(r):寄存器r中内容加上常数所代表的位 置上的内容所表示的位置 • 常数#constant 6 南大编译许畅
例子(1) x=y-Z LD R1,y /R1=y LD R2,Z /∥R2=z SUB R1,R1,R2 /∥R1=R1-R2 ST x,R1 /x=R1 。1 b=a[i] LD R1,i /川R1=i MUL R1,R1,8 /∥R1=R1*8(8字节长元素) LD R2,a(R1) //R2 contents(a contents(R1)) ST b,R2 /b=R2 2
例子 (1) • x = y – z – LD R1, y // R1 = y – LD R2, z // R2 = z – SUB R1, R1, R2 // R1 = R1 – R2 – ST x, R1 // x = R1 • b = a[i] – LD R1, i // R1 = i – MUL R1, R1, 8 // R1 = R1 * 8 (8字节长元素) – LD R2, a(R1) // R2 = contents(a + contents(R1)) – ST b, R2 // b = R2 7 南大编译许畅
例子(2) 。a[j]=c LD R1,c /R1=c LD R2,j /R2=j MUL R2,R2,8 /川R2=R2*8(8字节长元素) ST a(R2),R1 //contents(a contents(R2))=R1 。X=p LD R1,P /R1=P LDR2,0(R1) //R2 contents(0+contents(R1)) ST x,R2 /x=R2 8
例子 (2) • a[j] = c – LD R1, c // R1 = c – LD R2, j // R2 = j – MUL R2, R2, 8 // R2 = R2 * 8 (8字节长元素) – ST a(R2), R1 // contents(a + contents(R2)) = R1 • x = *p – LD R1, p // R1 = p – LD R2, 0(R1) // R2 = contents(0 + contents(R1)) – ST x, R2 // x = R2 8 南大编译许畅
例子(3) 。*p=y LD R1,P /∥R1=p LD R2,y /R2=y ST0(R1),R2 /contents(0+contents(R1))=R2 ·ifx<y goto L -LD R1,x /∥R1=x LD R2,y //R2=y SUB R1,R1,R2 /∥R1=R1-R2 BLTZ R1,M //if R1<0jump to M 9
例子 (3) • *p = y – LD R1, p // R1 = p – LD R2, y // R2 = y – ST 0(R1), R2 // contents(0 + contents(R1)) = R2 • if x < y goto L – LD R1, x // R1 = x – LD R2, y // R2 = y – SUB R1, R1, R2 // R1 = R1 – R2 – BLTZ R1, M // if R1 < 0 jump to M 9 南大编译许畅
程序及指令的代价 不同的目的有不同的度量 最短编译时间、运行时间、目标程序大小、能耗 不可判定一个目标程序是否最优 假设每个指令有固定的代价,设定为1加上运算分 量寻址模式的代价 LDR0,R1:代价为1 LDR0,M:代价是2 LDR1,*100(R2):代价为2 10
程序及指令的代价 • 不同的目的有不同的度量 – 最短编译时间、运行时间、目标程序大小、能耗 • 不可判定一个目标程序是否最优 • 假设每个指令有固定的代价,设定为1加上运算分 量寻址模式的代价 – LD R0, R1:代价为1 – LD R0, M:代价是2 – LD R1, *100(R2):代价为2 10 南大编译许畅