汇编语言实验报告1 - 查看CUP和内存、编写初级程序

合集下载

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告在计算机科学中,汇编语言是一种底层的编程语言,直接使用计算机的指令集来写程序。

与高级语言(如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. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。

我们认为这个实验对我们今后的学习和工作都有很大的帮助。

结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

《汇编语言》实验报告

《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。

实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。

汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。

本实验通过编写汇编语言程序,加深对汇编语言的理解。

二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。

2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。

3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。

b.设置段寄存器,将数据段地址加载到DS寄存器中。

c.设置显示模式和光标位置。

d.将字符串逐个字符输出到屏幕上。

e.关闭显示模式。

4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。

5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。

三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。

通过程序分析和调试过程,加深了对汇编语言的理解和掌握。

四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。

通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。

同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。

在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。

总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。

汇编实验一实验报告

汇编实验一实验报告

汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。

输入“Q ” 退出程序。

再次启动Debug。

输入“r ”来显示CPU的当前状态和寄存器中的当前内容。

输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。

输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。

输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。

判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。

观察与前面的数据有无不同。

输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。

比较其中2000:0000 段中的数据。

相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。

答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。

2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。

输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。

输入“u ”来显示程序段中的指令序列。

然后输入“d CS:100 ” 来显示代码段中的数据。

观察显示内容。

“u CS:100 106 ”做反汇编,就是显示出汇编语句。

将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。

注意,跟踪程序前,要让IP 寄存器中的值是100H。

一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。

汇编语言实验报告一.doc

汇编语言实验报告一.doc

汇编语言实验报告(实验一)一.实验目的1.掌握汇编语言程序的上机步骤;(1)用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)。

(2)用MASM程序产生OBJ文件。

(3)用LIINK程序产生EXE文件。

(4)程序的运行(用DEBUG或在DOS下直接运行)。

2.掌握DEBUG的使用方法。

二.程序说明1.在数据段DATA中有两个数据X和Y,假设X=1122H,Y=3344H,编程求两个字的和,结果存放到Z单元中。

2.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串传送到DEST_BUFFER开始的单元中。

3.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串向下移10个单元。

三.设计思想1、将1122H和3344H分别存放在双字x,y中,定义双字Z,x,y带进位相加放入Z中。

2、定义数据段source_buffer,把数据段地址放入ds寄存器,定义附加段extra_buffer,把附加段地址放入es寄存器,移动整个字符串。

3、定义数据段附加段,先移高位,这样要移20次。

四.程序代码1、DATA SEGMENTX DW 1122HY DW 3344HZ DW ?DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义开始DW 40 DUP(0)STACK ENDS ;堆栈段定义结束CODE SEGMENT ;代码段定义结束ASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段的开始地址MOV DX,XADC DX,YMOV Z,DXMOV AH,4CH ;返回DOCINT 21HCODE ENDSEND START2、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,EXTRAMOV ES,AXLEA SI,SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START3、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS, AXMOV AX, EXTRAMOV ES, AXLEA SI, SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START五.结果分析并回答:1.设计的程序包含了几个段第1段包含数据段、堆栈段、代码段第2、3个包含数据、附加段、代码段2.你的代码经过编译和连接之后,总共占用多少个字节第1、2个占30个字节,第3个占32个字节3.调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?程序1第一条指令:1454:000 BB4B14 MOV AX,144B最后一条指令:1451:001E 807F0400 CMP BYTE PTR [BX+04],00程序2第一条指令:1450:0000 1E PUSH DS最后一条指令:1450:001E 8B0? MOV AX,[BX]程序3第一条指令:144D:0000 1E PUSH DS最后一条指令:144D:0020 8B5702 MOV DX,[DX+02]。

汇编语言实验报告

汇编语言实验报告

汇编语⾔实验报告福建农林⼤学⾦⼭学院(程序设计类课程)实验报告课程名称:汇编语⾔姓名:系:专业:年级:学号:指导教师:职称:2011~2012学年第⼆学期实验项⽬列表序号实验项⽬名称成绩指导教师1 实验⼀汇编程序的汇编及运⾏2 实验⼆顺序程序设计3 实验三分⽀循环程序设计4 实验四⼦程序设计5 实验五DOS功能调⽤总平均福建农林⼤学⾦⼭学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语⾔实验室号:_____实验设备号:实验时间: 5⽉2号上午三四节指导教师签字:成绩:实验⼀汇编程序的汇编及运⾏1.实验⽬的和要求(1)熟悉汇编程序的汇编、连接、执⾏过程(2)⽣成LST⽂件,查看LST⽂件(3)⽣成OBJ⽂件,修改语法错误(4)⽣成EXE⽂件(5)执⾏2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:/doc/e793d080bceb19e8b8f6ba49.html ;⽂本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引⽤程序:CREF.EXE(可有可⽆)。

3.实验内容及实验数据记录(1)将数据段输⼊,取名1.txt,保存在MASM⽂件夹下。

⽣成LST⽂件,(不必连接、运⾏)⽤EDIT查看1.LST⽂件。

试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输⼊有错误的⽂件,修改错误语句。

(MASM没有出现错误即可。

不必连接、运⾏。

)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DATAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输⼊正确的程序,汇编、连接、运⾏STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START1.算法描述及实验步骤编写各代码并存储为源程序asm⽂件,对其进⾏汇编、连接。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告引言汇编语言是一种低级语言,用于编写计算机的底层程序。

在计算机科学与技术领域,汇编语言程序设计是一门重要的课程。

本篇实验报告将介绍我在汇编语言程序设计实验中所学到的知识和经验。

实验目的本次实验的目的是通过编写汇编语言程序,加深对计算机底层原理的理解,并掌握汇编语言的基本语法和编程技巧。

实验环境在实验中,我使用了一台运行Windows操作系统的计算机,并安装了MASM 汇编语言开发工具。

实验内容1. 汇编语言基础知识在实验开始前,我先学习了汇编语言的基础知识。

汇编语言使用助记符来代表机器指令,与机器指令一一对应。

了解了寄存器、内存和指令的概念,并学会了如何使用它们来编写汇编程序。

2. 汇编语言程序设计在实验中,我编写了一些简单的汇编语言程序,以加深对汇编语言的理解和应用。

例如,我编写了一个计算两个数之和的程序,通过将两个数存储在寄存器中,并使用加法指令进行运算,最后将结果保存到指定的内存位置。

3. 汇编语言程序调试在编写汇编语言程序时,我遇到了一些错误和问题。

为了解决这些问题,我学会了使用调试工具来定位错误。

通过逐步执行程序,并观察寄存器和内存的变化,我能够找到程序中的错误并进行修正。

4. 汇编语言程序优化在实验中,我也尝试了对汇编语言程序进行优化,以提高程序的性能和效率。

通过减少指令的数量和使用更高效的算法,我成功地改进了程序的执行速度。

实验心得通过本次实验,我深刻体会到了汇编语言程序设计的重要性和挑战性。

汇编语言虽然复杂,但它能够直接操作计算机的硬件,提供了更高的灵活性和效率。

通过编写汇编语言程序,我不仅加深了对计算机底层原理的理解,还提高了问题解决和调试能力。

总结汇编语言程序设计实验是一门重要的课程,它为我们提供了学习计算机底层原理和编程技巧的机会。

通过实验,我掌握了汇编语言的基本知识和技巧,并成功编写和优化了汇编语言程序。

这次实验不仅加深了我的理论知识,还培养了我的实际操作能力。

武汉理工汇编实验报告

武汉理工汇编实验报告
实验课程名称:_汇编语言
实验项目名称
分支和循环结构程序设计
实验成绩
实验者
专业班级
软件zy1302班
组别
同组者
实验日期
2015年5月23日
第一部分:实验分析与设计
1.实验内容描述(问题域描述)
1. 编写程序,将BX与DX中较大的一个无符号数放到AX中。
利用debug的u、g、d等命令观察相关寄存器的内容。
三、主要仪器设备及耗材
PC机
第二部分:实验调试与结果分析
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
调试方法:
使用d命令、g命令、u命令等进行调试。
二、实验结果分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
三、小结、建议及体会
通过本次实验我掌握了子程序设计的基本方法、调用和返回指令的使用,学习了子程序设计时参数传递的几种方法。成功完成了本次实验题目的同时提高了自己对汇编语言子程序设计的认识。我始终坚持使用记事本工具进行编程,我相信这样可以进一步提高自己。
调试方法:用Debug的R命令查看、改变CPU寄存器的内容;
用Debug的D命令查看内存中的内容;
用Debug的E命令改写内存中的内容;
用Debug的U命令将内存中的机器指令翻译成汇编指令;
用Debug的T命令执行一条机器指令;
用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。
二、实验结果分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
用d命令查看Result存储单元的值
二、实验结果分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1、

汇编实验报告(适合初学者)

汇编实验报告(适合初学者)

汇编实验报告(适合初学者)汇编语言程序设计一、实验目的与要求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③.程序运行结果。

汇编实验一实验报告

汇编实验一实验报告

汇编实验⼀实验报告汇编语⾔程序设计实验报告课程名称汇编语⾔程序设计班级姓名学号指导教师汇编语⾔程序设计实验⼀DEBUG 程序使⽤技巧1.寄存器和内存开始Debug 程序。

输⼊“Q ” 退出程序。

再次启动Debug。

输⼊“r ”来显⽰CPU的当前状态和寄存器中的当前内容。

输⼊“r AX ”和“1234”,AX 寄存器中的内容变为1234。

输⼊“r DS ”和“2000”,DS 寄存器中的内容变为2000。

输⼊“d DS:1000 ”来显⽰数据段中80H 字节数据,把数据抄在这⾥:输⼊“f DS:1000 1100 77 ”再显⽰⼀次这80H 字节。

判断这条指令的作⽤是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输⼊“d 2000:1000 ”来显⽰数据段中80H 字节数据。

观察与前⾯的数据有⽆不同。

输⼊“d 1900:0100 ”和“d 1ff0:0100 ”来显⽰两个存储段中的内容。

⽐较其中2000:0000 段中的数据。

相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以⽤不同的段起始地址和偏移量组合,把不容内容存⼊相同的内存段中。

答:相同段落中的数据相同, 程序员可以⽤不同的段起始地址和偏移量组合,把不容内容存⼊相同的内存段中。

2.输⼊机器码,使⽤单步和断点退出Debug,再重新启动Debug。

输⼊“r ”观察CPU 的状态,下⼀条指令是什么?答:下⼀条指令是ADD [BX+SI],AL使⽤两种⽅式输⼊⼀段程序,第⼀种⽅式:直接输⼊机器码。

输⼊“u ”来显⽰程序段中的指令序列。

然后输⼊“d CS:100 ” 来显⽰代码段中的数据。

观察显⽰内容。

“u CS:100 106 ”做反汇编,就是显⽰出汇编语句。

将这⼏句汇编语句记录下来:使⽤输⼊“r ”观察CPU 的状态,使⽤“t ”来跟踪程序,直⾄最后⼀条指令执⾏完毕。

注意,跟踪程序前,要让IP 寄存器中的值是100H。

实验1汇编语言实验环境与基本操作

实验1汇编语言实验环境与基本操作

实验1 汇编语言实验环境与基本操作班级:计科(高职)12-2 姓名:韩长莉学号: 201203014062 上机时间: 2014.4.14 上机地点:一机房指导老师:尉秀梅一.实验目的:1.学习debug的主要用法,熟悉R,D,E,U,T,A等常用的命令。

2.理解堆栈的工作原理,push和pop指令的执行步骤。

3.掌握一个完整的汇编程序从写出到执行的过程,熟悉用debug跟踪程序的执行过程。

二.实验内容:1.查看cpu和内存,用机器指令和汇编指令编程(p35)2.用机器指令和汇编指令编程(p71)3.编程、编译、连接、跟踪(94页)三.实验步骤1.查看cpu和内存,用机器指令和汇编指令编程(p35)(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,cpu中相关寄存器中内容的变化。

提示:可用E命令和A命令,以两种方式将指令写入内存。

注意用t命令执行时,cs:ip的指向。

写清楚具体用这两种方式的操作方法。

C:\Users\Administrator>debug-e 1000:0 b8 20 4e 05 16 14 bb 00 20 01 d8 89 c3 01 d8 b8 1a 00 bb 26 00 00 d8-u 1000:01000:0000 B8204E MOV AX,4E201000:0003 051614 ADD AX,14161000:0006 BB0020 MOV BX,20001000:0009 01D8 ADD AX,BX1000:000B 89C3 MOV BX,AX1000:000D 01D8 ADD AX,BX1000:000F B81A00 MOV AX,001A1000:0012 BB2600 MOV BX,00261000:0015 00D8 ADD AL,BL1000:0017 28752D SUB [DI+2D],DH1000:001A 807C0429 CMP BYTE PTR [SI+04],291000:001E 7554 JNZ 0074-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=13C0 IP=0100 NV UP EI PL NZ NA PO NC13C0:0100 0000 ADD [BX+SI],AL DS:0000=CDCS13C0:1000-ripIP 0100-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0000 NV UP EI PL NZ NA PO NC1000:0000 B8204E MOV AX,4E20-tAX=4E20 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0003 NV UP EI PL NZ NA PO NC1000:0003 051614 ADD AX,1416-tAX=6236 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0006 NV UP EI PL NZ NA PE NC1000:0006 BB0020 MOV BX,2000-tAX=6236 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0009 NV UP EI PL NZ NA PE NC1000:0009 01D8 ADD AX,BXAX=001A BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0015 OV UP EI PL NZ NA PE CY1000:0015 00D8 ADD AL,BL-tAX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0017 NV UP EI PL NZ AC PO NC1000:0017 28752D SUB [DI+2D],DH DS:002D=0D-e 1000:17 00 dc 00 c7 b4 00 00 d8 04 9c-u 1000:171000:0017 00DC ADD AH,BL1000:0019 00C7 ADD BH,AL1000:001B B400 MOV AH,001000:001D 00D8 ADD AL,BL1000:001F 049C ADD AL,9C1000:0021 44 INC SP1000:0022 032C ADD BP,[SI]1000:0024 30724D XOR [BP+SI+4D],DH1000:0027 3C07 CMP AL,071000:0029 7749 JA 00741000:002B A2A756 MOV [56A7],AL1000:002E FE064057 INC BYTE PTR [5740]1000:0032 83C605 ADD SI,+051000:0035 813C2C53 CMP WORD PTR [SI],532CAX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0017 NV UP EI PL NZ AC PO NC1000:0017 00DC ADD AH,BL-rcsCS 1000:1000-ripIP 0017:0-rAX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0000 NV UP EI PL NZ AC PO NC1000:0000 B8204E MOV AX,4E20-tAX=4E20 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0003 NV UP EI PL NZ AC PO NC1000:0003 051614 ADD AX,1416-tAX=6236 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0006 NV UP EI PL NZ NA PE NC1000:0006 BB0020 MOV BX,2000-AX=2640 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=001B NV UP EI PL NZ NA PO NC1000:001B B400 MOV AH,00-tAX=0040 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=001D NV UP EI PL NZ NA PO NC1000:001D 00D8 ADD AL,BL-tAX=0066 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=001F NV UP EI PL NZ NA PE NC1000:001F 049C ADD AL,9C-t(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。

汇编语言实验报告

汇编语言实验报告

实验1 查看CPU和内存,用机器指令和汇编指令编程1.预备知识:Debug的使用2.实验任务(第45页)(1)已跟踪执行(2)(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。

此生产日期不能被改变,因为其具有‘只读’属性。

(5)实验2 用机器指令和汇编指令编程1.预备知识:Debug的使用2.实验任务(第71页)(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

从第一空开始依次如下:ax=5BEAax=5CCAbx=30F0bx=6022sp=FE 220FE 5CCAsp=FC 220FC 6022sp=FE 6022sp=100H 5CCAsp=FE 220FE 30F0sp=FC 220FC 2F32说明:此题可能因机子软、硬件环境不同而导致答案不一致!(2)仔细观察图3.19的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?答:因为用T指令进行调试时,会产生中断。

而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。

实验三汇编语言程序的调试与运行1.将下面的程序保存为t1.asm文件,生成可执行文件t1.exe; assume cs:codesgcodesg segmentmov ax,2000hmov ss,axmov sp,0add sp,4pop axpop bxpush axpush bxpop axpop bxmov ax,4c00hint 21hcodesg endsend2.用Debug跟踪t1.exe的执行过程,写出每一步执行后相关寄存器中的内容3.PSP的前两个字节是CD 20,用Debug加载t1.exe,查看PSP的内容程序段前缀PSP格式:偏移字节数说明000002中断20H000202以节计算的内存大小(利用这个可看出是否感染引导型病毒)000401保留000505至DOS的长调用000A02INT 22H 入口 IP000C02INT 22H 入口 CS000E02INT 23H 入口 IP001002INT 23H 入口 CS001202INT 24H 入口 IP001402INT 24H 入口 CS001602父进程的PSP段值(可测知是否被跟踪)001814存放20个SOFT号002C02环境块段地址(从中可获知执行的程序名)002E04存放用户栈地址指针00321E保留005003DOS调用 ( INT 21H / RETF )005302保留005507扩展的FCB头005C10格式化的FCB1006C10格式化的FCB2007C04保留008080命令行参数长度(不包含总为最后的0D)及参数也是程序运行期间缺省的DTA实验四 [bx]和loop指令的联合使用1.编程:向内存0:200~0:23F依次传送数据0~63assume cs:codecode segmentmov ax,0020hmov ds,axmov bx,0mov dl,0mov cx,40hs: mov [bx],dlinc bxinc dlloop smov ax,4c00hint 21hcode endsend2.编程:向内存0:200~0:23F依次传送数据0~63,程序中只能使用9条指令(包括程序的2条返回语句)assume cs:codecode segmentmov ax,0020hmov ds,axmov bl,0mov cx,64s: mov [bx],blinc blloop smov ax,4c00hint 21hcode endsend3.下面程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。

汇编实验报告一实验总结

汇编实验报告一实验总结

汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。

实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。

随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。

在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。

实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。

我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。

同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。

实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。

通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。

希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是一种底层的计算机语言,通过直接操作计算机的硬件和寄存器来实现程序的功能。

在本次实验中,我们学习了汇编语言的基本语法和编程技巧,并通过实践编写了一些简单的程序。

本报告将对实验过程和结果进行总结和分析。

一、实验目的本次实验的主要目的是让我们掌握汇编语言的基本语法和操作方式,培养我们对计算机底层运行机制的理解能力。

通过编写汇编程序,我们可以更深入地了解计算机的运行原理,并且可以更加高效地编写一些底层程序。

二、实验环境本次实验使用的是Windows操作系统,并且我们使用了MASM汇编器来编译和运行我们的汇编程序。

MASM是一款经典的汇编语言开发工具,具有强大的功能和广泛的应用领域。

三、实验内容在本次实验中,我们完成了以下几个任务:1. 编写一个简单的汇编程序,实现两个数字的相加功能。

2. 编写一个汇编程序,实现对一个字符串进行反转。

3. 编写一个汇编程序,实现对一个数组进行排序。

四、实验步骤1. 首先,我们学习了汇编语言的基本语法和指令集。

了解了汇编语言中的寄存器、指令和内存等概念,并且学会了如何使用它们来编写程序。

2. 接着,我们开始编写第一个程序,实现两个数字的相加功能。

通过学习汇编语言中的加法指令,我们可以将两个数字加载到寄存器中,并且使用相应的指令进行相加操作。

3. 然后,我们编写了第二个程序,实现对一个字符串进行反转。

通过学习汇编语言中的循环和条件判断指令,我们可以逐个字符地读取字符串,并且将它们按照相反的顺序存储到新的内存空间中。

4. 最后,我们编写了第三个程序,实现对一个数组进行排序。

通过学习汇编语言中的比较和交换指令,我们可以对数组中的元素进行排序,并且将排序结果存储到新的内存空间中。

五、实验结果通过以上的实验步骤,我们成功地完成了编写汇编程序的任务,并且得到了正确的结果。

我们的程序可以实现两个数字的相加、字符串的反转和数组的排序功能,并且运行速度较快,效果较好。

《汇编语言》课内实验报告(3)

《汇编语言》课内实验报告(3)

《汇编语言》课内实验报告学生姓名:及学号:学院:理学院班级:课程名称:汇编语言实验题目:80X86指令系统指导教师刘力实验师姓名及职称:方向实验师2012年5月23日一、实验题目:80X86指令系统二、实验目的:1. 8086/8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。

2. 8086/8088指令:INC,DEC,LOOP,INT 20H(程序终止),寄存器SI,DI。

3. 8086/8088汇编语言伪操作:BYTE PTR,WORD PTR。

4. 求多字节加法程序。

三、实验内容:1.内存操作数及各种寻址方式使用:内容:MOV AX,1234HMOV AX,[1000H]MOV BX,1002HMOV BYTE PTR[BX],20HMOV DL,39HINC BXMOV [BX],DLDEC DLMOV SI,3MOV [BX+SI],DLMOV [BX+SI+1],DLMOV WORD PTR[BX+SI+2],2846H步骤:1)用A命令键入上述程序,并用T命令逐条运行。

2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

2.多字节加法程序。

程序:MOV DI,1000HMOV CX,8MOV SI,2000HCLCLOP: MOV AL,[SI]ADC [DI],ALINC SIINC DILOOP LOPINT 20H步骤:1)用A命令键入此程序2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

例如:被加数是十六进制01234567887654 32,加数是010*******abcdef.都是八字节。

D:\>debug-e10000B5F:1000 00.32 22.54 00.76 00.88 59.67 E2.45 E5.2359.01-e20000B5F:2000 74.ef 15.cd 45.ab 6E.05 74.04 65.03 72.0220.013)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?-d10000B5F:1000 32 54 76 88 67 45 23 01-d20000B5F:2000 EF CD AB 05 04 03 02 01四、实验结果:图1 使用a输入命令图2 执行第一步,查看初始内存内容,立即数寻址图3 执行第二步,查看当前内存内容,直接寻址图4 执行第三步,查看修改前的内存内容,立即数寻址图5 执行第四步,查看修改后的内存内容,基址变址寻址图6 执行第五步,立即数寻址,执行第六步,寄存器寻址,执行第七步,基址变址寻址,查看修改后的内存内容图7 执行第八步,寄存器寻址,执行第九步,立即数寻址,执行第十步,基址变址寻址,查看修改后的内存内容图8 执行第十一步,查看修改后的内存内容,相对基址变址寻址图9 执行第十二步,查看修改前后的内存内容,基址变址寻址图10 有关指令中BYTE PTR及WORD PTR伪操作不加不行图11 使用a输入指令图12 用e输入计算的数据图13 用g执行命令得到结果,用d查看结果,结果存放在内存的1000处,不正确五、实验体会或遇到问题:本次实验的步骤比较繁琐,这使我充分认识到汇编语言运行快程序复杂的特点,在这次实验中,我学到了更多汇编知识,并且大大提高了汇编实际编程操作的熟练度,加深了我对汇编语言的理解。

计算机课程实验报告-《汇编语言与微机原理》[1]

计算机课程实验报告-《汇编语言与微机原理》[1]

常熟理工学院
计算机科学与工程学院实验报告 2013-2014学年第 2 学期
课程名称汇编语言与微机原理
专业计算机科学与技术
班级计科121
学号090312115
姓名王海波
实验地点N6-106
指导老师张雪伍
实验报告要求
1.在实验课前要认真预习实验内容,熟习实验的原理、方法及算法等。

2.根据实验指导书要求,认真完成实验内容;实验结束后,按照实验报告的要求认真填写相关内容。

3.实验时要带好实验指导书、实验报告本。

4.实验时要严肃认真,不得互相抄袭。

5.实验课的成绩由实验预习、实验过程、实验结果和实验报告四部分构成。

用Debug进行实验的示例实验报告必须包含内容说明:。

汇编实验报告,(例文)

汇编实验报告,(例文)

汇编实验报告,(例文)《汇编语言程序设计》实验报告2021年11月★★FGL实验一:汇编语言运行环境及方法、简单程序设计I:实验要求:1、绘制程序流程图2、结合你的调试过程,整理其中用到的debug命令的使用方法和效果截图,并解释每一步骤的结论3、调试中遇到的问题及解决方法 II:具体实验过程:a.程序流程图1、开始输入源程序根据实验步骤进行汇编比较string1与string2输出NO输出Match结束b.调试过程及debug命令使用方法·-u命令反汇编:·-g0b·-d0:查看数据段内容·-g:执行完程序显示结果根据数据段显示的数据内容可知,在;两字符串分别为"Movethecursorbackward."和"Movethecursordackward.",因而可根据debug命令中的-e将第二个字符串中的d修改为b则可使结果显示为MATCH!具体步骤如下:如下图所示,对内存中1436:0029的存储单元进行-e29命令修改的前后数据的显示,可看到已经将d修改为b,从而-g命令运行的结果是Match.(注:-a 和-f命令亦可修改数据区内容但使用时有一定的区别)·-q命令退出debug调试:·-t命令的单步调试:(该过程中IP不断变化着)实验二:用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等I:实验要求:1、任务1的指令序列2、整理本次试验中用到的debug命令的使用方法及效果截图II:实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。

3、掌握简单指令的执行过程。

III:实验内容:任务一、设堆栈指针SP=2021H,AX=3000H,BX=5000H;请编一程序段将AX 和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

汇编语言实验报告

汇编语言实验报告

xxxxxxx学院计算机工程系《汇编语言》·实验报告
实验一、查看CPU和内存,用机器指令和汇编指令编程2014.09.24实验二、用机器指令和汇编指令编程2014.10.08
实验三、编程、编译、连接、跟踪2014.10.15
实验四、[bx]和loop的使用2014.10.22
实验五、编写、调试具有多个段的程序(一)2014.10.29
实验六、编写、调试具有多个段的程序(二)2014.11.05
实验七、实践课程中的程序2014.11.12
实验八、寻址方式在结构化数据访问中的应用2014.11.19
实验九、分析一个奇怪的程序2014.11.26
实验十、根据材料编程2014.12.3
实验十一、编写子程序2014.12.10
实验十二、综合练习:求无符号字节序列中的最大值和最小值,设有一个字节序列,其存储首地址为3000H,字节数为008H,利用学过的方法编程,求出该序列中的最大值和最小值2014.12.17。

汇编实验一 -查看CPU和内存 用机器指令和汇编指令编程

汇编实验一 -查看CPU和内存 用机器指令和汇编指令编程

实验一查看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:(1)检查串行与并行端口检查在存储器段地址为40[0]的BIOS数据区的内容。

所显示的第一个4个字表示串行端口COM1到COM4,端口是在03F8、02F8、03E8、02E8。

第二个4字节表示并行端口LPT1和LPT4,03BC、0378、0278、9FC0。

(2)检查系统设备(3)检查键盘Shift状态位于BIOS数据区417H单元的是键盘Shift状态的第一个字节。

首先要确认NumLock和CapLock是关闭的,然后用命令D去查看40:17单元;然后再打开两个Lock键并重复显示命令,40:17中的值应为60 00。

( 4 )检查显示状态位于BIOS数据区449H单元的是第一个显示数据区。

键入D 40:49。

第一个字节包含当前显示方式(如03表示彩色),而第二个字节是屏幕上的列数。

还可以在40:84H单元找到行数。

2 考察ROM BIOS(1)检查版本通告计算机的版本通告是嵌入在ROM BIOS中的FE000H单元的。

版权通告可能比较长,超出了已经显示的部分,为了继续查看,可以再按一次D键并跟着按一下回车键。

(2)检查ROM BIOS数据ROM BIOS的制造日期是按mm/dd/yy记录的,起点在FFFF5H单元3:用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改用Debug的D命令查看内存中的内容如果我们想知道内存10000H处的内容,可以用“d 段地址:偏移地址”的格式来查看使用“d 段地址:偏移地址”的格式,Debug将列出从指定内存单元开始的128个内存单元的内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的
1.熟练掌握debug的基本功能和用法
2.学习使用汇编指令编程
3.掌握汇编语言源程序从写出到执行的过程
4.熟练掌握[bx]和loop来实现循环运算
5.掌握将数据、代码、栈放入不同的段中
6.编写、调试具有多个段的程序
二、实验内容及要求
(一)Debug的功能及应用
1.简要说明debug中R、D、E、U、T、A 命令的功能。

2.查看内存中的内容,观察产生的结果,并解释原因:
PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。

提示,如果读者对实验的结果感到疑惑,请仔细阅读第1章中的1.15节。

(二)使用汇编指令编程
1.使用debug将下面程序段输入内存,逐条执行,根据指令实际执行后的情况填空。

mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ; ax=
add ax,[2] ; ax=
mov bx,[4] ; bx=
add bx,[6] ; bx=
push ax ; sp= ;修改的内存单元的地址是内容为push bx ; sp= ;修改的内存单元的地址是内容为pop ax ; sp= ; ax=
pop bx ; sp= ; ax=
push [4] ;sp= ;修改的内存单元的地址是内容为push [6] ;sp= ;修改的内存单元的地址是内容为
(三)[bx]和loop的使用
1. 编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov ax,4c00h”和“int 21h”。

提示:每次传送的是字节
2. 把mov ax,4c00h之前的指令复制到0:200处,补全程序。

要求:(1)复制的是什么?从哪里到哪里?
(2)该程序一共多少个字节?你是如何知道要复制的字节的数量?assume cs:code
code segment
mov ax,
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,
s:
mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
(四)编写多个段的程序
1. 程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。

assume cs:code
a segment
db 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
?
code ends
end start
2. 把(1)(2)(3)三个程序(程序见教材p133~136)的最后一条伪指令“end start”改成“end”(即不指名程序的入口),哪个程序可以正确执行?并说明原因。

三、实验解答过程及结果
(一)Debug的功能及应用
1.简要说明debug中R、D、E、U、T、A 命令的功能。

R命令:查看,修改CPU中寄存器的内容
D命令:查看内存中的内容
E命令:修改内存中的内容
U命令:将内存中的内容解释为机器指令和对应的汇编指令
T命令:执行CS:IP指向的内存单元处的命令
A命令:以汇编指令的形式向内存中写入指令
2.查看内存中的内容,观察产生的结果,并解释原因:
找到的生产日期如下图:
使用E命令没发生改变
解释:生产日期这段地址所在空间是ROM地址空间,具有只读属性,无法被更改。

(二)使用汇编指令编程
1. 使用debug将下面程序段输入内存,逐条执行,根据指令实际执行后的情况填空。

push ax ; sp=00FE;修改的内存单元的地址是 220FE 内容为C0FC push bx ; sp=00FC;修改的内存单元的地址是 220FC_ 内容为6021 pop ax ; sp=00FE;ax= 6021
pop bx ; sp=0100;ax= C0FC
push [4] ; sp=00FE;修改的内存单元的地址是 220FE 内容为30F0 push [6] ; sp=00FC;修改的内存单元的地址是 220FC 内容为2F31
(三) [bx]和loop的使用
1. 编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov ax,4c00h”和“int 21h”。

assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bl,0
mov cx,64
s:mov [bx],bl
inc bl
loop s
mov ax,4c00h
int 21h
code ends
end
2. 把mov ax,4c00h之前的指令复制到0:200处,补全程序。

mov ax, cs
mov cx, 17h
要求:
(1)复制的是什么?从哪里到哪里?
答:复制的是mov ax,4c00h之前的指令,从mov ax,cs到loop s。

(2)该程序一共多少个字节?你是如何知道要复制的字节的数量?
答:复制的是代表指令的数据,一共有17个字节。

先填写好较大的一个数字(我填了20),编译链接运行程序,用U命令查看0020处的地址。

可以看到1oop 指令后的指令的地址是0020:0017,故知一共17个字节。

(四)编写多个段的程序
1. 程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中
答:code段中代码如下:
mov ax,a
mov ds,ax
mov bx,0
mov ax,b
mov ss,ax
mov sp,16
mov cx,8
s:
push [bx]
inc bx
inc bx
loop s
mov ax,4c00h
int 21h
2. 把(1)(2)(3)三个程序(程序见教材p133~136)的最后一条伪指令“end start”改成“end”(即不指名程序的入口),哪个程序可以正确执行?并说明原因。

答:(1)、(2)不能正确执行(入口默认为data段的第一条指令),(3)能正确执行。

如果不指明程序的入口,编译器自动默认整个代码的第一条指令为程序的入口。

四、实验总结
通过这次实验,我熟练掌握了debug的基本功能和用法,掌握了使用[bx]和loop 来实现循环运算的方法,学会使用汇编指令编写、调试具有多个段的程序。

在实验的过程中,我学会了查看CUP和内存、编写初级程序,懂得了更多的汇编知识,在汇编语言的学习上又有了新的进步。

相关文档
最新文档