lc3计算机汇编程序报告.docx

上传人:b****3 文档编号:3813590 上传时间:2023-05-06 格式:DOCX 页数:16 大小:229.12KB
下载 相关 举报
lc3计算机汇编程序报告.docx_第1页
第1页 / 共16页
lc3计算机汇编程序报告.docx_第2页
第2页 / 共16页
lc3计算机汇编程序报告.docx_第3页
第3页 / 共16页
lc3计算机汇编程序报告.docx_第4页
第4页 / 共16页
lc3计算机汇编程序报告.docx_第5页
第5页 / 共16页
lc3计算机汇编程序报告.docx_第6页
第6页 / 共16页
lc3计算机汇编程序报告.docx_第7页
第7页 / 共16页
lc3计算机汇编程序报告.docx_第8页
第8页 / 共16页
lc3计算机汇编程序报告.docx_第9页
第9页 / 共16页
lc3计算机汇编程序报告.docx_第10页
第10页 / 共16页
lc3计算机汇编程序报告.docx_第11页
第11页 / 共16页
lc3计算机汇编程序报告.docx_第12页
第12页 / 共16页
lc3计算机汇编程序报告.docx_第13页
第13页 / 共16页
lc3计算机汇编程序报告.docx_第14页
第14页 / 共16页
lc3计算机汇编程序报告.docx_第15页
第15页 / 共16页
lc3计算机汇编程序报告.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

lc3计算机汇编程序报告.docx

《lc3计算机汇编程序报告.docx》由会员分享,可在线阅读,更多相关《lc3计算机汇编程序报告.docx(16页珍藏版)》请在冰点文库上搜索。

lc3计算机汇编程序报告.docx

lc3计算机汇编程序报告

 

计算机学院软件工程专业

计算机组织与结构实验报告1

 

学生姓名:

李荣

学生班级:

软件工程122002班

学生学号:

201220040209

 

2014年5月27日

一、实验目的

1.掌握LC-3指令集结构(ISA)。

2.学会使用LC-3Edit、Simulator软件工具。

3.熟悉LC-3机器语言调试和运行的方法。

二、实验内容

1.实验环境

Windows7x86、软件(LC-3Edit、Simulator)

2.问题描述

1)没有乘法指令的乘法。

编写一个程序使得R4跟R5中包含的两个正整数相乘,并且将其结果存到R2中。

2)一列数的求和。

编写一个程序将存储在从x3100开始的10个内存单元的数值加在一起,并将结果存放在R1中。

3)查看内存区域是否包含数字5。

编写一个程序来检查从x3100开始的10个内存单元中是否包含有数值5,如果有则设置R0=1,如果没有则设置

R0=0。

4)查找字中的第一个1。

编写一个程序来检查一个内存单元的内容(即某个地址中存放的一个字),逐个bit的检查(从左至右)第一个出现“1”的bit位置,并将该bit在该字(word)中的位置保存在R1中。

3、分析与实现

1.分析

1)、没有乘法指令的乘法

该程序是先通过AND指令将R2清零,再通过ADD指令将R2与R5相加的和存到R2中,此时R5减1(ADD指令),通过分支指令来判断R5是否大于0,如果是就跳转到x3201执行程序,以此循环执行,直到不满足条件执行下条指令,即停机指令。

2)、一列数的求和

a.初始化。

先通过AND指令将累计和变量R1清零,再通过AND、ADD指令将R4初始化为10(相当于一个计数器),再通过LD指令将R2初始化为数据列的起始地址x3100。

b.循环体。

从x3004开始,每循环一次,就有一个数值被装入R3(通过LDR指令);随后通过ADD指令将R2增量(x3005),R3的内容被加入R1(x3006),R1即为运行和存放处,计数器R4减1;接着通过分支指令来判断R4是否为正,若为正就跳到x3004执行,开始下一轮循环。

c.停机。

10次之后,R4的内容变为0,P位也相应为0,跳转不再发生,程序结束。

3)、查看内存区域是否包含数字5。

a.初始化。

x3000-x3005这六条指令,通过AND、ADD指令将R0、R1、R3分别初始化为1、-5、10。

b.位于x3006的指令初始化R4的内容为测试内存的起始地址x3100;位于x3007的指令将x3100的内容装入R2。

c.判断(x3008-x3009)。

判断R2的内容是否是5的方法,是价格R2和-5相加,如果结果为0就跳转到x300F,意味着发现了5的存在,此时R0的初始值为1。

d.准备下一轮测试。

位于x300A的指令增量R4,准备装入下一个被测试内容;x300B将R3减1,即还有多少数值未被测试;x300C借助R4做指针,真正装入下一个数值至R2;x300D则根据R3的内容是否为0,决定是否跳回x3008重新此过程。

若R3=0,则测试结束,所以同时还要设置R0=0(x300E),随后程序结束(x300F)。

4)、查找字中的第一个1。

a.初始化。

前两条指令将R1初始化,先AND(清零)后ADD,完成对R1赋值。

在此R1被初始化为15。

x3002通过LDI指令向R2装入x3100内存的内容。

b.第一次测试。

x3003测试的是该数值的最高位是否为1(等同于判断该数是否为负),如果是1则跳转至x3008,而此时R1=15,若是0则不跳转,R1减1,指向下一个被测试的bit位。

c.左移和第二次测试。

X3005让R2和自己相加,结果存回R2,等价于R2乘2,又等价于将R2的内容左移一位,这样bit[14]的内容也就被左移到了bit[15],使得条件跳转指令可以通过判断该数是否为负,来判断该位的内容。

然后,由x3006执行对bit[14]的内容判断。

而如果该位是1,则跳转至程序结束且R1=14,。

如果该位是0,则继续x3007的执行,x3007无条件的跳转至x3004,重复测试过程。

d.下一次测试。

循环体的工作就是每次完成一个bit的测试,即R1减1,指向下一个被测试位,R2内容左移1位(x3005),然后测试新的bit[15]内容。

2.程序流程图

图1.1没有乘法指令的乘法流程图图1.2一列数的和

图1.3查看内存区域是否包含数字5程序流程图

图1.4查找字中的第一个1程序流程图

3.运行步骤

对于这四个程序,要先在LC-3Edit上输入机器指令,然后再按按钮

进行调试,以.bin格式来存储此程序,调试成功相应的会生成一个.obj格式的文件,接着再在LC-3Simulator中打开.obj格式的文件,设置断点,通过“setvalue”给相应的寄存器或地址赋值,按按钮

运行此程序。

4、实验结果

1.运行结果截图

图4.1没有乘法指令的乘法

图4.2一列数的求和

图4.3.1查看内存区域是否包含数字5(有5的情况)

图4.3.2查看内存区域是否包含数字5(没有5的情况)

图4.4查找字中的第一个1

5、心得体会

通过再一次的重复该实验,我又一次熟悉了LC-3的运行环境,对于LC-3的操作也更加熟练了。

这次实验我最大的收获就是能够自己独立的来完成这四个小程序的调试,比起去年第一次做时更顺利。

不足的是,很多指令都还得翻书来查看它所要完成的操作,对于所学知识或者没有掌握扎实或者就是已经遗忘了,而求对课本还不够熟悉,所以通过这次实验我认识到课本是最重要的,要随时复习才能掌握的更好。

六、参考资料

1.《GuidetoUsingtheWindowsVersionoftheLC-3SimulatorandLC-3Edit》。

2.《计算机系统概论·英文版·第二版》。

7、附录

1.没有乘法指令的乘法

0011001000000000//起始地址为x3200

0101010010100000//AND指令,将R2清零

0001010010000100//ADD指令,R2<-R2+R4

0001101101111111//ADD指令,R5<-R5-1

0000001111111101//分支指令,判断R5是否是正,若为正跳到x3201执行下一轮循环

1111000000100101//TRAP指令,HALT

2.一列数的求和

0011000000000000//起始地址为x3000

0101001001100000//AND指令,将R1清零

0101100100100000//AND指令,将R4清零

0001100100101010//ADD指令,R4<-R4+10

1110010011111100//LEA指令,R2<-x3100

0110011010000000//LDR指令,将R2的内容装入R3中

0001010010100001//ADD指令,R2<-R2+1

0001001001000011//ADD指令,R1<-R1+R3

0001100100111111//ADD指令,R4<-R4-1

0000001111111011//分支指令,判断R4是否为正,若为正跳到x3004执行下一轮循环

1111000000100101//TRAP指令,HALT

3.查看内存区域是否包含数字5

0011000000000000//起始地址x3000

0101000000100000//AND指令,将R0清零

0001000000100001//ADD指令,R0<-R0+1

0101001001100000//AND指令,将R1清零

0001001001111011//ADD指令,R1<-R1-5

0101011011100000//AND指令,将R3清零

0001011011101010//ADD指令,R3<-R3+10

0010100000001000//LD指令,R4<-m[x300F]

0110010100000000//LDR指令,R2<-m[R4+0]

0001010010000001//ADD指令,R2<-R2+R1

0000010000000100//分支指令,判断R2是否为0,若为0跳到x300E执行执行下一轮循环

0001100100100001//ADD指令,R4<-R4+1

0001011011111111//ADD指令,R3<-R3-1

0000001111111010//分支指令,判断R3是否为正,若为正跳到x3007执行下一轮循环

0101000000100000//AND指令,将R0清零

1111000000100101//TRAP指令,HALT

0011000100000000//x3100

4.查找字中的第一个1

0011000000000000//起始地址为x3000

0101001001100000//AND指令,将R1清零

0001001001101111//ADD指令,R1<-R1+15

1010010000000111//LDI指令,R2<-m[m[x300A]]

0000100000000101//分支指令,判断R2是否为负,若为负跳到x3009执行下一轮循环

0001001001111111//ADD指令,R1<-R1-1

0000100000000011//分支指令,判断R1是否为负,若为负跳到x3009执行下一轮循环

0001010010000010//ADD指令,R2<-R2+R2

0000100000000001//分支指令,判断R2是否为负,若为负跳到x3009执行下一轮循环

0000111111111011//分支指令,无条件跳转到x3004

1111000000100101//TRAP指令,HALT

0011000100000000//x3100

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2