第一次汇编语言实验报告
- 格式:doc
- 大小:48.50 KB
- 文档页数:4
(2)指出以上汇编语言指令中源操作数使用的是什么寻址方式?
(3)用T命令单步跟踪,观察指令的执行结果,并记录
1、查看内存单元内容,pc机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH 的某几个单元
中,请找到这个生产日期并试图改变它
2、向内存从B8100H开始的单元中填写数据,如:
-e b810:0000 01 01 02 02 03 03 04 04
三、实验报告要求
把实验任务中要求的各项记录填写在相应的题目下(可以文字或图片)作为实验报告上交。
图片可以利用prtscn 键拷贝。
四、实验小结
写出本次实验小结:
通过本次实验学会了如何下载安装以及配置dosbox masm611
R命令:查看程序运行前的寄存器组初始值
U:查看程序反汇编代码
T:单步调试;格式:T[=地址] ;T[=地址][x]
D:观察内存变化D起始位置;D 起始位置结束位置;D 起始位置L 长度
G地址,程序从当前位置直接运行到指定地址处停下。
E地址修改内存中的内容,:E 起始地址字节值表;E 起始地址
Q 退出DEBUG程序,返回DOS
让我知道了一定要看清楚,想清楚,检查清楚,再点回车不然要该好多地方。
汇编语言实验报告在计算机科学中,汇编语言是一种底层的编程语言,直接使用计算机的指令集来写程序。
与高级语言(如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汇编语言上机实验报告1实验内容:1.编写一个程序,求解给定整数的阶乘并输出结果。
2.编写一个程序,求解斐波那契数列中的第n个数并输出结果。
实验步骤:1.阶乘程序:编写一个汇编程序,通过输入一个整数n,求解n的阶乘。
程序流程如下:1.1.定义变量n,用于保存输入的整数。
1.2.将n与0进行比较,如果n为0,则直接将1输出作为阶乘的结果,并跳转到程序结束;否则继续执行下一步。
1.3.将n的值保存到寄存器中,并将n减1,保存到n中。
1.4.将n与0进行比较,如果n为0,则直接跳转到程序结束;否则继续执行下一步。
1.5.将n的值与寄存器中保存的值相乘,将结果保存到寄存器中。
1.6.将n减1,保存到n中并跳转到第4步。
1.7.输出寄存器中的结果作为阶乘的结果,并跳转到程序结束。
2.斐波那契数列程序:编写一个汇编程序,通过输入一个整数n,求解斐波那契数列中的第n个数。
程序流程如下:2.1.定义变量n,用于保存输入的整数。
2.2.将n与0进行比较,如果n为0,则直接将0作为结果输出,并跳转到程序结束;否则继续执行下一步。
2.3.将n与1进行比较,如果n为1,则直接将1作为结果输出,并跳转到程序结束;否则继续执行下一步。
2.4.将n的值保存到寄存器中,并将n减1,保存到n中。
2.5.将n与0进行比较,如果n为0,则跳转到第9步;否则继续执行下一步。
2.6.将n减1,保存到n中并跳转到第7步。
2.7.将n的值与寄存器中保存的值相加,将结果保存到寄存器中。
2.8.将n减1,保存到n中并跳转到第5步。
2.9.输出寄存器中的结果作为斐波那契数列中第n个数的结果,并跳转到程序结束。
实验结果:1.阶乘程序运行结果:请输入一个整数:55的阶乘为:1202.斐波那契数列程序运行结果:请输入一个整数:6斐波那契数列中第6个数为:8实验总结:通过本次实验,我学习了如何在汇编语言中编写程序解决一些基本的数学问题。
汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。
2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。
4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。
4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。
4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。
5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。
希望对你有所帮助!。
汇编实验报告(适合初学者)汇编语言程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。
2.掌握简单汇编语言程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验内容根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1.若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。
试编写汇编程序,完成Z<-((W-X)/5-Y)某(R+2)①.程序算法流程图。
开始初始化AL=(W-X)AL=(W-X)/5CL=(W-X)/5-YAL=(R+2)Z=((W-X)/5-Y)某(R+2)结束②.源程序清单。
DATASEGMENTXDB1H;数据定义YDB0HRDB3HWDB6HZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;段寄存器定义MOVAL,WSUBAL,X;求(W-X)CBW;字节转换为字MOVCL,5IDIVCL;(W-X)/5MOVCL,ALMOVAL,Y;(W-X)/5-YSUBCL,ALMOVAL,RADDAL,2;(R+2)IMULCL;((W-X)/5-Y)某(R+2)MOV[Z],AXADDAL,30H;输出结果MOVDL,AL;MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART③.程序运行结果。
④.调试过程中遇到的问题和解决的方法。
还未能实现动态的输入数据,对指令的不熟悉,以至于在程序中经常性出错,得掌握固定的程序功能。
2.试编写一个程序,测试数是否是奇数。
如该数是奇数,则把DL的第0位置1,否则将该位置0。
①.程序算法流程图。
开始AL=XAL右移一位得CF否CF==1是DL与000000001B相或DL与11111110B相与结束②.源程序清单。
DATASEGMENTXDB9H;数据定义DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;段寄存器定义MOVAL,XSHR AL,1;利用右移一位得到cf值,JB判断 JB NEXT;为1则为奇数ANDDL,11111110B;偶数DL第一个数置为0JMPEXITNEXT:ORDL,000000001B;奇数DL第一个数置为1EXIT:MOVAH,4CHINT21HCODEENDSENDSTART③.程序运行结果。
《汇编语⾔程序设计》实验报告(⼀)《汇编语⾔程序设计》实验报告(⼀)姓名学号系别班级指导教师实验⽇期课程名称《汇编语⾔程序设计》同组实验者⼀、实验名称:实验⼀汇编程序和连接程序的使⽤⼆、实验⽬的:1. 熟悉汇编语⾔的上机环境;2. 学习EDIT,MASM,LINK程序的使⽤;3. 掌握建⽴、汇编、链接、运⾏汇编语⾔程序的过程。
三、实验类型:验证四、实验材料、⼯具、或软件多媒体计算机、WINDOWS XP系统或纯DOS系统、MASM6.11以上版本或汇编语⾔程序设计实验集成环境。
五、实验要求1. 编写⼀程序,要求⽐较两个字符串STRING1和STRING2所含字符是否相同,若相同则显⽰‘MATCH’,若不相同则显⽰‘NO MATCH’。
⽤串⽐较功能来完成程序所要求的功能。
2.完成课堂例题,并⽤DEBUG运⾏,观察结果。
六、试验内容与步骤:(附上必要的调试过程及运⾏结果截图,可加附页)试编写⼀程序,要求⽐较两个字符串STRING1和STRING2所含字符是否相同,若相同则显⽰‘MATCH’,若不相同则显⽰‘NO MATCH’。
⽤串⽐较功能来完成程序所要求的功能。
上机步骤如下:1、调⽤/doc/284972810.html程序建⽴汇编语⾔源程序.ASM建⽴好的源⽂件以EX_1.ASM为⽂件名存盘DATA SEGMENTSTRING1 DB 'Visual C++ 'STRING2 DB 'Visual Basic'COUNT EQU $-STRING2MESS1 DB 'MATCH!’,13,10,’$'MESS2 DB 'NO MATCH!’,13,10,’$'DATA ENDScode segmentassume cs:code,ds:data,es:datamain proc farstart:push dssub ax,axpush axmov ax,datamov ds,axmov es,ax;main programmov cx,countlea si,string1lea di,string2cldrepz cmpsbjz mes1mov dx,offset mess2jmp disp0mes1:mov dx,offset mess1disp0: mov ah,9int 21hexit: retmain endpcode endsend start2、⽤汇编程序MASM对源⽂件汇编产⽣⽬标⽂件.obj键⼊命令 masm ex_1;如汇编指⽰出错则需重新调⽤EDIT程序修改错误,直到汇编通过产⽣.obj⽂件为⽌。
汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际操作和编程实践,深入理解汇编语言的基本概念、指令系统和编程方法,提高对计算机底层硬件操作的认识和编程能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与算术运算实现两个 16 位整数的加法和减法运算,并将结果存储在指定的内存单元中。
使用不同的数据传送指令,如 MOV、PUSH、POP 等,将数据在寄存器和内存之间进行传输。
2、逻辑运算与移位操作对给定的 8 位二进制数据进行逻辑与、或、异或运算,并观察结果。
执行移位操作,包括逻辑移位(SHL、SHR)和算术移位(SAL、SAR),理解移位对数据的影响。
3、分支与循环结构使用条件跳转指令(如 JZ、JE、JC 等)实现根据不同条件执行不同代码段的功能。
编写循环结构程序,如使用 LOOP 指令实现对数组元素的求和操作。
4、子程序调用定义一个子程序,实现特定的功能,如计算一个数的阶乘。
在主程序中调用子程序,并传递参数和获取返回值。
四、实验步骤1、数据传送与算术运算实验首先,在代码编辑器中编写汇编代码,定义数据段和代码段。
在数据段中初始化两个 16 位整数,例如 MOV WORD PTR DATA1, 1000H 和 MOV WORD PTR DATA2, 2000H 。
在代码段中使用 ADD 和 SUB 指令进行加法和减法运算,如 ADD WORD PTR RESULT_ADD, DATA1 和 SUB WORD PTRRESULT_SUB, DATA2 。
编译和链接代码,生成可执行文件。
运行程序,查看内存中存储的运算结果。
2、逻辑运算与移位操作实验类似地,定义数据段和代码段。
在数据段中初始化 8 位二进制数据,如 MOV AL, 01010101B 。
在代码段中使用AND、OR、XOR 指令进行逻辑运算,以及SHL、SHR、SAL、SAR 指令进行移位操作。
实验题目一
数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M中绝
对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在
M+2(n+1)单元中。
编写程序如下:
DATA SEGMENT
M DW 1,2,3,-4,43,-6,7,-8
;定义数组M
COUNT EQU $-M
;令count=2n(n为M中元素个数)
DW 2 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,0
MOV DI,0
MOV CX,COUNT
SHR CX,1
MOV BX,0
L3:
MOV AX,M[SI]
;L3:判断元素是否小于零,是的话取绝
对值;否的话直接转去L1
CMP AX,0
JGE L1 ;jge 大于等于则跳
NEG AX ;求补指令
L1:
;L1:比较元素大小并取较大的存
入BX,同时将其地址存入DI
CMP BX,AX
JG L2 ;大于则跳
XCHG BX,AX
MOV DI,SI
L2:
;L2用于控制SI自加2
INC SI
INC SI
LOOP L3
MOV AX,M[DI]
MOV [M+COUNT],AX
;将最大元素的值存入M+2n
MOV [M+COUNT+2],DI
;将最大元素地址存入M+2(n+1)
CODE ENDS
END START
实验题目二
设计一程序,接收从键盘输入的数字(1~5),并对每个数字的输入次数进行
计数,计数结果存放在以COUNT为首地址的数组中。(最好能将计数结果打印出
来)。
实验分析:
这个实验要求我们利用分支循环结构来实现,当输入为n(1<=n<=5)时,则进
入对n的加1分支,然后返回继续输入。当输入为不等于1-5的数字时则结束输入。
跳转到输出,然后分别输出1-5的个数
编写程序如下:
DATAS SEGMENT
COUNT db 5 dup (0)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
push ds
sub ax,ax
push ax
MOV AX,DATAS
MOV DS,AX
next:
mov ah,01h
int 21h
cmp al,'1'
jz bijiao1 ;jz当zf=1跳转
cmp al,'2'
jz bijiao2
cmp al,'3'
jz bijiao3
cmp al,'4'
jz bijiao4
cmp al,'5'
jz bijiao5
jmp exit
bijiao1:
mov cl,COUNT
add cl,1
mov COUNT[0],cl
jmp next
bijiao2:
mov bx,1
mov cl,COUNT[bx]
add cl,1
mov COUNT[bx],cl
jmp next
bijiao3:
mov bx,2
mov cl,COUNT[bx]
add cl,1
mov COUNT[bx],cl
jmp next
bijiao4:
mov bx,3
mov cl,COUNT[bx]
add cl,1
mov COUNT[bx],cl
jmp next
bijiao5:
mov bx,4
mov cl,COUNT[bx]
add cl,1
mov COUNT[bx],cl
jmp next
exit:
mov dl,COUNT[0]
add dl,30h
mov ah,02
int 21h
mov dl,COUNT[1]
add dl,30h
mov ah,02
int 21h
mov dl,COUNT[2]
add dl,30h
mov ah,02
int 21h
mov dl,COUNT[3]
add dl,30h
mov ah,02
mov dl,COUNT[4]
add dl,30h
mov ah,02
int 21h
int 21h
mov ah,4ch
int 21h
CODES ENDS
END START
输入:
程序运行结果:
当输入序列为123233时输出123,有1个1,2个2,3个3。