lc3计算机汇编程序报告
- 格式:doc
- 大小:571.00 KB
- 文档页数:14
汇编语言实验报告在计算机科学中,汇编语言是一种底层的编程语言,直接使用计算机的指令集来写程序。
与高级语言(如C ++或Java)不同,汇编程序被编写为显式的机器代码,它们可以直接在计算机上执行。
在本次实验中,我们学习了汇编语言的基础知识,并设计了一个简单的程序来演示操作系统,此程序可以打印字符串、读入字符和执行其他一些简单的操作。
我们了解了汇编语言的基本概念,例如寄存器、指令和标志位。
寄存器是CPU内部的存储空间,可用于存储数据或执行算术操作。
指令是CPU执行的单个操作,例如将数据移动到寄存器中,从寄存器中加载数据,或将数据存储到内存中。
标志位是CPU中的一些标志,用于指示例如进位或溢出等特定条件的发生情况。
之后,我们学习了如何使用汇编语言来执行简单的操作。
我们使用了mov指令将数据移动到寄存器中,使用int指令调用中断,以及使用jmp指令跳转到不同的程序行。
我们设计了一个简单的操作系统,它通过汇编程序来控制计算机的操作。
该操作系统具有以下主要功能:1. 打印字符串。
我们使用了mov指令将字符串中的数据加载到寄存器中,并使用int 指令调用中断来打印字符串。
2. 读入字符。
我们使用了int指令调用中断来读取用户输入的字符,然后将其存储在寄存器或内存中。
3. 执行简单的操作。
我们使用了jmp指令和标志位来执行条件分支,或使用算术指令来进行加减等操作。
在实验中,我们还学习了如何在调试模式下运行程序,以及如何使用汇编编译器将汇编代码转换为机器代码。
我们还使用了调试器来跟踪程序运行时的寄存器和内存内容,以及使用断点来在程序执行时停止并检查状态。
本次实验使我们更深入地了解了汇编语言的工作原理,并学习了如何设计和实现简单的操作系统。
通过了解和理解汇编语言,我们的编程能力将得到提高,帮助我们更好地理解计算机的内部工作原理。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
计算机学院软件工程专业计算机组织与结构实验报告1学生姓名:李荣学生班级:软件工程122002班学生学号: 2012200402092014年 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开始的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执行,开始下一轮循环。
汇编程序及接口技术实验报告
一、实验目的
本实验的主要目的是了解汇编语言程序的编写和调试方法,并掌握接口技术的应用。
二、实验内容
1.编写一个求给定数的阶乘的汇编程序。
2.利用串口实现汇编程序的输入输出。
三、实验步骤
1.阅读8086汇编语言的使用手册,了解汇编语言的基本语法和指令集。
2.编写一个求阶乘的汇编程序。
程序的基本思路是利用循环和累加的方法来实现阶乘的计算。
3.编写串口输入输出的汇编程序。
使用串口的输入输出功能,实现程序与外部设备的交互。
4.将阶乘程序与串口输入输出程序进行整合,测试程序的功能是否正常。
五、实验结果与分析
经过调试和测试,本实验成功实现了求阶乘的功能,并能通过串口与外部设备进行交互。
实验结果与预期一致。
六、实验总结
通过本次实验,我对汇编语言的编写和调试方法有了更深的了解。
同时,我们也学会了如何利用接口技术来实现程序与外部设备的交互。
这对我们以后的学习和工作都将有很大的帮助。
lc3汇编中.stringz的用法LC-3(Little Computer 3)是一种低级汇编语言,是为教育目的而开发的,其设计目标是教授机器级编程的基本概念。
在LC-3汇编语言中,使用.stringz伪操作指令可以定义并初始化一个以NULL结尾的字符串。
本文将从介绍LC-3汇编语言开始,逐步解释.stringz指令的用法和功能。
首先,我们来了解一下LC-3汇编语言。
LC-3是一种基于寄存器的计算机体系结构,具有16个通用寄存器(R0-R7)和特殊寄存器(PC、IR、CC、MAR、MDR等)。
它的指令集包括算术运算、数据传输、条件分支和循环等基本操作。
在LC-3汇编语言中,每条指令必须以分号开头,用于标识注释,而标号则用于表示程序中的跳转目标。
然后我们来讨论.stringz指令的用法。
.stringz是一个伪操作指令,用于定义并初始化一个以NULL结尾的字符串。
它的语法格式如下:assembly[label] .stringz "string"其中,label是一个可选的标号,用于表示字符串的地址。
.stringz指令紧跟着一个字符串,字符串必须用双引号括起来,并且以NULL字符(ASCII 码为0)结尾。
注意,字符串中可以包含任意字符,包括特殊字符和转义序列。
现在,我们通过一个简单的示例来演示.stringz指令的用法。
假设我们要定义一个字符串变量并初始化为"Hello World!",代码如下所示:assembly.orig x3000 ; 设置程序的起始地址start LEA R0, hello_string ; 将hello_string的地址加载到R0 TRAP x22 ; 调用TRAP向控制台输出字符串TRAP x25 ; TRAP x25用于退出程序hello_string .stringz "Hello World!" ; 定义并初始化一个字符串.end ; 结束程序在这个示例中,我们首先使用LEA(Load Effective Address)指令将hello_string的地址加载到寄存器R0中。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言汇编语言是一种低级语言,用于编写计算机的底层程序。
在计算机科学与技术领域,汇编语言程序设计是一门重要的课程。
本篇实验报告将介绍我在汇编语言程序设计实验中所学到的知识和经验。
实验目的本次实验的目的是通过编写汇编语言程序,加深对计算机底层原理的理解,并掌握汇编语言的基本语法和编程技巧。
实验环境在实验中,我使用了一台运行Windows操作系统的计算机,并安装了MASM 汇编语言开发工具。
实验内容1. 汇编语言基础知识在实验开始前,我先学习了汇编语言的基础知识。
汇编语言使用助记符来代表机器指令,与机器指令一一对应。
了解了寄存器、内存和指令的概念,并学会了如何使用它们来编写汇编程序。
2. 汇编语言程序设计在实验中,我编写了一些简单的汇编语言程序,以加深对汇编语言的理解和应用。
例如,我编写了一个计算两个数之和的程序,通过将两个数存储在寄存器中,并使用加法指令进行运算,最后将结果保存到指定的内存位置。
3. 汇编语言程序调试在编写汇编语言程序时,我遇到了一些错误和问题。
为了解决这些问题,我学会了使用调试工具来定位错误。
通过逐步执行程序,并观察寄存器和内存的变化,我能够找到程序中的错误并进行修正。
4. 汇编语言程序优化在实验中,我也尝试了对汇编语言程序进行优化,以提高程序的性能和效率。
通过减少指令的数量和使用更高效的算法,我成功地改进了程序的执行速度。
实验心得通过本次实验,我深刻体会到了汇编语言程序设计的重要性和挑战性。
汇编语言虽然复杂,但它能够直接操作计算机的硬件,提供了更高的灵活性和效率。
通过编写汇编语言程序,我不仅加深了对计算机底层原理的理解,还提高了问题解决和调试能力。
总结汇编语言程序设计实验是一门重要的课程,它为我们提供了学习计算机底层原理和编程技巧的机会。
通过实验,我掌握了汇编语言的基本知识和技巧,并成功编写和优化了汇编语言程序。
这次实验不仅加深了我的理论知识,还培养了我的实际操作能力。
汇编实验报告一、实验目的本次汇编实验的主要目的是深入了解汇编语言的基本语法和编程结构,掌握汇编程序的编写、调试和运行过程,提高对计算机底层硬件的理解和操作能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与运算编写程序实现不同寄存器之间的数据传送。
进行简单的算术运算,如加法、减法、乘法和除法,并将结果存储在指定的寄存器或内存单元中。
2、逻辑运算与移位操作进行逻辑运算,包括与、或、非和异或操作。
实现移位操作,如左移和右移,并观察数据的变化。
3、分支与循环结构使用条件跳转指令实现分支结构,根据不同的条件执行不同的代码段。
运用循环指令实现循环操作,如计数循环和条件循环。
4、子程序调用编写子程序来完成特定的功能,如计算阶乘、查找最大值等。
在主程序中调用子程序,并传递参数和获取返回值。
四、实验步骤1、数据传送与运算打开 MASM 编程工具,新建一个汇编源文件。
使用 MOV 指令将数据从一个寄存器传送到另一个寄存器,例如:MOV AX, BX 。
进行加法运算,使用 ADD 指令,如:ADD AX, CX 。
进行减法运算,使用 SUB 指令,如:SUB DX, BX 。
乘法运算使用 MUL 指令,除法运算使用 DIV 指令,并将结果存储在合适的位置。
2、逻辑运算与移位操作在源文件中使用 AND 、OR 、NOT 和 XOR 指令进行逻辑运算,例如:AND AX, BX 。
对于移位操作,使用 SHL (左移)和 SHR (右移)指令,如:SHL AX, 2 表示将 AX 的值左移 2 位。
3、分支与循环结构使用 CMP 指令比较两个值,然后根据比较结果使用 JZ (等于零跳转)、JL (小于跳转)、JG (大于跳转)等条件跳转指令实现分支结构。
对于循环结构,使用 LOOP 指令实现计数循环,例如:MOV CX, 10 ;LABEL: ;LOOP LABEL 。
汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。
掌握子程序调用过程中近程调用与远程调用的区别。
熟练掌握码型变换的程序。
实验内容从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。
要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。
数据可循环输入,遇‘00’结束。
实验准备预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。
熟悉键盘输入和字符显示的程序段的编制。
实验步骤编辑、汇编源程序,生成可执行文件。
执行程序,检查输入、输出结果,看是否正确。
如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。
用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。
实验报告要求分析近程调用和远程调用的主要区别。
用DEBUG命令观察执行过程有何不同。
分析实验结果及所遇到的问题的解决方法。
程序流程图开始TRAN程序标准序开始读入十进制数据放AX中AXAXAND0F0FH是00?YBLALN调用转换子程序结束AL左移3位回车、换行BL左移1位于ALAL+BL主程序流程图ALAL+AHRET转换子程序TRAN流程图程序清单STASEGMENTSTACK’STACK’DB100DUP(0)STAENDS GSAGSEGMENTPARA‘CODE’ASSUMECS:CSAG MAINPROCFARSTRAT:PUSHDSSUBAX,AXPUSHAXREV:MOVAH,1INT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030H JEENDTRAN CALLNEARPTRTRAN CALLFARPTRCON MOVAL,0DH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP JMPREV ENDTRAN:RET MAINENDP TRANPROCNEAR ANDAX,0F0FHMOVBL,ALMOVBL,ALMOVCL,3SHLAL,CLMOVCL,1SHLBL,CLADDAL,BLADDAL,AHRETTRANENDPCSAGENDS CSBGSEGMENTPARA’CODE’ASSUMECS:CSBG CONPROCFARPUSHAXMOVCL,4 SHRAL,CL ADDAL,30H CMPAL,39H JBECON2 ADDAL,7CON2:PUSHAX MOVAL,0DH CALLFARPTRDISP MOVAL,OAH CALLFARPTRDISP POPAX CALLFARPTRDISP POPAX ANDAL,0FHADDAL,30H CMPAL,39H JBECON1ADDAL,7CON1:CALLFARPTRDISP RETCONEDNP DISPPROCFAR PUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPENDPCSBGENDS ENDSTART。
计算机系统核心实验之LC-3机器码编程试验一、实验描述利用LC-3的机器代码计算一个16位的字中有多少位是’1’程序从x3000开始需计算的字存储在x3100计算的结果存储在x3101二、实验要求分析和理解试验指定的需解决问题。
利用LC-3的机器代码设计实现相关程序。
通过LC-3仿真器调试和运行相关程序并得到正确的结果。
三、实验步骤与过程程序代码及注释:0011 0000 0000 0000 ;程序的起始位置在x30001110 001 011111111;R1<-X3100在R1中存入地址x31000101 011 011 1 00000;R3<-0清R3,用来存放运行的结果(一个16位的字中'1'的个数)0101 010 010 100000;R2<-0清R2,用来作为一个计数器0001 010 010 1 01111;R2<-150001 010 010 1 00001;R2<-R2+1将16赋给R20110 100 001 000000;R4<-M[R1]将R1存放的地址指向的数据赋给R40000 010 000000101;BRZ判断R2是否为0,若R2为0,则跳出循环(跳到x300C)0000 011 000000001;BRZP判断R4是否为负,若R4为负,则R3加1,若R4为非负数,则PC 加2(即跳到x3009)0001 011 011 1 00001;R3<-R3+1 R3加10001 010 010 1 11111;R2<-R2-1 计数器R2减10001 100 100 000 100;R4<-R4+R4 R4乘2,即R4左移一位0000 111 111111010;BRZ 跳转到x30060111 011 001 000001;X3101<-ST[R3] 将R3的数据存入地址为x3001的内存中1111 0000 00100101 ;停止流程图:实验过程截图:(1)打开LC3编辑器,输入代码后,点击(2)接着弹出下图所示的窗口后,点击保存(3)打开LC3simulator,点击,选择之前保存的文件并打开,即可将之前输入的代码传入LC3模拟器中如下图所示(4)双击x300D前的小方块,使其变成大红点,表示程序运行至x300D(5)在Jump to栏中输入x3100,可跳至x3100(6)双击x3100一行输入一个十六进制的数x1234(7)在Jump to栏中,选择x3000,回到程序的起始位置(8)点击,程序即可开始运行(9)弹出对话框(10)在Jump to栏中选择x3100,在x3101中显示实验结果x0005实验结果截图:操作系统:win10软件工具:LC3Edit、LC3simulator 语言:机器语言。
lc3 lea指令LC3 LEA指令是一种汇编指令,用于将一个有效地址加载到某个寄存器中。
LEA是Load Effective Address的缩写,它的作用是将一个地址的计算结果加载到寄存器中,而不是加载该地址对应的数据。
LEA指令的语法格式为:LEA DR, LABEL,其中DR表示目标寄存器,LABEL表示要加载的地址。
LEA指令的执行过程如下:1. 首先,计算出LABEL的地址。
LABEL可以是一个标签,也可以是一个变量或者某个存储单元的地址。
2. 然后,将计算结果存储到目标寄存器DR中。
目标寄存器可以是R0~R7中的任何一个。
LEA指令的作用主要有以下几个方面:1. 加载变量的地址:LEA指令可以将变量的地址加载到寄存器中,方便后续对该变量的操作。
例如,LEA R1, VARIABLE将VARIABLE 的地址加载到R1寄存器中。
2. 加载数组元素的地址:LEA指令可以将数组元素的地址加载到寄存器中,方便后续对数组元素的操作。
例如,LEA R2, ARRAY将数组ARRAY的地址加载到R2寄存器中。
3. 加载存储单元的地址:LEA指令可以将某个存储单元的地址加载到寄存器中,方便后续对该存储单元的操作。
例如,LEA R3, MEMORY将存储单元MEMORY的地址加载到R3寄存器中。
LEA指令的使用可以简化程序的编写过程,提高程序的效率。
下面通过一个简单的示例来说明LEA指令的用法。
假设有一个数组ARRAY,它的起始地址为X3000,数组中有5个元素,每个元素占用2个字节。
现在要将数组中的元素加1,并将结果存储回数组中。
可以使用LEA指令来完成这个任务。
代码如下:```LEA R0, ARRAY ; 将数组的起始地址加载到R0寄存器中LD R1, 0(R0) ; 将数组的第一个元素加载到R1寄存器中ADD R1, R1, #1 ; 将数组的第一个元素加1ST R1, 0(R0) ; 将结果存储回数组中```在上面的代码中,首先使用LEA指令将数组的起始地址加载到R0寄存器中,然后使用LD指令将数组的第一个元素加载到R1寄存器中,接着使用ADD指令将R1寄存器中的值加1,最后使用ST指令将结果存储回数组中。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是一种底层的计算机语言,通过直接操作计算机的硬件和寄存器来实现程序的功能。
在本次实验中,我们学习了汇编语言的基本语法和编程技巧,并通过实践编写了一些简单的程序。
本报告将对实验过程和结果进行总结和分析。
一、实验目的本次实验的主要目的是让我们掌握汇编语言的基本语法和操作方式,培养我们对计算机底层运行机制的理解能力。
通过编写汇编程序,我们可以更深入地了解计算机的运行原理,并且可以更加高效地编写一些底层程序。
二、实验环境本次实验使用的是Windows操作系统,并且我们使用了MASM汇编器来编译和运行我们的汇编程序。
MASM是一款经典的汇编语言开发工具,具有强大的功能和广泛的应用领域。
三、实验内容在本次实验中,我们完成了以下几个任务:1. 编写一个简单的汇编程序,实现两个数字的相加功能。
2. 编写一个汇编程序,实现对一个字符串进行反转。
3. 编写一个汇编程序,实现对一个数组进行排序。
四、实验步骤1. 首先,我们学习了汇编语言的基本语法和指令集。
了解了汇编语言中的寄存器、指令和内存等概念,并且学会了如何使用它们来编写程序。
2. 接着,我们开始编写第一个程序,实现两个数字的相加功能。
通过学习汇编语言中的加法指令,我们可以将两个数字加载到寄存器中,并且使用相应的指令进行相加操作。
3. 然后,我们编写了第二个程序,实现对一个字符串进行反转。
通过学习汇编语言中的循环和条件判断指令,我们可以逐个字符地读取字符串,并且将它们按照相反的顺序存储到新的内存空间中。
4. 最后,我们编写了第三个程序,实现对一个数组进行排序。
通过学习汇编语言中的比较和交换指令,我们可以对数组中的元素进行排序,并且将排序结果存储到新的内存空间中。
五、实验结果通过以上的实验步骤,我们成功地完成了编写汇编程序的任务,并且得到了正确的结果。
我们的程序可以实现两个数字的相加、字符串的反转和数组的排序功能,并且运行速度较快,效果较好。
汇编语言实验报告引言:汇编语言作为低级语言之一,在计算机科学领域具有重要的地位。
本篇文章将围绕汇编语言的实验进行讨论,重点探索汇编语言在计算机编程中的应用和优势。
通过实际的实验过程,我们能够更加深入地认识汇编语言的特点和使用方法。
本报告将从实验的准备工作、实验的步骤、实验结果以及实验心得等方面进行论述。
实验准备:在开始实验之前,准备工作是非常重要的。
首先,我们需要下载安装合适的汇编语言开发环境,比如MASM或者NASM。
接着,我们需要理解汇编语言的基本知识,包括寄存器、内存和指令等的概念。
此外,我们还需要掌握一些基本的汇编语言指令,比如MOV、ADD、SUB等。
这些准备工作对于我们能够顺利进行实验具有关键性的作用。
实验步骤:在实验过程中,我们经历了一系列的步骤,下面将一一进行介绍。
1. 确定实验目标:在进行实验之前,我们需要明确实验的目标和要达到的结果。
比如,我们可以选择实现一个简单的计算器程序,能够实现基本的加减乘除运算。
这样的目标可以帮助我们更好地理解汇编语言的使用方法和语法规则。
2. 编写代码:在明确了实验目标之后,我们开始编写汇编语言代码。
首先,我们需要定义一些变量和常量,以便在程序中使用。
然后,我们根据实验目标,逐步编写实现相应功能的代码段。
在这个过程中,我们需要注意汇编语言的特点,比如大小写敏感、指令的书写格式等。
3. 调试程序:编写完代码后,我们需要对程序进行调试,以确保其功能的正确性。
在调试过程中,我们会使用一些调试工具,比如调试器,帮助我们找出代码中的错误并进行修复。
通过调试,我们能够提高代码的质量和效率。
4. 运行程序:在完成调试之后,我们开始运行程序,观察程序的运行结果。
通过不断运行和测试,我们可以检验程序的正确性和可靠性。
如果程序能够输出我们预期的结果,那么说明我们的实验成功了。
实验结果:在我们进行实验的过程中,我们获得了一些令人满意的结果。
通过编写汇编语言代码,我们成功实现了一个简单的计算器程序。
实验名称:汇编语言顺序程序设计实验报告实验目的:通过本次实验,学生能够掌握使用汇编语言编写顺序程序的基本方法,理解汇编语言的基本结构和运行机制。
实验内容:1. 汇编语言基础知识1.1 汇编语言的概念1.2 汇编语言的特点1.3 汇编语言的应用领域2. 汇编语言程序设计2.1 程序设计的基本流程2.2 程序设计的基本步骤2.3 汇编语言程序设计的规范与技巧3. 实验步骤3.1 确定实验题目和要求3.2 分析实验任务,设计程序流程图3.3 编写汇编程序3.4 调试程序,确保程序正确运行3.5 编写实验报告4. 实验报告要求4.1 实验题目4.2 实验目的4.3 实验内容和步骤4.4 程序设计思路和实现方法4.5 实验结果分析和讨论4.6 实验心得体会实验过程:1. 确定实验题目和要求本次实验的题目为“汇编语言顺序程序设计”,要求学生使用汇编语言编写一个顺序程序,实现指定的功能要求。
2. 分析实验任务,设计程序流程图在开始编写汇编程序之前,我们首先要明确实验的功能需求,然后设计程序的流程图,规划程序的整体结构。
3. 编写汇编程序在设计好程序流程后,根据汇编语言的语法规则,编写相应的程序代码,并确保程序的逻辑正确,语法无误。
4. 调试程序,确保程序正确运行编写完成程序后,需要对程序进行调试,逐步检查程序运行过程中的各个环节,发现并修复可能存在的错误。
5. 编写实验报告我们需要撰写本次实验的实验报告,详细记录实验的整体过程,包括程序设计思路、程序实现方法、实验结果分析和讨论,以及实验心得体会。
实验结果分析和讨论:经过本次实验,我们掌握了汇编语言顺序程序设计的基本方法和技巧,了解了汇编语言程序设计的规范和要求。
在实验过程中,我们遇到了一些问题和困难,但通过不懈的努力和团队合作,最终成功完成了实验任务,并取得了令人满意的成绩。
实验心得体会:通过本次实验,我们深刻认识到汇编语言在计算机领域中的重要性和应用价值,同时也意识到汇编语言程序设计的复杂性和技术挑战。
汇编实验报告汇编实验报告引言:汇编语言是一种低级语言,用于编写计算机程序。
在计算机科学领域中,汇编语言是一门重要的学科,它可以帮助我们更深入地了解计算机的内部工作原理。
本实验报告将介绍我在学习汇编语言过程中的实验经历和所学到的知识。
实验一:汇编语言的基本概念在本实验中,我首先学习了汇编语言的基本概念。
汇编语言是一种用于编写机器指令的低级语言,它直接操作计算机的硬件。
通过学习汇编语言,我了解了计算机内存、寄存器、指令和数据的存储方式,并学会了如何编写简单的汇编程序。
实验二:汇编语言的数据表示在这个实验中,我学习了汇编语言中的数据表示方法。
汇编语言中的数据可以用不同的方式表示,例如二进制、十进制和十六进制。
我还学习了如何使用数据寄存器和内存寻址来处理不同类型的数据。
实验三:汇编语言的指令集在本实验中,我学习了汇编语言的指令集。
汇编语言中的指令可以分为数据传送指令、算术运算指令、逻辑运算指令和控制指令等多种类型。
通过学习不同类型的指令,我可以编写更加复杂和功能强大的汇编程序。
实验四:汇编语言的程序设计在这个实验中,我学习了如何使用汇编语言进行程序设计。
通过学习汇编语言的程序设计技巧,我可以编写出高效、精确和可靠的程序。
我还学习了如何使用子程序、循环和条件语句等控制结构来实现不同的功能。
实验五:汇编语言的调试和优化在本实验中,我学习了如何调试和优化汇编语言程序。
调试是指在程序运行过程中发现并修复错误的过程,而优化则是指对程序进行性能提升的过程。
通过学习调试和优化技巧,我可以提高程序的效率和可靠性。
结论:通过这些实验,我对汇编语言有了更深入的了解。
汇编语言虽然复杂,但它可以帮助我们更好地理解计算机的内部工作原理,并且可以编写出高效、精确和可靠的程序。
通过学习汇编语言,我不仅提升了自己的编程能力,还对计算机科学有了更全面的认识。
我相信,在今后的学习和工作中,汇编语言将会发挥重要的作用。
汇编上机实验报告实验名称:汇编上机实验报告1. 实验目的通过完成汇编上机实验,掌握汇编语言的基本概念和语法规则,理解计算机底层运行的原理,加深对计算机体系结构的理解。
2. 实验环境硬件环境:个人电脑一台,操作系统为Windows 10软件环境:MASM汇编语言开发工具(Microsoft Macro Assembler)、DOSBox模拟器3. 实验内容及步骤3.1 实验一:汇编程序基本框架搭建步骤:(1) 在MASM环境下创建一个新的汇编源文件,命名为"lab1.asm"。
(2) 在源文件中编写汇编程序的基本框架,包括段定义、数据定义和代码段等。
(3) 使用MASM汇编器将源文件编译为目标文件。
(4) 使用链接器将目标文件连接为可执行程序。
(5) 在DOSBox模拟器中执行可执行程序,观察程序输出结果。
3.2 实验二:实现简单的数值运算步骤:(1) 按照实验一的步骤,在MASM环境下创建一个新的汇编源文件,命名为"lab2.asm"。
(2) 在源文件中编写汇编程序,实现两个数的相加、相减、相乘和相除等简单的数值运算。
(3) 使用MASM汇编器将源文件编译为目标文件。
(4) 使用链接器将目标文件连接为可执行程序。
(5) 在DOSBox模拟器中执行可执行程序,输入两个数值,观察程序计算结果。
3.3 实验三:字符串处理步骤:(1) 按照实验一的步骤,在MASM环境下创建一个新的汇编源文件,命名为"lab3.asm"。
(2) 在源文件中编写汇编程序,实现字符串的输入、输出和处理。
(3) 使用MASM汇编器将源文件编译为目标文件。
(4) 使用链接器将目标文件连接为可执行程序。
(5) 在DOSBox模拟器中执行可执行程序,输入一个字符串,观察程序对字符串的处理结果。
4. 实验结果与分析实验一:汇编程序基本框架搭建在DOSBox模拟器中成功执行了汇编程序,没有出现任何错误提示,并得到了预期的输出结果。
计科导大作业—汉诺塔从汉诺塔到LC-3F1003028 林思宇1》计算机是一个不折不扣的傻瓜,他只能做你让他做的事情。
2》计算机这个傻瓜很勤奋,而有句话叫做“勤能补拙”,所以很多我们做不来的事他也可以做(以超级麻烦的方式)。
此文档目的是实现在Lc-3上的汉诺塔算法。
汉诺塔算法首先我们来看一下汉诺塔的解决方法。
设start为起始柱,temp为中间柱,end为目的柱,起始盘子数为n块。
我们的思路是:1》首先把n-1块从start移到temp2》然后把第n块从start移到end3》最后把temp的n-1块移到end然后运用递归的思想细分1,3步直到出现n=1的情况N=1时直接从起始柱移到目的柱,算法结束。
图1给出了n=3时候的运算过程。
以下是在c++语言上的程序实现:Void Hanoi(int n,char s,char e,char t){ //盘子数,起始,目的,中间If(n==1) cout << s << “→” << e <<endl;//n=1情况Else{Hanoi(n-1,s,t,e); //把n-1块从start移到temp Cout << s << “→” << e <<endl; //然后把第n块从start移到end Hanoi(n-1,t,s,e); //最后把temp的n-1块移到end }}图1Lc-3基本指令回到主题,我们编写的是Lc-3的汉诺塔程序,解决汉诺塔的大概思路已经清楚,我们现在来看Lc-3基本指令。
.ORIG+地址:设定PC指针起始地址,通常用.ORIG x3000LD 寄存器标签: Load命令,把标签里面的值装入寄存器里面ADD 寄存器1, 寄存器2 ,寄存器3(立即数):把寄存器2和3里面的数字相加存入寄存器1中 ADD R1,R2,R3 实际效果R1=R2+R3把寄存器2里面的数字加上立即数存入寄存器1中ADD R1,R2,#30实际效果R1=R2+(30)十六进制LDR 寄存器1,寄存器2,立即数:把寄存器2中的值加上立即数作为地址,把地址中的值装入寄存器1中。
汇编计算器程序实验报告《汇编语⾔程序设计》综合程序设计实验报告题⽬:计算器⼀、项⽬简介在我们⽣活中⽆时不刻不⽤到计算,虽说计算并不是很⿇烦,但有的时候复杂的运算仍需要花费我们⼤量的时间去解决。
所以要有这样⼀个程序解决这个问题。
基于这个⽬的,⽽且在这个学期中,我们⼜接触到了汇编语⾔,运⽤汇编语⾔编写了计算器,来解决这个实际并且经常遇到的问题。
改程序主要针对加减乘除运算,可以进⾏相对复杂的问题,包含括号的相关运算。
该问题主要注意四则运算的优先级问题:惩处运算⽐加减运算优先级⾼,统计运算按从左到右的顺序计算,含有括号是应该先计算括号⾥⾯的内容。
⼆、⼩组成员具体分⼯徐其仲:调试汇编语⾔环境,设计汇编程序功能李秦:实现程序功能,撰写实验报告三、需求分析与设计问题:利⽤汇编语⾔编写计算器内容:从键盘输⼊⼀个四则运算表达式,按=号输出计算结果,并当结束时询问:是否继续?如果按q或Q,则退出,按其余任意键则继续。
计算器主要包括以下⼏个模块:(1)主程序模块主程序模块⾸先实现调⽤⼦程序clear清屏,初始化数据段,调⽤显⽰宏show显⽰界⾯,将寄存器ax,bx,cx,dx初始化赋初值为0,调⽤回车换⾏宏,输⼊字符或数字并判断调⽤⼦程序dyfq调⽤赋权宏fq为符号赋权,从⽽判断优先级,调⽤加减乘除⼦程序match对判断出的相应运算符进⾏运算,输出运算结果,判断是否继续,继续则返回输⼊,不则退出程序。
(2)赋权宏模块通过定义宏fq,定义了变元a,b进⾏参数传递,并使⽤替换运算符&使变元a与标号s对应,接着给对应的符号赋予权值,将其权值存⼊ch中。
(3)加减乘除运算⼦程序模块运算模块实现了将ax⼊栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号,若为乘号,则将number中的数字与其下⼀位的数字相乘,并把结果存⼊该位置。
类似的若不为乘号则接着判断。
(4)调⽤赋权宏⼦程序模块该模块实现了赋权宏fq为(,),*,、,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从⽽可以通过设定的权值来判断优先级(5)清屏⼦程序模块本模块先将即将⽤到的ax,bx,cx,dx寄存器⼊栈保存,通过ah=06h屏幕上卷功能,⽤bh=07h将屏幕设置为⿊底⽩字,给dh,dl赋值将其清屏位置设定在30⾏80列范围,从⽽实现了清屏功能,然后再讲ax,bx,cx,dx寄存器出栈(6)回车换⾏宏模块通过2号功能的输出功能,将0dh赋予dl输出,再调⽤2号功能,将0ah 赋予dl输出,从⽽实现回车换⾏功能。
计算机学院软件工程专业计算机组织与结构实验报告1学生姓名:李荣学生班级:软件工程122002班学生学号: 2012200402092014年 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开始的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 - 1R5 > 0?结束NO YES开始给从x3100开始的10个内存单元赋值R1清零,R4清零R4 = R4 +10R2 <- x3100R4 > 0?结束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]YES R2 <- m[R4 + 0]R2 = R2 + R1R4 = R4 + 1R3 = R3 - 1YESNOR3 > 0?图1.3 查看内存区域是否包含数字5程序流程图开始R1清零R1 = R1 + 15R2 <- m[m[x300A]]R1 = R1 -1R2 < 0?R1 < 0?R2 = R2 + R2 R2 < 0?结束YES YESYES NONONO图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 查看内存区域是否包含数字5(没有5的情况)图4.4查找字中的第一个1五、心得体会通过再一次的重复该实验,我又一次熟悉了LC-3的运行环境,对于LC-3的操作也更加熟练了。
这次实验我最大的收获就是能够自己独立的来完成这四个小程序的调试,比起去年第一次做时更顺利。
不足的是,很多指令都还得翻书来查看它所要完成的操作,对于所学知识或者没有掌握扎实或者就是已经遗忘了,而求对课本还不够熟悉,所以通过这次实验我认识到课本是最重要的,要随时复习才能掌握的更好。
六、参考资料1. 《Guide to Using the Windows Version of the LC-3 Simulator andLC-3 Edit》。
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 - 1 0000100000000011 //分支指令,判断R1是否为负,若为负跳到x3009执行下一轮循环0001010010000010 //ADD指令,R2 <- R2 + R2 0000100000000001 //分支指令,判断R2是否为负,若为负跳到x3009执行下一轮循环0000111111111011 //分支指令,无条件跳转到x30041111000000100101 //TRAP指令,HALT0011000100000000 //x3100。