实验四-循环结构汇编语言程序的设计实验报告

合集下载

汇编语言-实验四-循环分支程序设计

汇编语言-实验四-循环分支程序设计

实验四循环分支程序设计一&实验目的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寄存器中的两位十六进制数。

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告一、实验目的1、了解循环程序设计的方法2、理解汇编语言中循环指令的使用3、掌握汇编语言中常用的循环结构二、实验原理1、循环指令循环指令是计算机中常用的一种控制结构,其作用是重复执行一定的操作。

在汇编语言中,常用的循环指令有LOOP、LOOPE、LOOPNE等,具体功能如下:(1)LOOP:重复执行指定次数的操作;(2)LOOPE:执行操作直到CX寄存器为0或ZF寄存器为1;(3)LOOPNE:执行操作直到CX寄存器为0或ZF寄存器为0。

LOOP指令的语法格式如下:LOOP label其中,label表示循环的目标地址。

2、循环结构循环结构是计算机程序设计中常用的一种结构,其基本形式包括:while、do...while、for等。

在汇编语言中,常用的循环结构有以下两种:(1)无限循环结构:该结构适用于需要不停顿地进行某项操作的情况,底层逻辑基于测试指令;(2)计数器循环结构:该结构适用于需要循环指定次数的情况,底层逻辑基于循环指令。

三、实验内容1、使用循环指令实现计算1~10的和;2、使用循环结构实现计算1~10的和。

四、实验步骤1、使用循环指令实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

2、使用循环结构实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

五、实验结果(1)使用循环指令实现计算1~10的和MOV CX,10MOV AX,0LOOP label1ADD AX,CXDEC CXJNZ label1label1:MOV sum,AX(2)使用循环结构实现计算1~10的和MOV CX,10MOV AX,0label2:ADD AX,CXDEC CXJNZ label2MOV sum,AX六、实验总结本次实验实现了两种不同的循环方式,分别使用了循环指令和循环结构。

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

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

一、实验目的(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)运行程序。

《汇编语言》实验报告

《汇编语言》实验报告

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

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

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

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

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

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

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

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

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

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

e.关闭显示模式。

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

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

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

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

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

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

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

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

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

实验四 循环结构程序设计

实验四  循环结构程序设计
/* 求最大公约数算法1 */
#include "stdio.h"
void main( )
{
}
2.从整数1开始向上找,直至m和n中较小的数,每找到一个能同时被m和n整除的整数,将其存入一个变量中,当循环结束时,变量中存放的即为最大公约数。设n为m和n中较小的数,则如下程序段可实现:
for(k=1; k<=n; k++) if(m%k==0 && n%k==0) x=k;
}
2.字符常量’0’与数值常量0是不同的。
(六)下面程序的功能是:计算1到100之间的奇数之和及偶数之和,并输出。请在程序中的横线上填入适当的内容,将程序补充完整并运行。
/* c4-6.c */
/* 计算1到100之间的奇数之和及偶数之和 */
#include "stdio.h"
void main( )
六、思考题
(一)求两个正整数x和y的最大公约数,请填空。
/* 求最大公约数程序 */
#include "stdio.h"
void main( )
{ int x,y,t,i;
printf("请输入两个数:");
scanf("%d,%d",&x,&y); /*注意scanf语句中间用“,”隔开*/
if(x > y){t = x; x = y; y = t;}
程序的基本结构如下:
/* c4-9.c */
/* 按条件求数列和 */
#include "stdio.h"
void main( )
{定义变量;
变量赋初值;

实验报告4

实验报告4

实验四:循环结构程序设计班级:学生姓名:学号:一、实验目的1、理解循环的概念2、理解并掌握循环结构相关语句的含义、格式及使用3、学会循环的应用及控制,包括:①掌握使用循环输入多个数据的方法②掌握在多个数据中有选择地输出数据的方法③掌握在多个数据中对某种数据进行计数的方法④掌握求多个数据中最大值、最小值的方法⑤掌握使用break、continue语句终止循环4、掌握循环的嵌套二、知识要点1、循环变量、循环条件、循环体的概念2、三种循环语句的一般格式、执行过程3、理解选择结构与循环结构中“条件表达式”之不同含义4、二重循环的执行过程三、实验预习(要求做实验前完成)1、循环变量的主要用途是:2、用循环求多个数的和之前,先要把和的初始值赋为:3、用循环求多个数的乘积之前,先要把乘积的初始值赋为:4、字符变量能否作为循环变量?5、循环过程中,如果循环条件成立,但需要结束循环,可采用什么办法?6、什么叫循环的嵌套?四、实验内容(要求提供:①算法描述或流程图②源程序)1. 编程,利用循环计算以下表达式的值:(5+52)*(4+42)*(3+32)*(2+22)*(1+12)*(1/2+1/3+1/4+1/5)(for循环)include <stdio.h>#include <stdlib.h>int main(){int a;double sum=1,sum1=0;for(a=1;a<=5;a++)sum=sum*(a+a*a);printf("结果为%lf\n",sum);for(a=2;a<=5;a++)sum1=sum1+(1.0/a);printf("%lf\n",sum1);printf("结果为%lf\n",sum*sum1);return 0;}2. 编程,从键盘输入若干个整数,当输入0时,输入停止。

汇编语言循环结构程序设计

汇编语言循环结构程序设计

实验4 汇编语言循环结构程序设计实验题目:实现表达式S=(X+4×Y)/Z,其中X为有符号的字节数据,Z、Y为有符号的字数据,结果进行显示(进制不限)。

实验目的:1. 掌握循环结构程序设计:循环初始化、循环体、循环参数修改和循环控制;2. 灵活运用跳转类或循环指令;4. 掌握MASM、LINK、DEBUG等工具的使用。

实验设备:硬件:PC机软件:DOS操作系统、编辑软件、MASM 5.0实验内容:1. 程序代码DATA SEGMENTX DB 8Y DW 2Z DW 2N DW 10RESULT DW 4 DUP(?) ;定义RESULT单元,预留空间DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,XMOV AH,0H ;扩展xMOV BX,AXMOV CX,4MOV AX,YMUL CXADD AX,BXDIV ZDIV N ;除以10,用于进位显示MOV RESULT,AX ;存储商MOV RESULT+1,DX ;存储余数ADD RESULT,30HMOV DX,RESULTMOV AH,02HINT 21HADD RESULT+1,30HMOV DX,RESULT+1MOV AH,02HINT 21HMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START2.调试过程(具体应用DEBUG指令及其结果)实验思考与总结:通过本次实验我熟悉了源程序的基本组成及其使用,掌握了数据传送、算术运算类指令的使用。

C语言实验报告 实验四 参考答案

C语言实验报告 实验四  参考答案

实验四循环结构程序设计2(参考答案)(1)编写程序sy4-1.c,输入n,计算并输出如下多项式的值:S n=1+1/2!+1/3!+1/4!+…+1/n!。

例如输入n为15时,输出1.718282。

算法分析:第一项可以看成1/1!,用循环控制累加n个分式,分式的分母是i!,分子固定为1。

参考答案:# include <stdio.h>void main(){double s=0,p=1;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){p = p * i ; //计算分母i!s = s + 1 / p ; //累加}printf("s=%lf\n",s);}运行结果:(2)编写程序sy4-2.c,输入n,根据以下公式计算s:,例如当n=11时,结果为1.833333。

算法分析:该多项式的分母是累加。

参考答案:# include <stdio.h>void main(){double sn=0,s=0;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){s = s + i ; //计算分母1~i的累加和sn = sn + 1 / s ;}printf("sn=%lf\n",sn);}运行结果:(3)编写程序sy4-3.c,计算3~n之间所有素数的平方根之和,要求:输入n,输出结果。

例如,输入n 的值是100,则输出结果是148.874270。

注意n应在2~100之间。

算法分析:穷举3~n之间的数找素数,若是素数则累加她的平方根。

参考答案:# include <stdio.h># include <math.h>void main(){int i,j,n,flag;double s=0;scanf("%d",&n);for(i=3;i<n;i++) //穷举3~n之间找素数{flag=1; //假设当前的i是素数,标志变量设为1for(j=2;j<i;j++) //穷举要判断是否是素数的i的除数,范围2~i-1if(i%j==0) //若i能被j整除,则不是素数{ flag=0; break; } //标志变量改为0,并终止循环if( flag == 1 )s = s + sqrt( i ); //若i是素数,则累加sqrt(i)}printf("s=%f\n",s);}运行结果:(4)编写程序sy4-4.c,根据以下公式求p的值,(m与n为两个正整数且m>n)。

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

循环结构汇编语言程序设计实验报告
实验四循环结构汇编语言程序设计
一、实验目的
1、学习循环结构的汇编语言程序的设计和调试。

2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。

3、加深掌握计算机整体的工作过程。

3、加深对排序算法的理解。

二、实验任务
编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。

要求至少采用二种不同的排序算法来实现。

( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……)
三、实验容
为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实
验。

1、利用冒泡排序的方式求解数组A中元素的最大值最小值。

设计流程图如
下所示:
2、利用选择排序的方式求得数组A中元素的序列。

设计流程图如下所示:
四、实验环境
PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机
汇编工具:Masm.exe+Link.exe。

五、实验步骤
1)建立和生成的文件
(1)编写的源程序,源程序名为abc、扩展名为.asm
(2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj
(3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe
2)汇编环境
最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。

将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根
目录C :\>下
3)上机步骤
进入DOS窗口中执行。

4)调试程序
进入DEBUG后,调试程序
5)调试成功后重新汇编、连接并生成可执行代码
6)执行程序,并对运行结果截图。

利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48)
利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)
六、实验心得
通过本次循环结构汇编语言程序设计的实验,我初步了解了汇编语言的基本语法,利用汇编语言的循环结构实现了对于数组A中元素的排序以及求得元素中的最大值最小值。

另外,在实验过程中,我也了解到了,我们要时刻细心严谨,认真做好每一步,避免出现低级错误。

七、汇编语言代码
1、利用冒泡排序实现求最大值最小值的代码
data segment
mes1 db 'the max:$'
mes2 db 'the min:$'
a dw 13,0,59,900,587,1,657,234,34,48
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
;以下是起泡排序核心代码
mov cx,10
dec cx
loop1:
mov di,cx
mov bx,0
loop2:
mov ax,a[bx]
cmp a[bx+2],ax
jge cotinue
xchg ax,a[bx+2]
mov a[bx],ax
cotinue:
add bx,2
loop loop2
mov cx,di
loop loop1
mov dx,offset mes1
mov ah,09h
int 21h
mov bx,a[18]
call bini ;转换为十进制的子程序
mov dx,offset mes2
mov ah,09h
int 21h
mov bx,a[0]
call bini
ret
main endp
bini proc near
mov cx,10000d
call bin
mov cx,1000d
call bin
mov cx,100d
call bin
mov cx,10d
call bin
mov cx,1d
call bin
ret
bini endp
bin proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
bin endp
crlf proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21
ret
crlf endp
code ends
end start
2、利用选择排序实现排序的代码
SAVEREG macro
push ax
push bx
push cx
push dx
push si
push di
endm
RESAVEREG macro
pop di
pop si
pop dx
pop cx
pop bx
pop ax
endm
;************************
data segment
arr dw 13,20,59,900,587,1,657,234,34,48 n dw 18
m dw 10
data ends
;************************
code segment
;------------------------
main proc far
assume cs:code, ds:data
start:
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax
;------------
;sort
;------------
;si,di index
;ax temp
mov si, 0
mov di, 0
loop1:
cmp si, n
jge OUTER1
;init loop2
mov ax, si
add ax, 2
mov di, ax
loop2:
cmp di, n
jg OUTER2
mov ax, arr[si]
cmp ax, arr[di]
jle DO_NOTHING
xchg ax, arr[di]
mov arr[si], ax
DO_NOTHING:
add di, 2
jmp loop2
OUTER2:
add si, 2
jmp loop1
OUTER1:
mov cx, m
mov di, 0
PRINT_LOOP:
mov ax, arr[di]
mov dx, 0
call print_dec
add di, 2
loop PRINT_LOOP
;read key from the keyboard mov ah, 0
int 16h
ret
;---------------------
;get_oct function
;must pass ax, dx
print_dec proc near
SAVEREG
mov cx, 0
mov bx, 10
GET_NUM_LOOP:
div bx
push dx
mov dx, 0
inc cx
cmp ax, 0
jne GET_NUM_LOOP
PRINT:
pop dx
add dx, 30h
mov ah, 02h
int 21h
loop PRINT
;enter and change line mov dl, 0dh
mov ah, 02h
int 21h
mov dl, 0ah
mov ah, 02h
int 21h
RESAVEREG
ret
print_dec endp
main endp
;------------------------ code ends
;************************ end start
WORD版本.。

相关文档
最新文档