第4章 简单计算机模型
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 实际源程序 : ORG 100H Load A /1100 Add One Jump s1 s2, Add One Store A Halt s1,Add A Jump s2 A, Hex 0023 One,Hex 0001 4.5 A 编译程序的讨论 * 练习:对于上述程序写出符号表内容 4.5 A 编译程序的讨论 * 答案 4.5 A 编译程序的讨论 A 108 one 109 s1 106 s2 103 * 练习:查表4-2,编写下列二进制指令的助记符 1) 0010 0000 0000 0111 (例: store x1) 2) 1001 0000 0000 1011 3) 0011 0000 0000 1001 4.5 A 编译程序的讨论 * 答案: 1) store 007 2) jump 00B 3) add 009 4.5 A 编译程序的讨论 * 实例:用MARIE汇编语言编写实现下列功能的程序代码: if X > 1 do X := X + 1; else Y := Y + 1; 4.5 A 编译程序的讨论 * 答案: ORG 100 If, 100 Load X / X载入AC 101 Subt One /-1, 结果保存在AC 102 Skipcond 800 /IR第11和10位=10,If AC>0 (表明X>1), 跳过一条指令 103 Jump Else /否则,跳到另一分支 104 Load X / X载入AC Then, 105 Add One / AC+1保存到AC 106 Store X /X:= X + 1 107 Jump Endif /跳转到结束 Else,108 Load Y /载入 Y到AC 109 Add One /+1 10A Store Y /Y:= Y + 1 Endif, 10B Halt /程序终止 One, 10C DEC 1 /变量One的值是1 X, 10D DEC ? Y, 10E DEC ? 4.5 A 编译程序的讨论 * 例4-1和例4-2(参考p119) 4.5 A 编译程序的讨论 * 4.6 MARIE指令集的扩充 前述所有指令都是直接寻址模式 间接寻址模式(indirect addressing):即操作数的地址在当前指令所示地址指定的地址中去找 * MARIE支持4条新指令,其中ADDI X和JUMPI X支持间接寻址 4.6 MARIE指令集的扩充 * 间接寻址加法指令:ADDI实现把指令地址中的地址取出作为操作数的实际地址的间接寻址,完成加法操作。ADDI X MAR X /地址的地址 MBR M[MAR] /取出该地址 MAR MBR /送地址寄存器 MBR M[MAR] /实际操作数 AC AC + MBR /完成加操作 4.6 MARIE指令集的扩充 * 子程序的调用方法,利用Jns X实现把PC内容保存到地址X处,并跳转到地址X+1处继续执行。 MBR PC MAR X M[MAR] MBR (PC内容保存到地址X处) M