将以下子程序翻译成 LC3 代码,并写出主调函数的 LC3 代码
int add_threshold(int a, int b, int threshold) { int c = a + b; if (c >= threshold) return 1; else return 0; }
参考答案
主调函数
LDR R0,R5,#-1; ADD R6,R6,#-1; STR R0,R6,#0; LDR R0,R5,#-2; ADD R6,R6,#-1; STR R0,R6,#0; LDR R0,R5,#-2; ADD R6,R6,#-1; STR R0,R6,#0; JSR addthreshold; LDR R0,R6,#0; STR R0,R5,#0; ADD R6,R6,#1; ADD R6,R6,#3;
子程序
addthreshold ADD R6,R6,#-1; ADD R6,R6,#-1; STR R7,R6,#0; ADD R6,R6,#-1; STR R5,R6,#0; ADD R5,R6,#-1; ADD R6,R6,#-1; // int c = a + b; AND R0,R0,#0; LDR R1,R5,#4; LDR R2,R5,#5; ADD R0,R1,R2; STR R0,R5,#0; //if判断 LDR R0,R5,#0; NOT R0,R0; ADD R0,R0,#1; LDR R1,R0,#6; ADD R1,R1,R2; BRn Else; AND R0,R0,#0; ADD R0,R0,#1; STR R0,R5,#3; BR Return; Else AND R0,R0,#0; STR R0,R5,#3; Return ADD R6,R5,#1; LDR R5,R6,#0; ADD R6,R6,#1; LDR R7,R6,#0; ADD R6,R6,#1; RET