[lc3]汇编实现分段函数

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的截图,发现输出确实在此位置停止

综上初步判断实验结果正确





猜你喜欢

转载自blog.csdn.net/saber_jk/article/details/79936821