汇编语言实验报告(循环)
汇编语言循环程序实验报告
一、实验目的(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.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令JMP无条件转移指令JMP 是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令JXX条件转移指令可分为三大类:1).简单条件转移指令指令。
根据单个标志位的状态判断转移条件。
标志位指令转移条件意义CF JC CF=0 有进位/借位JNC CF=1 无进位/借位ZF JE/JZ ZF=1 相等/等于0JNE/JNZ ZF=0 不相等/不等于0 SF JS SF=1 是负数JNS SF=0 是正数OF JO OF=1 有溢出JNO OF=0 无溢出PF JP/JPE PF=1 有偶数个1JNP/JPO PF=0 有奇数个12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<b< p="">JBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
汇编语言实验报告
汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际操作和编程实践,深入理解汇编语言的基本概念、指令系统和编程方法,提高对计算机底层硬件操作的认识和编程能力。
二、实验环境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 指令进行移位操作。
汇编语言实验报告
实验报告一:汇编语言实验基础一.实验目的:1. 熟悉汇编语言程序的开发过程以及汇编语言常用软件的使用方法2. 掌握DEBUG常用命令的使用方法二、实验内容:1.DEBUG 命令使用2.8088常用指令练习三、实验步骤:(一)DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符'_ '。
2、用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令 F 110 11F 41 重复上二项实验,观察结果并比较。
5、用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H(5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
(二)8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序,特别注意左边的机器码。
3)用T命令逐条运行这些指令,注意有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
汇编实验报告
汇编实验报告一、实验目的本次汇编实验的主要目的是深入了解汇编语言的基本语法和编程结构,掌握汇编程序的编写、调试和运行过程,提高对计算机底层硬件的理解和操作能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与运算编写程序实现不同寄存器之间的数据传送。
进行简单的算术运算,如加法、减法、乘法和除法,并将结果存储在指定的寄存器或内存单元中。
2、逻辑运算与移位操作进行逻辑运算,包括与、或、非和异或操作。
实现移位操作,如左移和右移,并观察数据的变化。
3、分支与循环结构使用条件跳转指令实现分支结构,根据不同的条件执行不同的代码段。
运用循环指令实现循环操作,如计数循环和条件循环。
4、子程序调用编写子程序来完成特定的功能,如计算阶乘、查找最大值等。
在主程序中调用子程序,并传递参数和获取返回值。
四、实验步骤1、数据传送与运算打开 MASM 编程工具,新建一个汇编源文件。
使用 MOV 指令将数据从一个寄存器传送到另一个寄存器,例如:MOV AX, BX 。
进行加法运算,使用 ADD 指令,如:ADD AX, CX 。
进行减法运算,使用 SUB 指令,如:SUB DX, BX 。
乘法运算使用 MUL 指令,除法运算使用 DIV 指令,并将结果存储在合适的位置。
2、逻辑运算与移位操作在源文件中使用 AND 、OR 、NOT 和 XOR 指令进行逻辑运算,例如:AND AX, BX 。
对于移位操作,使用 SHL (左移)和 SHR (右移)指令,如:SHL AX, 2 表示将 AX 的值左移 2 位。
3、分支与循环结构使用 CMP 指令比较两个值,然后根据比较结果使用 JZ (等于零跳转)、JL (小于跳转)、JG (大于跳转)等条件跳转指令实现分支结构。
对于循环结构,使用 LOOP 指令实现计数循环,例如:MOV CX, 10 ;LABEL: ;LOOP LABEL 。
汇编(循环、分支、子程序)实验报告
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,
汇编循环程序设计(一)实验报告
§1《微机原理与接口技术》课程实验报告一、实验目的1. 掌握循环程序设计的方法2. 掌握正确分配与使用寄存器。
二、实验环境1.硬件环境: 微型计算机一台。
2.软件环境: 装有MASM 5.0, DEBUG, LINK, EDIT等应用程序。
三、实验重点及难点循环程序的结构及程序设计方法。
四、实验内容假设有一组数据: 5, -4, 0, 3, 100, -51, 请编一程序, 判断: 每个数是大于0, 等于0, 还是小于0;并输出其判断结果Y。
1, 当X >0Y= 0, 当X =0-1, 当X <0五、实验分析和实验体会(1)实验分析:程序代码:DATA SEGMENTX DB 5,-4,0,3,100,-51NUM EQU $-XY DB 6 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE;DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,XLEA DI,YMOV CX,NUMBJ: MOV AL,[SI]CMP AL,0JGE BIGEMOV BL,-1JMP NEXT BIGE:JE ZEROMOV BL,1JMP NEXT ZERO:MOV BL,0 NEXT:MOV [DI],BLINC SIINC DILOOP BJMOV AX,4CHINT 21H CODE ENDSEND START运行过程:(2)实验体会:通过本次实验使我掌握循环程序设计的方法, 同时了解了循环指令的使用方法;掌握正确分配与使用寄存器, 通过对寄存器的合理分配和使用, 可以使我们的程序更加简洁易懂。
汇编程序设计 多重循环及过程的应用 实验报告
《汇编语言程序设计》实验报告实验七多重循环及过程的应用实验目的1、掌握多重循环程序和排序程序设计方法;2、掌握带符号数的比较及转移语句应用;3、伪指令 EQU 及操作符 '$'的使用;4、掌握过程的定义和调用方法;5、掌握把内存数据(16位有符号2进制)按照10进制显示输出的方法。
实验内容完成冒泡法排序程序,利用过程对排好序的数据按10进制显示输出实验步骤1、输入下列程序,汇编并连接通过。
.model small.stack.dataarray dw 12,-66,108,9,5,-123,2000,-900;待排序数据count equ $-arraypushcount db 0 ;用于临时存放被显示数据的10进制总位数.code.startupmov cx,countshr cx,1dec cxmov bl,-1again: ;冒泡法排序外重循环mov dx,cxand bl,blje exitxor bl,blxor si,siagain1: mov ax,array[si] ;内重循环.if sword ptr ax>sword ptr array[si+2]xchg array[si+2],axmov array[si],axmov bl,-1.endifinc siinc sidec dxjnz again1loop againexit:mov cx,countshr cx,1mov si,0.repeatmov ax,array[si]call bintodec ;显示排好序的数据add si,2.untilcxz.exit 0bintodec proc near ;过程定义push bxpush dx.if sword ptr ax<0 ;对于负数则取其相反数统一按正数处理neg axpush axmov dl,'-' ;显示负号mov ah,2int 21hpop ax.endifmov bx,10loop1: cwddiv bxpush dx ;把每次除以10的余数压入堆栈,并记录数据位个数 inc pushcountcmp ax,0jne loop1print: pop dx ;从堆栈弹出每位数据并显示add dx,30hmov ah,2int 21hdec pushcountjnz printmov ah,2 ;显示完一个数据的各个数位后再显示空格进行分隔 mov dl,' 'int 21hpop dxpop bxretbintodec endpEND图 7-1 编辑程序2、汇编并链接通过该程序,观察执行结果;图 7-2 汇编成功图 7-3 运行结果3、试着把被排序的数据类型改为字节数据,程序该怎么修改?图 7-4 把被排序的数据类型改为字节数据[问题:我把被排序的数据类型改为字节数据,但因为其表示范围为0-0FFH,所以为了使程序能正常运行,我就把原来待排序的数据超过这个范围的(900和2000)修改成较小的数据,不知道这样是否是有违题意?]图 7-5 汇编成功4、如果要把数据按16进制显示,该怎么修改程序?答:…………mov bx,16loop1: cwddiv bxpush dx ;把每次除以16的余数压入堆栈,并记录数据位个数inc pushcountcmp ax,0jne loop1把每次除以16的余数压入堆栈,其余位置坐相应修改。
汇编语言实验报告
汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同’,否则显示‘No match’。
则显示‘Match在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1’和‘Nomatch’。
再代码段比较字符串string1和string2,和mess2,分别代表‘Match通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘No match’。
二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。
再用Debug进行调试。
其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存用器和修改寄存器的值,-q命令用来退出debug程序。
在这些命令的后面加上地址,可以将命令执行到相应的地方。
如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:若将string2改为'Move the cursor backwards.',程序的其他部分不做改动,执行结果:若将mov cx,25语句改成mov cx,24,结果为:此时少做了一次循环,得到的结果就不正确了。
实验二、用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、程序说明本实验包括两个部分,第一个部分是将AX和BX的内容进行交换,并用堆栈作为两寄存器交换内容的中间存储单元;第二部分是用DEBUG的命令将存储器偏移地AH, 0BH,0CH,0DH,0EH。
在DEBUG状态址300H,304H连续单元顺序装入0 下送入给出的程序中。
第一个程序先将AX的内容进栈,然后将BX的内容赋给AX,再将出栈的内容赋给BX即可。
第二个程序是在进入debug后,用-a指令输入给出的程序,然用-r指令安要求修改内存的内容,再用-t指令逐步执行每条指令,看修改的内存内容对指令执行结果的影响。
汇编实验报告
实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV 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 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。
汇编实验报告
MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTATERETMAIN ENDPPROGNAM ENDSEND实验结果分析与总结1、程序运行结果:DEBUG调试:2、实验总结:用循环体结构完成,每次循环显示一个十六进制数位,因而循环次数是已知的,计数值为4。
循环体中则应包括从二进制到所显示字符的ASCII之间的转换,以及每个字符的显示,后者可以使用DOS功能调用实现。
由于数字0~9的ASCII为30~39H,而字母的A~F的ASCII为41~46H,所以把4位二进制加上30H后还需要一次判断,如果为字符A~F,则还应加上7才能显示正确的十六进制数。
指导老师评阅意见2、程序运行结果:DEBUG调试:2、实验总结:从第一个数开始依次对相邻的两个数进行比较,如果次序对,则不错任何操作,如果次序不对,则两个数互换位置。
指导老师评阅意见指导老师:年月日实验报告RETBINIHEX ENDPPROGNAM ENDSEND MAIN实验结果分析与总结3、程序运行结果:有匹配字符:无匹配字符:2、实验总结:应该注意数据段的定义和使用。
此外应该注意单个字符时的“边缘”情况因为,这是指针的移动和关键字的长度是一致的,但是这并不意味着,两个字符串匹配。
输出结果采用十六进制输出在《IBM PC汇编语言程序设计》一书中例6.3decihex中的子过程binihex,这里也提醒我要注意积累一些知识,只有这样才能把汇编语言学好。
指导老师评阅意见指导老师:年月日实验报告MOV DL,0CMP BYTE PTR [SI+6],3AHJB A0SUB BYTE PTR [SI+6],10MOV DL,1A7:ADD BYTE PTR [SI+7],DLMOV DL,0CMP BYTE PTR [SI+7],3AHJB A0SUB BYTE PTR [SI+7],10MOV DL,1A8:ADD BYTE PTR [SI+8],DLMOV DL,0CMP BYTE PTR [SI+8],3AHJB A0SUB BYTE PTR [SI+8],10MOV DL,1A9:ADD BYTE PTR [SI+9],DLA0:RETADD65536 ENDPQUIT:MOV AH,4CHINT 21HCODES ENDSEND START实验结果分析与总结4、程序运行结果:2、实验总结:程序接收用户输入的1小于等于50的十进制正整数,存入输入缓冲区后再把它转化为十六进制数,存入内存单元N中。
- 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。