有限寄存器下的目标代码生成:机器码转换与描述问题咨询
汇编指令转换(寄存器R0/R1可用)
原高级代码
D : = B - C E : = A - B B : = B + C A : = E - D
已完成的汇编片段
MOV B,R0 SUB C,R0 MOV A,R1 SUB B,R1
- 寄存器状态注释:
- R0:存储计算结果D(B-C)
- R1:存储计算结果E(A-B)
完整后续汇编指令及说明
由于B在第3行执行后无后续使用,我们可以复用寄存器(无需保留B的原始值),同时要保证后续计算A=E-D所需的E和D值可用,完整指令如下:
; 先将寄存器中的D、E写入对应内存地址(避免后续覆盖丢失) MOV R0,D ; 把R0中的D值写入内存地址D MOV R1,E ; 把R1中的E值写入内存地址E ; 执行第3行:B = B + C MOV B,R0 ; 读取内存中B的原始值到R0(覆盖原D,已存入内存无需保留) ADD C,R0 ; R0 = R0 + [C] = B + C MOV R0,B ; 把计算结果写入内存地址B,更新B的值 ; 执行第4行:A = E - D MOV D,R0 ; 从内存读取D值到R0 SUB R0,R1 ; R1 = R1 - R0 = E - D(R1仍保留之前的E值) MOV R1,A ; 把计算结果写入内存地址A,更新A的值
关键逻辑说明
- 先将寄存器中的D、E落地到内存,确保后续复用寄存器时不会丢失这两个值
- 因为B后续无使用,所以直接用R0覆盖存储B的原始值来计算
B+C,无需额外保留 - 最后读取D到R0,用R1中保留的E值完成
E-D计算,最终更新A的内存值
内容的提问来源于stack exchange,提问作者Benequith
相关产品推荐
相关产品推荐

