汇编语言实验报告(循环)
汇编语言循环程序实验报告

一、实验目的(1) 加深对循环结构的理解;(2) 掌握循环程序的设计方法;(3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。
同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
2.设STR字符串是以0结尾。
试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。
3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。
三、算法描述流程图实验内容1、2、3的流程图分别为图1、图2、图3。
图1 图2 图3四、实验步骤1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。
同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
1)输入源程序:DATA SEGMENTBUF DW 23,123,-12,-210,45,0,90,-453BUF1 DW 8 DUP(0)BUF2 DW 8 DUP(0)A DW ?B DW ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXLEA BX, BUFLEA SI, BUF1LEA DI, BUF2MOV A,0MOV B,0MOV CX,8L0: MOV AX,[BX]CMP AX,0JGE L1MOV [DI],AXADD DI,2INC BJMP NEXTL1: MOV [SI],AXADD SI,2INC ANEXT: ADD BX,2LOOP L0MOV AH, 4CHINT 21HCODE ENDSEND START2)运行程序。
汇编语言实验报告

合肥工业大学实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二. 实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三. 实验过程和程序基础题:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
附加题:1. 从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x2. 完成BX中1的个数的统计。
3. 用串操作指令将DS:0000开始20个字节初始化为:0CCH。
并将这20个字节的内容复制到其后的20个字节里。
四. 实验结果(包括必要的截图)基础题 1:基础题 2:附加题 1:附加题 2:附加题 3:五. 实验体会1. 在汇编语言中,变量的其实都是地址。
2. 在Debug中,数值都是16进制的。
3. 在读写内存中的数据时,必须指出数据类型是byte还是word。
汇编实验报告二

汇编语言程序设计实验报告实验名称循环结构与子程序设计实验班级学号姓名日期成绩评阅人软件学院一、实验目的与意义1、掌握循环结构程序的设计、子程序的设计及调试技巧与方法。
2、加深对循环结构的理解。
3、熟练掌握DEBUG的常用指令,学会用DEBUG调试程序。
4、掌握子程序的结构和使用方法。
5、加深对于循环指令的使用和理解。
二、实验环境操作系统:Windows XP软件名称:Editplus3.0,MASM5.0实验地点:综合楼311三、实验的预习内容实验四:单重循环程序设计实验预习内容:在实验前要了解循环程序的组成结构,要着重了解循环控制指令、串操作指令和操作功能,以及在循环控制过程中寄存器的使用,这样便于在程序中操作寄存器,为我们的编程提供了巨大的便利。
我们还需要掌握分支跳转的指令,虽然本实验是单重循环的实验,但仍然需要分支结构来实现跳转。
我们还需要掌握编制循环控制结构的技巧。
实验五:多重循环程序设计实验预习内容:在实验前应该了解多重循环结构的特点,掌握单重循环和多重循环的汇编指令的使用方法,以及各指令中寄存器的使用情况,这样在编写程序时可以更加灵活的使用寄存器。
我们还应该了解编制多重循环结构的技巧。
实验六:子程序及宏指令设计实验预习内容:在实验前要了解子程序和宏指令的定义,了解有关子程序和宏指令的使用方法,以及子程序和宏指令的调用方法。
四、实验的步骤与调试方法(1)单重循环程序设计实验实验步骤:首先,我将5个数字存储到DATA1的连续单元里,将数字的个数存储到CNT当中。
之后,我在代码段当中,取出DATA1中的数据,将其与100相比,如果两个数相等就输出Y,如果没有,则继续取出下一个数据,直到将所有的数据都比较完,如果都不相等的话则输出N。
对于使用字符串指令来实现该功能,大体原理相同,主要区别为使用了搜索字符SCASB。
异常与调试方法:1、在实验中,发现每次的结果都不正确,部分代码如下:DSEG SEGMENT ;定义数据段DATA1 DW 1,2,3,100CNT DW 4DSEG ENDS经过分析发现,单个数据定义为了字类型,数的大小和性质不对,在声明一组数放在一个地址空间中,我们应该将其定义为字节类型的数据。
汇编语言实验七实验报告

汇编语言实验七实验报告汇编语言实验七实验报告一、实验目的本次实验的目的是了解多重循环结构的编程技巧,并使用它们对数据进行排序和搜索。
二、实验内容本实验内容主要包括:1.使用多重循环结构实现数据的排序,如冒泡排序、快速排序等;2.使用多重循环结构实现数据的搜索,如线性搜索、二分搜索等;3.使用结构化编程实现控制结构,如条件判断、循环结构等来完成数据的排序和搜索。
三、实验过程1. 冒泡排序本实验使用多重循环结构,采用冒泡排序的方法,实现对一组数据的排序。
具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 0, 5, 2count dw 6temp dw ?.codemain procmov ax,@data mov ds,axmov ax,array mov si,axmov cx,count mov cl,2l1:mov di,simov bx,[di] inc dil2:mov ax,[di] cmp ax,bxjng l3mov temp,ax mov [di],bx mov bx,temp l3:inc diloop l2inc sidec cxjnz l1 ;循环结束 mov ax,countsub ax,2l4:mov di,simov ax,[di]mov bx,[di+2]cmp bx,axjng l5mov temp,axmov [di],bxmov [di+2],temp l5:inc sidec axjnz l4 ;循环结束 tmov ax,4c00hint 21hmain endpend main上述代码主要实现了多重循环结构,包括两个重复循环:一个用来对数据进行比较,另一个用来循环处理剩下的数据项,直到排序完成。
2. 线性搜索接下来实现线性搜索的功能,具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 5, 0, 2count dw 6key dw 4add dw 0.codemain procmov ax,@datamov ds,axmov ax,arraymov di,axmov cx,countl1:cmp [di], keyjne l3jmp l2l3:inc diloop l1l2:mov ax,add mov bx,count sub bx,1mul bxadd ax,key mov bx,2div bxinc axmov bx,4mul bxmov di,axmov ax,array add ax,dimov si,axmov ax,[si] mov bx,keyje l4mov ax,-1l4:mov ax,4c00hint 21hmain endpend main上述代码主要实现了线性搜索的功能,通过比较数组中的每一项与给定的关键字,如果相同,则记录下该项的偏移量,然后根据偏移量计算出索引,最终返回数组中搜索到的数据。
循环指令编程实验报告

一、实验目的1. 熟悉循环指令的概念和作用。
2. 掌握循环指令在程序设计中的应用。
3. 培养分析问题和解决问题的能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 语言:C++三、实验内容1. 循环指令的概念和作用循环指令是程序设计中常用的一种指令,用于重复执行一段代码,直到满足特定条件为止。
循环指令分为三类:顺序循环、条件循环和无限循环。
2. 循环指令的应用(1)顺序循环:顺序循环是最简单的循环结构,按照语句顺序依次执行,直到循环体结束。
其格式如下:```for (初始化语句; 循环条件; 循环变量增量){// 循环体}```(2)条件循环:条件循环在满足特定条件时执行循环体,不满足条件时退出循环。
其格式如下:```while (条件表达式){// 循环体}```(3)无限循环:无限循环在满足特定条件时退出循环,否则会一直执行。
其格式如下:```do{// 循环体}while (条件表达式);```3. 实验步骤(1)编写一个程序,使用顺序循环计算1到100的和。
```c++#include <iostream>using namespace std;int main(){int sum = 0;for (int i = 1; i <= 100; i++){sum += i;}cout << "1到100的和为:" << sum << endl;return 0;}```(2)编写一个程序,使用条件循环计算用户输入的正整数之和。
```c++#include <iostream>using namespace std;int main(){int sum = 0;int num;cout << "请输入一个正整数(输入0结束):";while (cin >> num && num != 0){sum += num;}cout << "输入的正整数之和为:" << sum << endl;return 0;}```(3)编写一个程序,使用无限循环计算1到1000的偶数之和。
汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。
二进制数。
要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。
本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。
下编写完整的汇编语言程并生成可执行文件运行。
二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。
构程序。
简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。
2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。
data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。
系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。
十六进制数通过ASCII码对照转换为二进制数。
A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。
汇编语言试验报告
实验二报告一、实验目的掌握汇编语言分支结构程序设计方法以及int 21h 常用中断方法。
二、实验内容编写程序,实现 3 个数比较大小,并从高到低输出结果。
调试该程序,并输出显示结果本实验是考查学生对分支程序设计的掌握程度,掌握条件转移指令的应用。
三、实验分析运用循环语句将三个数分别输入缓冲区,使用比较字符,运用跳转语句,实现选择升序还是降序排序,再对三个进行比较然后排序。
排序完成后再分别赋给缓冲区中的数组,最后输出!四、实验代码DATA SEGMENTbuf db 3 dup (?)buf1 db?str db 0ah,0dh,'input 3 numbers :$'str0 db 0ah,0dh,'If print in asc order,input 0;else input 1 :$'str1 db 0ah,0dh,'The sort in an descending order:$'str2 db 0ah,0dh,'The sort in a ascending order:$'str3 db 0ah,0dh,'---------------------------------------------$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:mov ax,datamov ds,axmov cx,3lea dx,str ;显示提示信息mov ah,09hint 21hlea bx,bufloop1:mov ah,01hint 21hmov [bx],alinc bxloop loop1lea dx,str0 ;显示提示信息mov ah,09hint 21hmov dx,offset buf1 ;为输出的字符选择存储空间mov ah,01hint 21hcmp al,30h ;输入的字符与0比较jz ascend ;若输出的字符等于0,则跳转到ascend,执行升序descend: ;降序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljae n1 ;大于等于则跳转xchg al,bln1:cmp al,cljae n2xchg al,cln2:cmp bl,cljae n3xchg bl,cln3:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str1mov ah,09hint 21hcall pascend: ;升序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljnae n4 ;小于等于则跳转xchg al,bln4:cmp al,cljnae n5xchg al,cln5:cmp bl,cljnae n6xchg bl,cln6:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str2mov ah,09hint 21hcall pp procmov si,offset bufmov cx,3fe:mov dl,[si]mov ah,02hint 21hmov dl,20h ;显示空格mov ah,02hint 21hinc siloop femov ah,4chint 21hretp endpCODE ENDSEND START五、总结通过本次实验,我发现自己对跳转语句的不熟悉,导致实验过程中遇到好多错误,还有没能实现进行多个数的比较,有待改进。
汇编语言实验报告_6
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
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)冒泡排序也遇到一些困难。
调试结果:。
汇编语言实验报告
汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。
2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。
4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。
4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。
4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。
5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。
希望对你有所帮助!。
汇编语言实验报告
next2: cmp array[si],80 jae L3 jl next3 next3: cmp array[si],70 jae L4 jl next4 next4: cmp array[si],60 jae L5 inc dh inc si dec dl jnz next jmp exit L1:inc al inc si dec dl jnz next jmp exit L2:inc bh inc si dec dl jnz next jmp exit L3:inc bl inc si dec dl jnz next jmp exit L4:inc ch inc si dec dl jnz next jmp exit L5:inc cl inc si dec dl jnz next
exit:ret count endp output proc near ;子程序二,用来输出相关内容 mov ah,0 push dx push cx push bx push ax lea dx,string1 ;输出100分的人数 mov ah,9 int 21H pop bx mov dl,bl add dl,30h mov ah,2 int 21H call enter lea dx,string2 ;输出90至99分的人数 mov ah,9 int 21H pop bx mov dl,bh add dl,30h mov ah,2 int 21H call enter lea dx,string3 ;输出80至89分的人数 mov ah,9 int 21H mov dl,bl add dl,30h mov ah,2 int 21H call enter lea dx,string4 ;输出70至79分的人数 mov ah,9
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
exit:
mov ah,02h
mov ax,4c00h
int 21h
codes ends
end
6、实验体会
通过本次实验,我了解到了循环程序执行的过程,之前只能写一些简单的顺序程序,但很多程序并不是只有顺序的,而是可能由分支、循环、多重循环、子程序等等组成,所以掌握循环程序是必须的。除此之外,我还练习了程序的流程,对后面的学习有一些了解。
西安财经学院信息学院
《汇编语言程序设计》实验报告
实验名循环结构程序设计实验室实验楼403实验日期2013/05/28
1、实验目的及要求
1.通过练习,基本掌握循环程序的思想
2.练习分析和理解题意,达到合理的算法和数据结构
二、实验环境
硬件环境:一台微型计算机;
软件环境:windows 7,debug环境,masm
从截图中可以看出ax累加后的内容为十六进制的13BA,即十进制结果为5050,正好是1到100之和,说明结果正确,程序正常结束。
5、源程序清单
程序源代码如下:
codes segment
assume cs:codes
mov ax,0h
mov bx,01hmov cx,64h来自s:add ax,bx
add bx,01h
同时cx自动减1,为63H,第一次循环结束。
接下来继续执行刚才的步骤,ip由刚才的000e,跳到0009,再次将ax与bx进行相加,即0+1+2=3,之后,bx再加一,而cx也减一,第二次循环结束。再之后,ip再次跳回0009执行刚才的步骤,一直循环直到cx值为0为止。
为了节省时间,我们用-g命令执行程序查看结果:
3、实验内容
实现1到100之和。
四、实验过程:
实验1:
(1)进入DOS方式,进入文件夹存放位置,E:\masm
(2)用MASM程序把ASM文件转换成OBJ文件
再生成.exe文件。
(3)进入debug环境,查看指令
(4)单步执行指令
可知,首先给ax、bx、cx赋值,ax存放相加的结果,初值为0,bx=1,cx为循环次数十进制100的十六进制表示法64H。再将ax与bx相加结果送入ax,即0+1=1,并且bx自动加1。