汇编累加器实验报告
计算机组成原理累加器实验报告
课程设计任务书目录一、实验计算机的设计 (4)1、整机逻辑框图设计 (4)2、指令系统的设计 (5)2.1数据格式 (5)2.2指令格式、指令编码、指令助记符、指令功能、操作数的寻址方式 (5)3.微操作控制部件的设计 (8)3.1微指令编码的格式设计 (8)3.2微操作控制信号设计 (8)3.3微程序顺序控制方式设计 (9)3.3.1微程序控制部件组成原理 (9)3.3.2微程序入口地址形成方法 (10)3.3.3控存的下地址确定方法 (11)3.3.4微程序在控存中的分布情况 (12)3.4微程序设计 (12)3.4.1写出每条指令对应的微程序流程图 (12)3.4.2 写出每段微程序中各微指令的二进制编码、16进制编码 (14)3.4.3写出每段微程序在控存中的存放位置 (15)目录4.设计组装实验计算机接线表 (16)5.编写调试程序 (16)二、实验计算机的调试 (18)1调试前准备 (18)2程序调试过程 (18)3调试结果 (20)4出错和故障分析 (20)三、课程设计总结 (21)四、参考文献 (21)一、验计算机的设计1 整机逻辑框图设计模型机是由运算器,控制器,存储器,输入设备,输出设备五大部分组成。
1、运算器又是有299,74LS181完成控制信号功能的算逻部件,暂存器LDR1,LDR2,及三个通用寄存器Ax,Bx,Cx等组成。
2、控制器由程序计数器PC、指令寄存器、地址寄存器、时序电路、控制存储器及相应的译码电路组成。
3、存储器RAM是通过CE和W/R两个微命令来完成数据和程序的的存放功能的。
4、输出设备有两位LED数码管和W/R控制完成的。
图1-1 模型机结构框图图1-1中运算器ALU由U7--U10四片74LS181构成,暂存器1由U3、U4两片74LS273构成,暂存器2由U5、U6两片74LS273构成。
微控器部分控存由U13--U15三片2816构成。
除此之外,CPU的其他部分都由EP1K10集成。
汇编语言实验报告1~7
汇编语言实验报告1~7实验一:数据传输指令、算术指令、逻辑指令的使用实验内容:利用汇编语言,编写一个程序,实现两个整数相加,并将结果存入第三个变量中实验步骤:1. 声明三个变量a、b、c2. 将10存入a,将20存入b3. 将a的值传入al,将b的值传入bl4. 使用add指令将al和bl相加,将结果存入al5. 将al的值传入c6. 显示c的值实验结果:a db 10mov al,aadd al,blint 21hmov ax,4c00h实验二:分支指令的使用实验内容:利用汇编语言,编写一个程序,实现当输入的值为正数时,输出"I'm positive!";当输入的值为负数时,输出"I'm negative!";当输入的值为零时,输出"I'm zero!"1. 定义一个变量num2. 接收用户输入,并将其存储在num中3. 用test指令判断num的值4. 当num=0时,执行输出"I'm zero!"的指令7. 退出程序num db ?lea dx, promptsub al, '0'test num, numjz zerojs negjmp positiveneg:output:zero_msg db 'I am zero!$'prompt db 'Please enter a number:', 0dh, 0ah, '$'1. 定义变量i、sum,分别表示累加的数字和累加和2. 将i赋初值1,sum赋初值03. 进入循环5. 使用inc指令将i加16. 使用cmp指令将i与10比较,如果i小于等于10,继续循环,否则退出循环7. 输出结果mov bx, iloopStart:inc bx实验四:过程调用的使用2. 循环遍历1到100之间的每个数3. 用一个for语句嵌套一个for语句判断该数是否为质数4. 用两个自定义的子程序is_prime和output输出结果call is_primeskip:cmp i, 100prime_loop:div blretje newlinejmp done实验目的:掌握字符串操作指令的使用实验内容:利用汇编语言,编写一个程序,将字符串"SJTU"改为字符串"MIT"1. 定义字符串SJTU和MIT2. 定义两个变量i和len,分别表示字符串的下标和长度3. 使用movsb将SJTU的值传到MIT中4. 输出MITSJTU db 'SJTU'lea si, SJTUstringLoop:实验内容:利用汇编语言,编写一个程序,实现将输入的字符串写入一个文件中,然后再读取该文件中的字符串并输出2. 打开文件3. 将字符串写入文件中4. 关闭文件6. 读取文件内容8. 输出读取的字符串fileName db 'test.txt'content db 32 dup(?)mov cx, word ptr [content]实验内容:利用汇编语言,编写一个程序,在系统按下Ctrl+C时,输出一条信息并退出1. 声明函数handleCtrlC2. 获取中断21的地址,将其存储到文件头中org 100hmov [old_int_21h], es:bxmov dx, offset handleCtrlCend开始:。
单片机实验一-加法器实验报告
单片机实验一-加法器实验报告南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合■设计□创新实验日期:实验成绩:实验一单片机软件实验—1至100求和(一)实验目的1.掌握51单片机Keil软件集成开发环境。
2.学习使用汇编语言编写应用程序。
(二)设计要求熟悉51单片机的Keil软件集成开发环境,使用汇编语言编写“1+2+3+…+100”的程序。
(三)实验原理类似C语言里的循环语句,从1开始加,利用CJNE判断是否已加到100,从而进行循环计数。
(四)实验设备装有Keil4的电脑一台(五)实验结果计算结果高8位r3为0x13,低8位r4为0xba,即0x13ba,十进制数5050。
(六)结果讨论与心得体会实验结果和预期结果一致。
以前就用过Keil编程C51,所以使用起来没有什么障碍。
第一次自己编汇编程序,感觉汇编和C还是有很多相通之处,有很多思想和方法可以借鉴。
(七)附录:实验源代码ORG 0000H ;程序运行入口LJMP M AIN ;跳向主程序MAINORG 0030H ;主程序入口MAIN: MOV R2,#01H ;给R2赋初值1,从1开始加MOV R3,#00H ;R3用于存放最终结果的高8位MOV R4,#00H ;R4用于存放最终结果的低8位START: CLR C;Cy位清零CJNE R2,#65H,LOOP ;判断R2是否等于101,如果不相等,就跳到LOOPSJMP RESULT ;R2等于101时,表示已经完成1加到100的运算,跳转到RESULT LOOP: MOV A,R2 ;将R2的值移入累加器ADD A,R4 ;将R4的值加到累加器里MOV R4,A ;将累加器的值移入R4,作为相加后结果的低8位MOV A,R3 ;将R3的值移入累加器ADDC A,#00H ;累加器加0,并且带进位相加,这样做就把低8位进位加上去了MOV R3,A ;将累加器的值移入R3,作为相加后结果的高8位INC R2 ;R2的值加1,递增,作为下一个加数SJMP START ;跳转到START,继续相加RESULT: SJMP RESULT ;显示结果END ;结束。
汇编上机实验报告
汇编上机实验报告实验目的:通过进行汇编语言上机实验,掌握汇编语言的基本语法和编程技巧,培养汇编程序设计能力。
实验内容:实验一:汇编程序的简单输入输出1.编写一个汇编程序,要求从键盘输入两个整数,然后将其相加,并将结果输出到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验二:汇编程序的条件跳转1.编写一个汇编程序,要求从键盘输入一个整数,判断其是否大于10,若是,则将其打印到屏幕上;否则,将其乘以5并打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验三:汇编程序的循环1.编写一个汇编程序,要求计算1到10的累加和,并将结果打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验四:汇编程序的数组操作1.编写一个汇编程序,要求定义一个长度为10的数组,并将数组中的值初始化为0,然后利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验结果:实验一:汇编程序的简单输入输出编写的汇编程序通过键盘输入两个整数,实现了相加并将结果输出到屏幕上的功能。
程序运行正常,输出结果与预期一致。
实验二:汇编程序的条件跳转编写的汇编程序通过键盘输入一个整数,根据条件判断,实现了将输入数大于10时打印在屏幕上,否则将其乘以5并打印在屏幕上的功能。
程序运行正常,输出结果与预期一致。
实验三:汇编程序的循环编写的汇编程序通过循环计算1到10的累加和,并将结果打印在屏幕上。
程序运行正常,输出结果与预期一致。
实验四:汇编程序的数组操作编写的汇编程序通过定义一个长度为10的数组,并将数组中的值初始化为0,利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。
累加器实验报告心得
累加器实验报告心得引言累加器是计算机领域常用的一种数据结构,用于累加计算。
在本次实验中,我们通过设计和实现一个累加器,进一步理解了累加器的原理和基本用法。
在实验过程中,我们遇到了一些问题并加以解决,掌握了一些调试技巧。
同时,通过编程实践,我们也深入了解了累加器在计算机科学中的应用。
实验目的本次实验的主要目的是掌握累加器的基本原理,并通过编程实现一个累加器。
具体而言,我们需要实现一个简单的累加器,能够将给定数量的整数相加并输出累加结果。
理论与设计累加器的基本原理非常简单,即不断将新的值与原有值相加,然后更新为新的累加结果。
在本次实验中,我们采用了一种基于循环的设计方法。
具体而言,我们使用一个循环来不断读入新的整数,然后将其与累加结果相加,并将结果更新为新的累加结果。
直到读入的整数数量达到给定数量为止,循环结束,输出最终累加结果。
实验过程在设计和实现累加器的过程中,我们遇到了一些问题,并通过不断调试和修改最终得到了正确的结果。
首先,我们注意到累加结果的数据类型应当与输入整数的数据类型相同。
因此,我们选择使用整型作为累加器的数据类型。
接下来,我们根据实验要求,实现了一个简单的循环结构,用于读入给定数量的整数。
在循环中,我们使用一个变量存储累加结果,并在每次循环中将读入的整数与累加结果相加,并将结果更新为新的累加结果。
最后,在循环结束后,我们输出最终的累加结果。
在进行初始测试时,我们发现累加器没有正确计算出累加结果。
经过仔细检查后发现,我们没有正确初始化累加结果的值。
因此,我们在循环开始之前,给累加结果赋予一个初始值,确保计算正确进行。
随后,我们再次进行了测试,发现累加器能够正确计算累加结果。
另外,在实验过程中,我们也注意到了一些累加器的应用场景。
累加器常用于计算某个指标累积值的情况,比如经济增长、能源消耗等。
累加器可以方便地累计各个数据点的值,并计算总和。
这种累加的结果对于分析趋势和预测未来变化非常有用。
汇编语言实验报告——累加器
《汇编语言》实验报告——累加器制作2014级计算机科学与工程学院学号:姓名一、实验要求:1.显示 INPUT N:,提示用户输入数字字串2.检测输入字串的合法性,非法给出提示3.将输入数字字串转化为数值,存入变量n4.累加1~n,存入变量sum5.以十进制显示sum二、流程图:三、源代码:DATAS SEGMENTstr1 db "Input N:","$"str2 db "sum=","$"str3 db 0ah,"error","$"n dw 0sum dw 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA dx,str1;输出提示符mov ah,9int 21hinput:mov ah,01;输入数字int 21hcmp al,0dh;判断是否为回车jz step1cmp al,"0";判断字符合法性jb errorcmp al,"9"ja errorsub al,"0";转化为ASCII码mov ah,0;此段将高位乘10push axmov ax,nshl ax,1push axmov cl,2shl ax,clpop bxadd ax,bxmov bx,0;高位与低位相加pop bxadd ax,bxmov n,axxor cx,cx;设定累加次数mov cx,njmp inputstep1:mov ax,cxsub cx,1step2:add ax,cx;求累加和loop step2mov sum,axlea dx,str2mov ah,9int 21hmov cx,0mov ax,sumstep3:mov dx,0mov bx,10;将结果除以10并把余数压进栈div bxpush dxinc cxcmp ax,0hjnz step3step4:xor ax,axpop ax ;栈内依次输出mov dx,axadd dx,30hint 21hloop step4jmp lasterror:lea dx,str3;输出错误提示语mov ah,9int 21hlast:MOV AH,4CHINT 21HCODES ENDSEND START四、实验测试截图五、实验心得:本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。
数字系统设计实验报告计数器、累加器
实验五计数器设计一、实验目的:1)复习计数器的结构组成及工作原理。
2)掌握图形法设计计数器的方法。
3)掌握Verilog HDL语言设计计数器的方法。
4)进一步熟悉设计流程、熟悉数字系统实验开发箱的使用。
二、实验器材:数字系统设计试验箱、导线、计算机、USB接口线三、实验内容:1)用图形法设计一个十进制计数器, 仿真设计结果。
下载, 进行在线测试。
用Verilog HDL语言设计一个十进制的计数器(要求加法计数;时钟上升沿触发;异步清零, 低电平有效;同步置数, 高电平有效), 仿真设计结果。
下载, 进行在线测试。
四、实验截图1)原理图:2)仿真波形:3)文本程序:5)波形仿真:五、实验结果分析、体会:这次实验, , 由于试验箱有抖动, 故在原理图上加了去抖电路, 但是在波形仿真的时候无需考虑抖动, 所以我在波形仿真的时候将去抖电路消除了, 方便观察实验六累加器设计一、实验目的:1)学习了解累加器工作原理;2)了解多层次结构的设计思路;3)学会综合应用原理图和文本相结合的设计方法。
实验器材:数字系统设计试验箱、导线、计算机、USB接口线三、实验内容:1)在文本输入方式下设计分别设计出8位的全加器和8位的寄存器, 并分别存为add8_8.v和reg8.v;3) 2)在原理图输入方式下通过调用两个模块设计出累加器电路, 并存为add8.bdf, 进行功能仿真;下载, 进行在线测试。
四、实验截图1)8位累加器原理图:2)波形仿真:3)文本输入8位加法器语言及符号:生成元器件:4)文本输入8位寄存器:生成图元:五、实验总结:通过本次实验, 学习了解累加器工作原理, 了解多层次结构的设计思路, 学会综合应用原理图和文本相结合的设计方法。
计算机汇编语言实验报告
计算机汇编语言实验报告一、实验目的本实验旨在通过编写计算机汇编语言程序,加强对计算机组成原理和汇编语言的理解,同时熟悉实际编写和调试过程。
二、实验内容1.用汇编语言编写一个简单的计算器程序,实现加法和减法操作。
2.编译并运行程序,测试其功能的正确性。
3.运用调试工具进行程序的调试,检查代码的运行流程。
三、实验步骤1.确定程序功能和设计思路:本次实验的目标是编写一个计算器程序,能够对两个数进行加法和减法操作。
我们可以通过定义一些操作码来表示不同的操作,再通过输入不同的操作码来执行相应的操作。
2.编写汇编语言程序:首先,需要定义一些变量和常量来存储输入的数和操作码。
然后,使用汇编语言的运算指令和控制指令来实现加法和减法操作,并将结果存储到指定的变量中。
最后,使用输出指令来显示结果。
3.编译并运行程序:将汇编语言程序编译为机器码,并通过计算机的指令集执行程序。
4.调试程序:利用调试工具,逐步执行程序,检查代码的运行流程和结果的正确性。
如有错误,进行适当的修改和调试。
5.测试功能和性能:使用不同的数和操作码进行测试,验证程序的功能和正确性。
四、实验结果经过编写、编译和调试,我们成功实现了一个简单的计算器程序。
程序能够根据输入的操作码,对两个数进行加法和减法操作,并将结果显示出来。
经过多次测试,程序的功能、正确性和性能都符合预期要求。
五、实验感想通过本次实验,我们对计算机组成原理和汇编语言有了更深入的理解。
在编写程序的过程中,我们发现汇编语言相比高级语言更加底层,需要考虑更多的细节和机器指令的使用。
同时,我们也意识到了调试的重要性,调试工具能够帮助我们分析和修正代码的错误,提高程序的质量。
六、实验总结通过本次实验,我们对计算机汇编语言的应用有了更深入的了解。
我们掌握了汇编语言程序的基本结构和语法规则,学会了使用汇编语言指令进行计算和控制。
同时,我们也提升了调试和测试的能力,加深了对计算机组成原理和汇编语言的理解。
汇编计算器程序实验报告
《汇编语言程序设计》综合程序设计实验报告题目:计算器一、项目简介在我们生活中无时不刻不用到计算,虽说计算并不是很麻烦,但有的时候复杂的运算仍需要花费我们大量的时间去解决。
所以要有这样一个程序解决这个问题。
基于这个目的,而且在这个学期中,我们又接触到了汇编语言,运用汇编语言编写了计算器,来解决这个实际并且经常遇到的问题。
改程序主要针对加减乘除运算,可以进行相对复杂的问题,包含括号的相关运算。
该问题主要注意四则运算的优先级问题:惩处运算比加减运算优先级高,统计运算按从左到右的顺序计算,含有括号是应该先计算括号里面的内容。
二、小组成员具体分工徐其仲:调试汇编语言环境,设计汇编程序功能李秦:实现程序功能,撰写实验报告三、需求分析与设计问题:利用汇编语言编写计算器内容:从键盘输入一个四则运算表达式,按=号输出计算结果,并当结束时询问:是否继续?如果按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输出,从而实现回车换行功能。
汇编实验报告
汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。
通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。
三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。
2、实现数据在不同寄存器和内存单元之间的传送。
(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。
2、进行移位操作,包括左移和右移,理解移位对数据的影响。
(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。
2、根据给定的条件,使用分支结构实现不同的操作。
(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。
2、在主程序中调用该子程序,并输出结果。
四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。
2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。
3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。
4、最后,使用`MOV` 指令将结果存储到指定的内存单元。
(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。
2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。
3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。
(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。
2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。
(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。
汇编语言实验报告二
汇编语言实验报告)(实验二实验二)一.实验目的1.掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。
2.熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。
3.初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。
二.程序说明1.计算1+2+3+…+10,将结果显示在屏幕上。
2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。
编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
三.设计思想1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余al是商,ah是余数,后加上30h。
2、使用si寄存器,用于在存储器中寻址。
利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。
利用01号功能,输出。
四.程序代码程序一code segment main proc far assume cs:code start: push ds sub ax,ax push ax mov bx,0ah mov cx, 0ah sum1: add ax,bx dec bx loop sum1 printit: mov bl,10 div bl add al,30h mov ch,ah mov dl,al mov ah,2 int 21h add ch,30h mov dl,ch mov ah,2 int 21h ret main endp code ends end 程序二程序二data segment ;数据段定义开始数据段定义开始buf db 10 dup(?) ;数据定义及其存储空间数据定义及其存储空间 max db ? min db ? Str1 db 0DH,0AH,'Please input: ','$' ;定义Str1的内容的内容 Str2 db 0DH,0AH,'MAX:','$' ;定义Str2的内容的内容 Str3 db 0DH,0AH,'MIN:','$' ;定义Str3的内容的内容 data ends ;数据段定义结束数据段定义结束Stack segment stack ;堆栈段定义开始堆栈段定义开始db 10 dup(?) stack ends ;堆栈段定义结束堆栈段定义结束code segment ;代码段定义开始代码段定义开始main proc far assume cs:code,ds:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov cx,10 mov si,0 ;寄存器,用于寻址寄存器,用于寻址mov bx,0 lop1: lea dx,Str1 mov ah,09 int 21h mov ah,01h ; 输入输入int 21h mov buf[si],al inc si loop lop1 ;返回循环1 mov cx,9 mov si,0 mov al,buf[si] mov bl,al lop2: inc si mov dl,buf[si] cmp dl,al jl compare1 mov al,dl compare1: cmp bl,dl ;比较,小的数放在bl jl compare2 mov bl,dl compare2: loop lop2 mov max,al mov min,bl lea dx,Str2 mov ah,09 int 21h mov dl,max mov ah,02h int 21h ;输出最大数输出最大数lea dx,Str3 mov ah,09 int 21h mov dl,min mov ah,02h int 21h ;输出最小数输出最小数ret main endp code ends end start 五. 结果分析并回答: 1. 设计的程序包含了几个段设计的程序包含了几个段 2. 你的代码经过编译和连接之后,总共占用多少个字节你的代码经过编译和连接之后,总共占用多少个字节3. 调用DEBUG 进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?指令的地址码是多少?4. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能个数字的累加功能5.对于第2题,若要求输入的是两位数,又该怎么办?题,若要求输入的是两位数,又该怎么办? 程序一:运行结果运行结果1、本程序包含了一个段,即为代码段、本程序包含了一个段,即为代码段2、代码经过编译和连接之后,共占32个字节个字节3、第一条指令的地址码、第一条指令的地址码最后一条指令的地址码最后一条指令的地址码程序二运行结果运行结果1、本程序包含了数据段、堆栈段和代码段三个段。
汇编语言编程实验报告
汇编语言编程实验报告实验目的:使用汇编语言编写程序,实现特定功能。
实验过程和结果:1. 程序设计在本次实验中,我们使用汇编语言编写程序,实现了一个简单的计算器功能。
以下是我们设计的程序伪代码:```data segment; 定义数据段operand1 db ?operand2 db ?operator db ?result db ?data endscode segmentassume cs:code, ds:datastart:; 程序入口mov ax, datamov ds, ax; 获取用户输入mov ah, 01hint 21hmov operator, almov ah, 01hint 21hmov operand1, almov ah, 01hint 21hmov operand2, al; 根据运算符进行计算 cmp operator, '+'je addcmp operator, '-'je subcmp operator, '*'je mulje div; 显示结果mov dl, resultadd dl, 30h ; 转换为ASCII码 mov ah, 02hint 21h; 程序结束mov ah, 4chint 21hadd:; 加法运算mov al, operand1add al, operand2mov result, aljmp displaysub:; 减法运算mov al, operand1mov result, aljmp displaymul:; 乘法运算mov al, operand1mul operand2mov result, aljmp displaydiv:; 除法运算mov al, operand1mov ah, 0 ; 清空余数 div operand2mov result, aljmp display display:; 显示计算结果mov dl, resultadd dl, 30h ; 转换为ASCII码mov ah, 02hint 21h; 程序结束mov ah, 4chint 21hcode endsend start```2. 实验结果运行程序后,我们通过键盘输入运算符和操作数,程序能够正确地进行相应的运算并显示结果。
汇编实验报告一实验总结
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
汇编实验一 实验报告
实验一查看CPU和内存用机器指令和汇编指令编程
一、实验目的
1.掌握debug的使用方法,会用基本的D,R命令查看、显示内存和寄存器
2.了解汇编指令编程的方法。
二、实验任务
1检查在存储器低端的BIOS数据区的内容。
(1)检查串行与并行端口
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2 考察ROM BIOS
目的:检查在存储器高端的ROM BIOS中的数据。
(1)检查版本通告
(2)检查ROM BIOS数据
3.用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改。
三、实验结果及分析
1、检查在存储器低端的BIOS数据区的内容
(1)检查串行与并行端口
说明:检查后发现有四个串行端口,分别是03F8、02F8、03E8、02E8;并行端口也有四个,分别是03BC、03BC、0378、0278、9FC0
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2、考察ROM BIOS (1)检查版本通告
(2)检查ROM BIOS数据
3、用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改
四、实验总结(心得、体会)
1、通过对检查在存储器低端的BIOS数据区的内容的查看,可以了解计算机的各种状态,而考察ROM BIOS可以鉴定计算机的出厂信息。
2、通过用D、R命令查看、显示内存和寄存器,可以了解计算机运行的过程步骤,并且可以通过偏移地址读取内容。
3、在读取时需要注意的是,在DEBUG显示中是低位至高位的显示,而我们需要的是高位至低位的显示方式,所以在操作时对于双字节的读取,需要将前后字节地址内容互换。
汇编实验一实验报告
汇编实验一实验报告一、实验目的1.了解汇编语言的基本概念和基本语法。
2.掌握常见汇编指令的使用方法。
二、实验器材1.计算机一台。
2.汇编语言开发环境。
三、实验原理和方法1.汇编语言是低级程序语言,是计算机可以直接识别并执行的语言。
2.汇编语言采用助记符表示计算机指令,并且每一条汇编指令都对应一条机器指令。
四、实验过程及结果1.编写一个汇编程序,实现将两个数相加并输出结果的功能。
2.打开汇编语言开发环境,创建一个新的源文件。
3.在源文件中编写汇编程序,并保存。
4.汇编程序的伪指令section .data用于定义数据段,section .text用于定义代码段。
5.使用汇编指令mov将要相加的两个数赋值给寄存器,使用汇编指令add将两个数相加,并将结果保存到一个寄存器中。
6.使用汇编指令mov将结果从寄存器中取出,并输出到屏幕。
7.编译和运行汇编程序,查看结果是否正确。
五、实验结果分析经过编译和运行,实验程序顺利执行,结果正确输出。
通过这个实验,加深了对汇编语言的理解和掌握。
六、实验总结通过本次实验,我了解了汇编语言的基本概念和基本语法,并掌握了常见汇编指令的使用方法。
在实验过程中,我遇到了一些问题,如如何正确使用汇编指令以及如何调试程序等,但在同学和老师的帮助下,我顺利完成了实验,并且收获了很多。
通过这次实验,我深刻认识到汇编语言是一种非常底层的语言,需要对计算机底层原理有一定的了解,才能编写出正确的汇编程序。
同时,我也意识到汇编语言虽然复杂,但它的执行效率非常高,可以在一些特定场景下发挥出很大的作用。
总而言之,本次实验让我对汇编语言有了更深入的了解,也提高了我的编程能力。
希望在以后的学习中能够深入学习汇编语言,并能够熟练地使用它。
汇编累加器
累加器实验报告总体思路:①先把数字串转化为数字,应用课件上的程序。
②用循环进行累加③把累加结果显示出来④进行非法输入处理,进行溢出处理⑤测试与修改程序中遇到的问题和解决方法:①问题:输出的字符串“sum=”把字符串“input N:”的一部分冲掉解决方法:在输入数值之后回车换行。
②问题:溢出的判断问题解决方法:因为计算结果溢出后结果改变,不能直接与2^16比较,所以先解不等式(1+N)N/2<2^16,解得N≤361,所以当N>361时溢出。
王文海912106840440DA TAS SEGMENTSTR0 DB 'input n:$'STR1 DB 'sum=$'STR2 DB 13,10,'illegal input!',13,10,'$'STR3 DB 13,10,'overflow!',13,10,'$'FUC DB 13,10,'$'NUM DW 0DA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASSTART:MOV AX,DA TASMOV DS,AXLEA DX,STR0MOV AH,9INT 21H ;输出str0AG1:MOV AH,1INT 21HCMP AL,0DH ;回车结束数字串的输入JZ LAB1CMP AL,48JL ERO1CMP AL,57JG ERO1 ;非法字符的判定与跳转SUB AL,48PUSH AXMOV AX,NUMSHL AX,1PUSH AXMOV CL,2SHL AX,CLPOP BXADD AX,BXPOP BXMOV BH,0ADD AX,BXMOV NUM,AXJMP AG1LAB1:MOV AX,NUMCMP AX,361JG ERO2 ;溢出判定与跳转,361事先由求和公式算好MOV BX,AXAG2:DEC AXADD BX,AXCMP AX,1JG AG2 ;累加,结果保存在bx中LEA DX,FUCMOV AH,9INT 21H ;回车换行LEA DX,STR1MOV AH,9INT 21H ;输出str1MOV CX,0MOV AX,BXMOV BX,10AG3:MOV DX,0DIV BXADD DL,48PUSH DXINC CXCMP AX,0JNZ AG3AG4:POP DXMOV AH,2INT 21HLOOP AG4JMP EN ;显示累加的结果ERO1: ;显示非法输入LEA DX,STR2MOV AH,9INT 21HJMP ENERO2: ;显示溢出LEA DX,STR3MOV AH,9INT 21HEN:MOV AH,4CHINT 21HCODES ENDSEND START功能:本累加程序能进行累加(结果不超过65535),进行非法输入的判断,进行超界判断。
汇编实验报告之累加
汇编实验报告——累加程序计算机2012级三班毛俊学号:912106840335一、实验思路:1、利用十进制数输入的方法实现n的输入,将n保存2、利用循环的知识设计程序实现n的累加(具体见流程图)3、将计算好的结果存入sum4、利用十进制输出实现sum数值的输出二、实验流程图:三、带有注释的程序代码:DA TAS SEGMENTmj1 db 'input n',13,10,'$'mj2 db 'n=','$'mj3 db 13,10,'sum=','$'sum dw ?n dw ?,'$'DA TAS ENDSSTACKS SEGMENTstack db 128 dup ('?')STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DA TASMOV DS,AXlea dx,mj1mov ah,9int 21h ;输出字符串mj1lea dx,mj2mov ah,9int 21h ;输出字符串mj2a1:mov ah,1 ;一号功能调用等待输入int 21hcmp al,0dh ;比较是否输入了回车jz a2 ;如果是则跳转至a2sub al,'0' ;减去0的ascii码,是输入的表示数值mov ah,0push ax ;保存输入的数值mov ax,nshl ax,1 ;n乘以2push axmov cl,2shl ax,cl ;计算得到8nmov bx,0pop bxadd ax,bxpop bxadd ax,bx ;计算10n与输入的数的和mov n,ax ;保存ax中的数至njmp a1 ;跳转至a1a2:mov ax,0mov bx,0 ;ax、bx置0a3:inc bx ;bx加一add ax,bx ;ax、bx相加cmp bx,n ; 比较bx和n的大小jnz a3 ; 不相等则跳转至a3mov sum,ax ; 否则将ax中的数存入sumlea dx,mj3mov ah,9int 21h ; 输出字符串mj3mov ax,sum ; 准备输出summov dx,0mov bx,10mov cx,0a4:div bx ; dx、ax中的数联合除以bx(10),将商放入ax,余数放入dx add dl,'0' ; 余数加上0的ascii码mov dh,0push dx ; 保存余数的ascii码mov dx,0inc cx ; cx加1,为之后的循环做准备cmp ax,0jnz a4 ; 若ax不为0则跳转至a4a5:pop dx ; a5 实现十进制的输出mov ah,2int 21hloop a5MOV AH,4CHINT 21HCODES ENDSEND START ;程序结束四、程序设计中的体会:在刚开始设计时遇到最大的麻烦就是如何进行十进制数的输入,开始时并没有注意输入的其实是ascii码,因此始终无法实现正确输入与计算。
汇编器实验报告
汇编器实验报告篇一:汇编实验报告实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUFDB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: PUSH DSXOR AX,AXPUSH AXMOVAX,DATAMOV DS,AXMOV BX,OFFSET BUF MOV CX,CNDEC CXMOV AL,[BX]INC BXLP:CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。
1图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM 对源程序文件进行汇编,其操作过程如图2所示。
汇编计算器程序实验报告
汇编计算器程序实验报告《汇编语⾔程序设计》综合程序设计实验报告题⽬:计算器⼀、项⽬简介在我们⽣活中⽆时不刻不⽤到计算,虽说计算并不是很⿇烦,但有的时候复杂的运算仍需要花费我们⼤量的时间去解决。
所以要有这样⼀个程序解决这个问题。
基于这个⽬的,⽽且在这个学期中,我们⼜接触到了汇编语⾔,运⽤汇编语⾔编写了计算器,来解决这个实际并且经常遇到的问题。
改程序主要针对加减乘除运算,可以进⾏相对复杂的问题,包含括号的相关运算。
该问题主要注意四则运算的优先级问题:惩处运算⽐加减运算优先级⾼,统计运算按从左到右的顺序计算,含有括号是应该先计算括号⾥⾯的内容。
⼆、⼩组成员具体分⼯徐其仲:调试汇编语⾔环境,设计汇编程序功能李秦:实现程序功能,撰写实验报告三、需求分析与设计问题:利⽤汇编语⾔编写计算器内容:从键盘输⼊⼀个四则运算表达式,按=号输出计算结果,并当结束时询问:是否继续?如果按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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
累加器程序设计实验报告1.设计思想(附流程图)
尽量实现模块化流程。
2.代码
DATAS SEGMENT
data1 db 'INPUT N:','$'
data2 db 6 dup('9')
data3 db 7 dup('$')
data4 db 0dh,'sum=','$';此处输入数据段代码
data5 db 0dh,'wrong number','$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;显示,输入数字串
lea dx,data1
mov ah,9h
int 21h
lea dx,data2
mov ah,0ah
int 21h
;检测输入字串的合法性,并可以给出错误提示
mov bx,dx
mov cl,[bx+1]
cmp cl,3h
ja end1
;将数字串转化成对应数字
mov ch,0
mov si,0
push si
add bx,2
mov bp,0ah
g1: pop ax
mov dx,0
mul bp
mov dx,ax
mov ah,0
mov al,ds:[bx+si]
sub al,30h
add ax,dx
push ax
inc si
loop g1
;实现累加
cmp ax,15fh
ja end1
pop dx
mov cx,ax
mov ax,0
push ax
g2: pop dx
inc dx
add ax,dx
push dx
loop g2
;处理结果,转换成十进制编码下的字符串pop dx
mov dx,0
mov cx,0
mov bx,0ah
push ax
g3: cmp ax,0ah
jb t1
div bx
jmp t2
t1: mov dx,ax
mov ax,0
t2: add dl,30h
push dx
mov dx,0
inc cx
cmp ax,0
jnz g3
;换行+提示显示得到的字符串
mov si,0
lea bx,data3
g4: pop ax
mov [bx+si],al
inc si
loop g4
lea dx,data4
mov ah,9h
int 21h
lea dx,data3
mov ah,9h
int 21h
jmp end2
;此处输入代码段代码
end1:lea dx,data5
mov ah,9h
int 21h
end2:MOV AH,4CH
INT 21H
CODES ENDS
END START
3.测试过程与结果
4.有关设计编写调试体会
本次实验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果、其中的关键点在于通过堆栈来存放数据,并在多次存放后依次提出数据。
程序的主体编写的很容易,但是细节的失误一度导致错误。
首先,我遇到了无法输入的问题。
我想到在以前作业中我是能输入字符串的。
于是我找到当时的代码,与我此次的代码反复比对。
当把data2 db 6 dup(0)改为data2 db 6 dup('9')后,输入问题得到解决。
后来,通过调试找到了一处错误,cx中没有移入期望的值。
重新检查代码后,发现是因为“word ptr”漏写。
最后一个问题是除法错误,通过逐步调试后,添加语句”mov dx,0”后问题得到解决。
通过这次实验我充分了解到程序编写可以通过不断的积累和调试方法的掌握得到提高。