Piecewise function
Purpose:用汇编语言实现分段函数(如下)的计算并保存结果
Program input: 60integers which are in [0, 100]. The input list is stored in 60 consecutivememory locations -- one score per location -- starting at address x3200. Thelast score is at location x323B.
Program output: The results of f(x) for all 60 x values. The resultsshould be stored in consecutive memory locations -- one result per location --starting at address x3300.
Principles:1.令输入的数据减去3或10,然后依靠BR指令实现比较分段的操作
2.函数部分的实现主要是x^3-x相对复杂,本实验采用的累加的方法加以实现,将x累加x次得到x^2,然后对x累加x^2-1次,其中迭代累加也是依赖BR指令得以实现
3.本次实验采用汇编语言,编写完成后生成.asm文件继而生成目标文件,在LC-3 simulator上运行验证
Procedure:
代码分析
.ORIG x3000
LD R2,INPUT ;R2指向待输入数据地址
LD R3,OUTPUT ;R2指向数据输出地址
AGAIN LD R5,FLAG ;load结束位置与R2比较,判断结束与否
NOT R5,R5 ;R5寄存器是临时数据的存储,其内容的变化在后面当关注
ADD R5,R5,#1
ADD R5,R2,R5
BRz OVER ;跳转到程序over处
LDR R4,R2,#0 ;将输入数据存在R4中
ADD R2,R2,#1 ;R2指向下一个输入位置
ADD R5,R4,#-3
BRzp TWO ;若R4内容小于3则跳转至函数分段2,否则继续执行
AND R5,R5,#0
ADD R5,R5,#2
STR R5,R3,#0
ADD R3,R3,#1 ;分段1的功能,结果为2,保存在R3所指,R3自增
BRnzp AGAIN ;处理了一个输入,无条件跳转,实现循环
TWO ADD R5,R4,#-10
BRp THREE ;x>10则跳转至函数分段3,否则继续执行
AND R6,R6,#0
ADD R6,R4,#0
AND R5,R5,#0 ;清零操作,R6用作迭代计数,R5保存结果
AGAINSE ADD R5,R5,R4
ADD R6,R6,#-1
BRp AGAINSE ;循环结束后R5内容为x^2
ADD R6,R5,#-1
AND R5,R5,#0
AGAINTH ADD R5,R5,R4
ADD R6,R6,#-1
BRp AGAINTH ;累加得到x^3-x
STR R5,R3,#0
ADD R3,R3,#1 ;结果保存在R3所指,R3自增
BRnzp AGAIN ;处理了一个输入,无条件跳转,实现循环
THREE ADD R5,R4,#1 ;分段3的功能
STR R5,R3,#0
ADD R3,R3,#1
BRnzp AGAIN
OVER HALT
INPUT .FILL X3200
OUTPUT .FILL X3300
FLAG .FILL X323C
.END
Result:
结果测试
输入数据如下,未显示部分均为x0000
得到结果如下(未显示部分均为x0002),检验可知与从分段函数预测的结果一致
由于共有60个数据输入,输出结果应存在x3300~x333B,下图为x333B的截图,发现输出确实在此位置停止
综上初步判断实验结果正确