lc3计算机汇编程序报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机学院软件工程专业计算机组织与结构实验报告1学生姓名:李荣学生班级:软件工程122002班学生学号:2012200402092014年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中。三、分析与实现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.程序流程图开始R4=5,R5=7R2清零R2=R2+R4R5=R5-1R50?结束NOYES开始给从x3100开始的10个内存单元赋值R1清零,R4清零R4=R4+10R2-x3100R40?结束NOR3-m[R2]R2=R2+1R1=R1+R3R4=R4-1YES图1.1没有乘法指令的乘法流程图图1.2一列数的和开始给从x3100开始的10个内存单元赋值R0清零R0=R0+1R1清零,R3清零R2=0?结束NOR1=R1–5R3=R3+10R4-m[x300F]YESR2-m[R4+0]R2=R2+R1R4=R4+1R3=R3-1YESNOR30?图1.3查看内存区域是否包含数字5程序流程图开始R1清零R1=R1+15R2-m[m[x300A]]R1=R1-1R20?R10?R2=R2+R2R20?结束YESYESYESNONONO图1.4查找字中的第一个1程序流程图3.运行步骤对于这四个程序,要先在LC-3Edit上输入机器指令,然后再按按钮进行调试,以.bin格式来存储此程序,调试成功相应的会生成一个.obj格式的文件,接着再在LC-3Simulator中打开.obj格式的文件,设置断点,通过“setvalue”给相应的寄存器或地址赋值,按按钮运行此程序。四、实验结果1.运行结果截图图4.1没有乘法指令的乘法图4.2一列数的求和图4.3.1查看内存区域是否包含数字5(有5的情况)图4.3.2查看内存区域是否包含数字5(没有5的情况)图4.4查找字中的第一个1五、心得体会通过再一次的重复该实验,我又一次熟悉了LC-3的运行环境,对于LC-3的操作也更加熟练了。这次实验我最大的收获就是能够自己独立的来完成这四个小程序的调试,比起去年第一次做时更顺利。不足的是,很多指令都还得翻书来查看它所要完成的操作,对于所学知识或者没有掌握扎实或者就是已经遗忘了,而求对课本还不够熟悉,所以通过这次实验我认识到课本是最重要的,要随时复习才能掌握的更好。六、参考资料1.《GuidetoUsingtheWindowsVersionoftheLC-3SimulatorandLC-3Edit》。2.《计算机系统概论·英文版·第二版》。七、附录1.没有乘法指令的乘法0011001000000000//起始地址为x32000101010010100000//AND指令,将R2清零0001010010000100//ADD指令,R2-R2+R40001101101111111//ADD指令,R5-R5-10000001111111101//分支指令,判断R5是否是正,若为正跳到x3201执行下一轮循环1111000000100101//TRAP指令,HALT2.一列数的求和0011000000000000//起始地址为x30000101001001100000//AND指令,将R1清零0101100100100000//AND指令,将R4清零0001100100101010//ADD指令,R4-R4+101110010011111100//LEA指令,R2-x31000110011010000000//LDR指令,将R2的内容装入R3中0001010010100001//ADD指令,R2-R2+10001001001000011//ADD指令,R1-R1+R30001100100111111//ADD指令,R4-R4-10000001111111011//分支指令,判断R4是否为正,若为正跳到x3004执行下一轮循环1111000000100101//TRAP指令,HALT3.查看内存区域是否包含数字50011000000000000//起始地址x30000101000000100000//AND指令,将R0清零0001000000100001//ADD指令,R0-R0+10101001001100000//AND指令,将R1清零0001001001111011//ADD指令,R1-R1-50101011011100000//AND指令,将R3清零0001011011101010//ADD指令,R3-R3+100010100000001000//LD指令,R4-m[x300F]0110010100000000//LDR指令,R2-m[R4+0]0001010010000001//ADD指令,R2-R2+R10000010000000100//分支指令,判断R2是否为0,若为0跳到x300E执行执行下一轮循环0001100100100001//ADD指令,R4-R4+10001011011111111//ADD指令,R3-R3-10000001111111010//分支指令,判断R3是否为正,若为正跳到x3007执行下一轮循环0101000000100000//AND指令,将R0清零1111000000100101//TRAP指令,HALT0011000100000000//x31004.查找字中的第一个10011000000000000//起始地址为x30000101001001100000//AND指令,将R1清零0001001001101111//ADD指令,R1-R1+151010010000000111//LDI指令,R2-m[m[x300A]]0000100000000101//分支指令,判断R2是否为负,若为负跳到x3009执行下一轮循环0001001001111111//ADD指令,R1-R1-10000100000000011//分支指令,判断R1是否为负,若为负跳到x3009执行下一轮循环0001010010000010//ADD指令,R2-R2+R20000100000000001//分支指令,判断R2是否为负,若为负跳到x3009执行下一轮循环0000111111111011//分支指令,无条件跳转到x30041111000000100101//TRAP指令,HALT0011000100000000//x3100

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功