《lc3计算机汇编程序报告(共14页).doc》由会员分享,可在线阅读,更多相关《lc3计算机汇编程序报告(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 计算机学院软件工程专业 计算机组织与结构实验报告1 学生姓名: 李 荣 学生班级: 软件工程班 学生学号: 9 2014年 5月 27日一、实验目的 1. 掌握LC-3 指令集结构(ISA)。2. 学会使用LC-3Edit、Simulator软件工具。3. 熟悉LC-3机器语言调试和运行的方法。二、实验内容1. 实验环境 Windows 7 x86、软件(LC-3 Edit、Simulator) 2. 问题描述1)没有乘法指令的乘法。编写一个程序使得R4跟R5中包含的两个正整数相乘,并且将其结果存到R2中。 2)一列数的求和。编写一个程序将存储在从x3100开始的1
2、0个内存单元的数值加在一起,并将结果存放在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是
3、否大于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次之后,
4、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
5、减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
6、,指向下一个被测试的bit位。 c.左移和第二次测试。X3005让R2和自己相加,结果存回R2,等价于R2乘2,又等价于将R2的内容左移一位,这样bit14的内容也就被左移到了bit15,使得条件跳转指令可以通过判断该数是否为负,来判断该位的内容。然后,由x3006执行对bit14的内容判断。而如果该位是1,则跳转至程序结束且R1 = 14,。如果该位是0 ,则继续x3007的执行,x3007无条件的跳转至x3004,重复测试过程。 d.下一次测试。循环体的工作就是每次完成一个bit的测试,即R1减1,指向下一个被测试位,R2内容左移1位(x3005),然后测试新的bit15内容。 2.程序流
7、程图 图1.1 没有乘法指令的乘法流程图 图1.2一列数的和 图1.3 查看内存区域是否包含数字5程序流程图图1.4查找字中的第一个1程序流程图3.运行步骤 对于这四个程序,要先在LC-3 Edit上输入机器指令,然后再按按钮进行调试,以.bin格式来存储此程序,调试成功相应的会生成一个.obj格式的文件,接着再在LC-3 Simulator中打开.obj格式的文件,设置断点,通过“set value”给相应的寄存器或地址赋值,按按钮运行此程序。 四、 实验结果 1. 运行结果截图图4.1没有乘法指令的乘法图4.2一列数的求和图4.3.1 查看内存区域是否包含数字5(有5的情况)图4.3.2
8、查看内存区域是否包含数字5(没有5的情况)图4.4查找字中的第一个1五、 心得体会 通过再一次的重复该实验,我又一次熟悉了LC-3的运行环境,对于LC-3的操作也更加熟练了。这次实验我最大的收获就是能够自己独立的来完成这四个小程序的调试,比起去年第一次做时更顺利。不足的是,很多指令都还得翻书来查看它所要完成的操作,对于所学知识或者没有掌握扎实或者就是已经遗忘了,而求对课本还不够熟悉,所以通过这次实验我认识到课本是最重要的,要随时复习才能掌握的更好。六、参考资料 1. Guide to Using the Windows Version of the LC-3 Simulator and LC-
9、3 Edit。 2.计算机系统概论英文版第二版。七、 附录1.没有乘法指令的乘法00000 /起始地址为x3200 00000 /AND指令,将R2清零 00100 /ADD指令,R2 - R2 + R4 11111 /ADD指令,R5 - R5 - 1 11101 /分支指令,判断R5是否是正,若为正跳 到x3201执行下一轮循环00101 /TRAP指令,HALT2.一列数的求和 00000 /起始地址为x300000000 /AND指令,将R1清零00000 /AND指令,将R4清零01010 /ADD指令,R4 - R4 + 1011100 /LEA指令,R2 - x310000000
10、 /LDR指令,将R2的内容装入R3中00001 /ADD指令,R2 - R2 + 100011 /ADD指令,R1 - R1 + R311111 /ADD指令,R4 - R4 -111011 /分支指令,判断R4是否为正,若为正跳 到x3004执行下一轮循环00101 /TRAP指令,HALT3.查看内存区域是否包含数字5 00000 /起始地址x300000000 /AND指令,将R0清零00001 /ADD指令,R0 - R0 + 100000 /AND指令,将R1清零11011 /ADD指令,R1 - R1 - 500000 /AND指令,将R3清零01010 /ADD指令,R3 -
11、R3 + 1001000 /LD指令,R4 - mx300F00000 /LDR指令,R2 - mR4 + 000001 /ADD指令,R2 - R2 + R100100 /分支指令,判断R2是否为0,若为0跳 到x300E执行执行下一轮循环00001 /ADD指令,R4 - R4 + 111111 /ADD指令,R3 - R3 - 111010 /分支指令,判断R3是否为正,若为正跳 到x3007执行下一轮循环00000 /AND指令,将R0清零00101 /TRAP指令,HALT00000 /x31004.查找字中的第一个1 00000 /起始地址为x3000 00000 /AND指令,将R1清零 01111 /ADD指令,R1 - R1 + 15 00111 /LDI指令,R2 - mmx300A 00101 /分支指令,判断R2是否为负,若为负跳 到x3009执行下一轮循环 11111 /ADD指令,R1 - R1 - 1 00011 /分支指令,判断R1是否为负,若为负跳 到x3009执行下一轮循环 00010 /ADD指令,R2 - R2 + R2 00001 /分支指令,判断R2是否为负,若为负跳 到x3009执行下一轮循环11011 /分支指令,无条件跳转到x300400101 /TRAP指令,HALT00000 /x3100专心-专注-专业