汇编语言程序设计实验
- 格式:docx
- 大小:1.07 MB
- 文档页数:33
实验四循环分支程序设计一&实验目的1、熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
2、掌握循环及分支程序的设计方法;3、学会针对不同的问题,选用不同的循环分支结构设计方法;二&实验环境微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。
三&实验要求1、使用正确的指令格式和程序结构编写实验内容要求的所有程序;2、对编写或改写的程序进行汇编连接时,注意对错误信息的处理;3、熟悉源程序汇编、连接的使用方法。
四&实验内容1、使用程序1掌握汇编语言程序上机过程,2、阅读程序2,理解程序功能并上机运行,使用debug检验结果。
3、编写一个程序,判别键盘上输入的字符;若是1-9字符或A-Z ,则显示之;若为a-z字符,均显示“A-Z”;若是<ESC>(其ASCII码为1BH),则结束程序。
4、改写任务三中的程序:输入小写字母a时,显示内容为aA*输入小写字母a时,显示内容为a***输入小写字母a时,显示内容为aa***五&实验步骤1、用EDIT编辑软件,编写.ASM源程序。
2、对其进行汇编及连接,产生.EXE文件。
3、在DOS下运行.EXE文件进行。
4、实验程序清单1)程序1:stack segmentdw 512 dup(?)stack endsdata segmentstring db 'Hello, Everybody !','$'data endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hcode endsend start2)程序2data segmentx db 20hy dw ?data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xmov bl,10xor ah,ahshl ax,1mov bx,axmov cl,2shl ax,cladd ax,bxmov y,axmov ax,4c00hint 21hcode endsend start3)程序3:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bnd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start4)改写程序1:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bmov ah,2int 21hmov al,'*'nd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start5)改写程序2:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndmov al,'*'mov cx,2ok: mov dl,almov ah,2int 21hloop oknd: mov dl,almov ah,2int 21hjmp againint 21hcode endsend start6)改写程序3:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndmov dl,almov ah,2int 21hmov al,'*'mov cx,2ok: mov dl,almov ah,2int 21hloop oknd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start六&思考题:编写一个程序,显示AL寄存器中的两位十六进制数。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
汇编语言程序设计实验小结本次汇编语言程序设计实验旨在通过实践,加深对汇编语言编程的理解和掌握,并通过编写和调试汇编程序,提升实际应用能力。
在本次实验中,我学到了许多关于汇编语言程序设计的知识和技巧,也遇到了一些挑战和问题。
以下是我对这次实验的小结。
在实验开始之前,我进行了充分的学习和准备。
通过阅读教材和参考资料,我了解了汇编语言的基本概念、指令集和编程规范。
同时,我还学习了调试工具的使用方法,以便在编写程序时能够进行实时调试,提高效率和准确性。
在实验过程中,我遇到了一些困难和挑战。
其中之一是理解和运用汇编语言的指令集。
由于汇编语言是一种低级语言,指令的数量和种类相对较多,需要深入了解每个指令的功能和使用方法。
为了解决这个问题,我通过查阅资料和请教老师,逐步掌握了常用指令的用法,并能够根据实际需求选择合适的指令进行编程。
另一个困难是调试程序时出现的错误。
由于汇编语言是一种底层语言,对程序员的要求较高,一旦出现错误,往往需要仔细检查每一步的操作和数据处理过程。
在实验中,我遇到了一些错误,例如指令书写错误、寄存器使用错误等。
为了解决这些问题,我采取了逐步调试的方法,通过观察变量的值、输出结果的正确性等来定位错误的位置,并逐步修改代码,最终成功解决了问题。
在实验过程中,我也发现了汇编语言编程的一些优点和特点。
首先,汇编语言可以直接访问底层硬件资源,使得程序的执行效率较高。
其次,汇编语言的灵活性较高,可以实现一些高级语言难以实现的功能。
例如,通过汇编语言编写的程序可以直接操作内存,实现对特定位置的数据读取和存储。
再次,汇编语言的指令集相对简单,易于学习和理解。
因此,掌握汇编语言编程对于深入理解计算机体系结构和底层工作原理非常有帮助。
通过本次实验,我不仅学到了汇编语言程序设计的知识和技巧,还培养了分析和解决问题的能力。
在以后的学习和工作中,我将继续学习和掌握汇编语言编程,将其应用于实际项目中,提高程序的性能和效率。
汇编语言程序设计实验指导实验一:字符串的显示及回车换行一.实验目的a)熟悉、掌握汇编语言的框架b)实现字符串的显示与回车换行二、实验重难点a)重点:需要运用mov指令实现数据的传送,操作结束须退出指令退出操作。
1.mov指令格式:Mov dest,src ;dest为目的操作数,src为源操作数Mov指令是双目操作,其中dest可为寄存器(R)、储存器(M.M),src可为R、M.M、立即数([IMM])。
2.退出指令:Mov ah,4chInt 21hb)难点:汇编语言不提供显示输出指令,也不提供回车换行指令,需借用DOS中的显示功能以及其中显示一个字符的功能。
如:回车符的ASSII码是0dh(13),换行符的ASSII码是0ah(10)。
1.借用dos显示输出:Mov dx,offset strMov ah,9Int 21h2.回车换行的实现:Mov dl,0dhMov ah,2 回车Int 21hMov dl,0ahMov ah,2 换行Int 21h三.程序代码a)字符串hello的显示:Data segment ;数据段开始Str1 db “hello$”;$为结束符Data ends ;数据段结束Code segment ;代码段开始Assume cs:code,ds:data Start:mov ax,dataMov ds,ax 取数据Mov dx,offset str1Mov ah,9Int 21hMov ah,4chInt 21hCode ends ;代码段结束End start四、实验结果b)实现hello world的回车换行显示:数据段添加:Str2 db “world$”代码段添加:Mov dl,0dhMov ah,2Int 21hMov dl,0ahMov ah,2Int 21h运行结果:实验二:减法运算及混合运算一.实验目的a)熟悉、掌握汇编语言的框架b)熟悉、掌握加法指令、减法指令c)实现加减法运算及其混合运算d)熟悉、掌握使用Debug命令方法及步骤二、实验重难点a)重点:在进行加减运算及其混合运算须用到加法指令、减法指令,需熟练掌握各条指令格式及功能。
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。
2. 掌握汇编语言程序设计的基本方法。
3. 通过实验,加深对微机原理的理解。
二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。
2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。
四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。
汇编语言程序设计实验小结汇编语言程序设计实验是计算机科学与技术专业中非常重要的一门课程。
通过这门课程的学习,我们可以更深入地理解计算机底层的工作原理,掌握汇编语言的编程技巧,提高我们的编程水平和代码优化能力。
在这篇小结中,我将分享我在汇编语言程序设计实验中的学习心得和经验,并总结出一些重要的要点。
一、实验背景汇编语言程序设计实验主要通过实践来加深我们对汇编语言的理解和应用。
通过编写和调试汇编语言程序,我们可以深入了解CPU的工作原理、寄存器的使用方法以及程序的执行过程等。
同时,通过实验,我们还可以学习如何对程序进行优化,提高程序的运行效率。
二、实验过程1. 实验环境搭建在进行汇编语言程序设计实验之前,我们首先需要搭建实验环境。
通常情况下,我们需要安装一个适合的汇编语言开发工具,比如MASM、TASM等。
同时,我们还需要一台支持汇编语言开发的计算机。
2. 实验内容汇编语言程序设计实验的内容通常包括基本的汇编语言语法、数据传送与运算指令、条件跳转与循环指令、子程序调用与返回、堆栈操作等。
我们需要根据实验指导书中给出的要求,编写相应的汇编程序,并进行调试。
3. 调试与优化在编写汇编程序的过程中,我们可能会遇到一些错误和问题。
这时候,我们需要进行调试,找出错误的原因,并进行修正。
在调试的过程中,我们可以使用调试器进行单步调试,查看寄存器的值以及内存的变化,帮助我们理解程序的执行过程。
同时,为了提高程序的运行效率,我们还需要进行优化。
可以通过改变算法、减少不必要的操作、优化循环结构等方式来提高程序的性能。
三、学习收获1. 深入了解计算机底层工作原理通过汇编语言程序设计实验,我更加深入地了解了计算机底层的工作原理。
我学会了如何使用汇编语言编写程序,了解了指令的执行过程,掌握了寄存器的使用方法,进一步提高了对计算机硬件的理解。
2. 提高了编程水平和代码优化能力汇编语言是一种较底层的编程语言,编写汇编语言程序需要我们对计算机底层有深入的理解。
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
实验三:16位机的汇编语言程序设计一实验目的(1) 熟悉监控命令A,D,E,G,R,T,U的使用;(2) 熟悉16位机的29条汇编指令,理解每条汇编指令执行的操作;(3) 能够利用仿真软件TEC2000Sim提供的29条汇编指令编写简单的汇编程序设计。
二实验设备PC电脑一台;需安装软件TEC2000Sim。
三实验准备指令格式、寻址方式和指令系统是讲解、设计和实现控制器部件的基础,但讲解起来枯燥抽象,要让学生真正对这部分教学内容有适度了解和切身体会,开展汇编语言程序设计的实验是必要的,实验不太难,又能提高学生的学习兴趣,有利于加深对指令及指令系统的理解,有利于掌握教学计算机的使用,为开展后续其他教学实验项目做好必要准备。
这项实验最好在16位字长的教学计算机上完成,也可以使用一个我们开发的、运行在PC机上的仿真软件TEC2000sim来进行。
实验内容包括学习教学机的监控程序的使用方法,即如何通过7个监控命令A、U、E、D、R、G、T操作和运行教学计算机。
A命令用于向计算机内输入汇编语言程序的源码,执行单个语句的汇编操作,并把汇编产生的指令代码程序保存到存储器的指定区域;U命令用于对已经保存在内存中的指令代码程序执行反汇编操作,反汇编的结果将被显示到仿真终端的屏幕上,供操作者检查看或修改。
E命令用于向计算机的存储器输入16进制的信息或修改某些存储单元的内容;D命令用于卸出计算机的存储器中的信息并依规定格式显示到仿真终端的屏幕上;R命令用于显示或修改通用寄存器的内容;G命令用于启动内存中的一个指令代码程序,启动后程序连续运行,运行结束后将返回到监控程序的断点,继续运行监控程序;T命令也用于启动内存中的一个指令代码程序,但会使程序处于单指令运行状态,即每发一次T命令只执行用户程序的一个语句,之后就自动回到监控程序的运行状态,使操作者可以跟踪程序的运行过程,随时检查程序的运行结果。
实验的重点内容是学习汇编语言程序设计。
目录目录 (1)实验一利用DEBUG熟悉常用指令的使用 (2)一、实验目的 (2)二、示例 (2)三、实验题 (2)实验二汇编程序和连接程序的使用 (6)一、实验目的。
(6)二、示例。
(6)三、实验题。
(8)实验三顺序结构程序设计 (11)一、实验目的 (11)二、示例 (11)三、实验题 (12)四、实验报告 (15)实验四循环结构程序设计 (16)一、实验目的 (16)二、示例 (16)三、实验题 (18)实验五分支结构程序设计 (21)一、实验目的 (21)二、示例 (21)三、实验题 (22)实验六子程序设计 (29)一、实验目的 (29)二、实验题 (29)实验一利用DEBUG熟悉常用指令的使用一、实验目的熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。
二、示例请分别用一条汇编语言指令完成如下功能:(过程略)。
1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
ADD AL,[BX][SI]2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。
ADD WORF PTR [0520H],3412H三、实验题1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。
要求输入指令,相应存储单元的内容要事先设置,单步P执行,观察执行结果。
(设置存储器的值)①.MOV AX,1200H②.MOV AX,BX③.MOV AX,[1200H]④.MOV AX,[BX]⑤.MOV AX,1100[BX]⑥.MOV AX,[BX][SI]⑦.MOV AX,1100[BX][SI]⑧ .MOV AX,[BP+SI+04]2、上机调试、验证教材习题3.15。
单步执行、观察运行结果并与自己的判断进行比较。
(1)1234(2)4321(3)CFA0(4)9D60实验二汇编程序和连接程序的使用一、实验目的。
熟悉汇编语言的上机环境,学习EDIT,MASM,LINK程序的使用,掌握建立、汇编、链接、运行汇编语言程序的过程。
二、示例。
试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。
用串比较功能来完成程序所要求的功能。
上机步骤如下:1、调用 程序建立汇编语言源程序.ASM建立好的源文件以EX_1.ASM为文件名存盘DATA SEGMENTSTRING1 DB 'Visual Basic'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 mes1 mov dx,offset mess2 jmp disp0mes1:mov dx,offset mess1 disp0: mov ah,9int 21h exit: ret main endp code endsend start修改字符串,使其不同,并对以上源程序重新汇编、连接、运行,结果输出为:NO MATCH!修改前:修改后:三、实验题。
1、上机完成以上示例程序。
2、完成课堂例题,并用DEBUG运行,观察结果。
data segmentX db 6Y db ?data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov al,x mov y,5add y,al mov ah,4ch int 21h code ends end start 程序:改变后:实验三顺序结构程序设计一、实验目的学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG 中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。
二、示例试问如下程序执行到exit时,字单元A、B、D、D+1、D+2中的内容各是什么?源程序如下:data segmenta db 10b dw 20d db 30,40,50data endscode segmentassume cs:code,ds:datastart:mov al,datamov ds,axmov al,d+1add al,dmov a,almov al,d+1add al,d+2mov b,aladd d,10add d+1,20add d+2,30exit: mov ah,4chint 21hcode endsend start阅读以上程序,运行程序并用debug调试分析出结果。
字单元A:4C5A。
字单元B:2B5A。
字单元D:3C2B。
字单元D+1:503C。
字单元D+2:0050。
三、实验题1、求表达式Y=A*X2+B*X+C的值,已知A、B、C分别存放在DA TAA、DATAB、DATAC 字节单元,X存放在TABL字节单元,结果Y放入RESULT字单元。
要求:①在DEBUG下多次修改X的值,观察执行结果Y;②修改原程序,从键盘上输入X的值,观察执行结果Y。
(见书P471)① data segmentdataa db 1datab db 3datac dw 5tabl db 7result dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov al,tablmul almul dataamov bx,axmov al,tablmul databadd ax,bxadd ax,datacmov result,axexit:mov ah,4chint 21hcode endsend start运行结果为16进制的4B,即75,计算正确。
在修改X值为9后,运算结果为71,即113,计算正确。
继续修改X值为3,运行结果为17,即23,计算正确。
②data segmentdataa db 1datab db 3datac dw 5tabl db ?result dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,01int 21hsub al,30hmov tabl,almul almul dataapush axmov al,tablmul databpop bxadd ax,bxadd ax,datacmov result,axexit:mov ah,4chint 21hcode endsend start从键盘上输入X值为7,输出结果为4B。
2、上机完成教材习题3.11(P108),写出正确结果。
data segmenttable dw 10,20,30,40,50entry dw 3data endscode segmentASSUME DS:data,cs:codestart:mov ax,datamov ds,axmov bx,offset tableadd bx,entrymov ax,[bx]code endsend startAX=1E00H。
四、实验报告写出程序清单,记录运行结果;总结DEBUG中U、E、D、T、G命令的功能。
U命令的功能:将主存内容按照机器代码形成汇编指令显示;E命令的功能:用于修改主存内容;D命令的功能:显示主存单元的内容;T命令的功能:每执行一条指令就显示运行结果;G命令的功能:从指定地址处开始运行程序,直到遇到断点或者程序正常结束。
实验四循环结构程序设计一、实验目的理解单重循环与多重循环程序的结构及执行过程;掌握循环控制指令的用法,会使用数据串操作指令编程;熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。
二、示例1、单循环程序已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。
【参考程序如下】DSEG SEGMENT;定义段。
DATA1 DB'ABCDEFG3';定义字符串赋值给变量。
DATA2 DB'ABCDEF3G';定义字符串赋值给变量。
CNT DW8;定义变量。
DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG;赋值。
MOV DS,AXMOV DL,31H;赋值。
LEA SI,DATA1;取变量的偏移地址。
LEA DI,DATA2;取变量的偏移地址、首地址。
MOV CX,CNTDEC SI;SI自减。
DEC DI;DI自减。
AGAIN:INC SI;自增。
INC DI;进行比较。
MOV AL,[SI];地址的内容赋值给AL。
CMP AL,[DI];进行比较。
LOOPZ AGAIN;如果相等,循环到AGAIN。
JZ DISP;若相等,则跳转到显示。
DEC DL;DL自减。
DISP: MOV AH,2;赋值。
INT 21H;中断语句。
MOV AH,4CHINT 21HCSEG ENDSEND START输入相同数据时:DSEG SEGMENT;定义段。
DATA1 DB'ABCDEFGG';定义字符串赋值给变量。
DATA2 DB'ABCDEFGG';定义字符串赋值给变量。
CNT DW8;定义变量。
DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG;赋值。