其他操作指令的指令意义为: (1)MovR,M(Ri)→M (2) MOVM, R (M)→R (3)JX goto X (4) CMPA, B 将A和B的存储内容进行比较, 视A<B,A=B,或A>B,分别设CJ=0,CJ=1,CJ=2, (5)J rop X rop与CJ,状态一致时 goto X, 例如rop为<则CJ=0, goto X 6
6 其他操作指令的指令意义为: (1) MOV Ri , M (Ri) M (2) MOV M, Ri (M) Ri (3) J X goto X (4) CMPA,B 将A和B的存储内容进行比较, 视A<B,A=B,或A>B,分别设CJ=0,CJ=1,CJ=2, (5) J rop X. rop与CJ,状态一致时goto X, 例如rop为<则CJ=0,goto X
§82一个简单代码生成器 待用信息 定义81在基本块B中,变量A在i点的值,点引用 并且ij的通路上没有A的其他定值和引用,则j为i 处A的下一个引用点,即待用信息。 基本块内i处一个变量的活跃信息是指基本块出口 之后该变量是否还要被引用,而待用信息则是指基 本块内的下一引用点,这些是寄存器分配所需的信 息。因此在为基本块的每一语句生成目标代码时, 应先求出该语句中变量的待用信息和活跃信息。为 计算变量的待用信息,在变量符号表中设待用信息 栏和活跃信息栏,然后执行下列步骤: 7
7 §8.2 一个简单代码生成器 一、待用信息 定义8.1 在基本块B中,变量A在i点的值,j点引用, 并且i→j的通路上没有A的其他定值和引用,则j为i 处A的下一个引用点,即待用信息。 基本块内i处一个变量的活跃信息是指基本块出口 之后该变量是否还要被引用,而待用信息则是指基 本块内的下一引用点,这些是寄存器分配所需的信 息。因此在为基本块的每一语句生成目标代码时, 应先求出该语句中变量的待用信息和活跃信息。为 计算变量的待用信息,在变量符号表中设待用信息 栏和活跃信息栏,然后执行下列步骤:
(1)开始时,把基本块中各变量的符号表的待 用信息栏初始化为“非待用”,活跃信息栏按该变 量在基本块出口后是否活跃而初始化为“活跃”或 “非活跃”。 (2)从出口语句到入口语句反向扫描每个语句(如: P:x:=yopz),依次执行: 将符号表中x变量的待用信息和活跃信息附加到语 句P上;然后将x在符号表中的信息置为“非待用” “非活跃” 将符号表中y,z变量的待用信息和活跃信息附加 到语句P上;然后将符号表y、z的待用置为P,活跃 栏置为“活跃” 8
8 (1) 开始时,把基本块中各变量的符号表的待 用信息栏初始化为“非待用”,活跃信息栏按该变 量在基本块出口后是否活跃而初始化为“活跃”或 “非活跃”。 (2) 从出口语句到入口语句反向扫描每个语句(如: P:x:=y op z),依次执行: • 将符号表中x变量的待用信息和活跃信息附加到语 句P上;然后将x在符号表中的信息置为“非待用” 、 “非活跃” 。 • 将符号表中y,z变量的待用信息和活跃信息附加 到语句P上;然后将符号表y、z的待用置为P,活跃 栏置为“活跃”