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

合集下载

《循环指令》实验报告

《循环指令》实验报告
Start:
movax,data
movds,ax
movcx,cnt
leabx,BUF-1
moval,0
again:
incbx
cmpbyte ptr[bx],0
jg exit
jl exit
incal
loopnz again
exit:
incal
movResult,al
movah,4ch
Int 21h
Codeends
Start:
movax,data
movds,ax
movcx,cnt
leabx,buf1
moval,0
movah,0
movdl,0
again:cmpbyte ptr[bx],0
jg next1
jl next2
incdl
jmp next3
next1:incal
jmp next3
next2:incah
next3:incbx
1.编写程序完成统计下列存储区域中正数个数,负数个数和零的个数。请使用loop指令。
Datasegment
Buf1db0,12,-9,0,0,65,100,-95,0,Байду номын сангаас23
cntequ$-Buf1
Zhengshudb?
Fushudb?
Lingdb?
Dataends
Codesegment
Assume cs:code ,ds:data
MOVDS,AX
movcx,cnt
leasi,buf1-1
leadi,buf2-1
again :
incsi
incdi
moval,[si]

循环程序设计 实验报告

循环程序设计 实验报告

循环程序设计实验报告循环程序设计实验报告引言:循环程序设计是计算机科学中一项重要的技术,它能够让计算机在特定条件下重复执行一段代码,从而实现特定的功能。

本实验旨在通过编写循环程序,探索循环程序设计的原理和应用。

实验目的:1. 理解循环程序设计的概念和原理;2. 学会使用不同类型的循环结构,如for循环、while循环和do-while循环;3. 掌握循环程序设计在问题解决中的应用。

实验过程:1. 实验环境的搭建在实验开始前,我们需要搭建一个适合编写和运行循环程序的环境。

选择一款适合的集成开发环境(IDE),如Visual Studio、Eclipse等,并安装相应的编程语言环境,如C++、Java等。

2. 编写基本的循环程序首先,我们从最简单的循环结构开始,即for循环。

以C++语言为例,我们可以使用以下代码编写一个简单的for循环程序:```cpp#include <iostream>int main() {for (int i = 0; i < 10; i++) {std::cout << "Hello, World!" << std::endl;}return 0;}```上述代码中,for循环的三个部分分别表示循环变量的初始化、循环条件和循环变量的更新。

通过这个简单的循环程序,我们可以在控制台输出10次"Hello, World!"。

3. 使用循环解决实际问题循环程序设计在解决实际问题时非常有用。

我们可以通过循环来处理一系列数据、实现复杂的算法等。

下面以一个实际问题为例,演示如何使用循环程序设计进行问题求解。

假设有一个整数数组,我们需要找到数组中的最大值。

我们可以使用for循环遍历整个数组,并通过比较来找到最大值。

以下是一个使用C++语言实现的示例代码:```cpp#include <iostream>int main() {int arr[] = {5, 2, 8, 3, 1};int max = arr[0];for (int i = 1; i < 5; i++) {if (arr[i] > max) {max = arr[i];}}std::cout << "The maximum value is: " << max << std::endl;return 0;}```通过以上代码,我们可以找到数组中的最大值,并将其输出到控制台。

(实验六)汇编语言课内实验报告

(实验六)汇编语言课内实验报告

实验四循环结构程序设计上机实验
一、实验目的:
1、掌握循环结构程序设计的基本方法。

2、掌握用masm for Windows编辑、编译、连接汇编语言源程序的基本方法。

3、掌握DEBUG调试程序的U、D、R、T、G、Q常用命令的用法。

二、实验步骤:
1、用ASM masm for Windows将源程序输入,其扩展名为.ASM。

2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。

若汇编时提示有错,则修改源程序后重新汇编,直至通过。

3、用LINK将.OBJ文件连接成可执行的.EXE文件。

4、用DEBUG调试程序并分析结果。

三、实验内容:
1. 在数据段中从变量DA1开始有N个带符号数。

把其中的正数、负数(设没有0)依次存入DA2、DA3开始的单元中并分别统计正、负数的个数存入DA4、DA5字节单元之中。

试编写程序。

将本例中的DEC指令修改为LOOP指令来实现循环程序的设计。

在修改过程中还应修改哪能些指令,请自己分析,为什么?
四、综合练习:
1.编写求100个正整数的和的程序。

如果和不超过16位字的范围(即65535),则将其和保存到WORDSUM单元中,若超过则显示OVERFLOW。

2.设有N个数,连续存放在以BUF为首址的字存储区中,试编写程序,统计其中最高的6位全1的数个数并将统计结果送入寄存器DX中。

五、实验报告(注意:将报告正反两面打印后用手写)附件如下:
实验四循环程序设计实验报告学号姓名成绩。

汇编语言实验5-循环程序设计

汇编语言实验5-循环程序设计

汇编语言实验报告Assembly Language Programming Lab Reports______________________________________________________________________________班级:_________ 姓名:___________ 学号:___________ 实验日期:_____________学院:_____计算机与通信工程学院____ 专业:_______计算机科学与技术___________实验顺序:___实验五____ 实验名称:____________循环程序设计________________实验分数:_______ 考评日期:________ 指导教师:______________________________________________________________________________一.实验目的1、掌握两种循环结构,DO WHILE的循环结构用CMP指令和条件转移指令构成。

DO UNTIL用loop,loope,loopne这三种指令实现。

2、掌握以下指令掌握循环指令,loop,loope,loopne。

掌握串处理指令,movs,cmps,scas,lods,stos 以及和他们联合使用的重复前缀指令rep,repz,repnz。

掌握伪指令EQU 及操作符'$'的使用。

掌握cmp,test和条件转移指令构成的循环结构。

3、掌握循环程序的设计过程,写出设计方法,给出程序框图,写出循环程序。

4、掌握多重循环中,可以由内层循环向外层循环跳转,或者直接向外层程序跳转,但是不允许从外向内跳转。

5、会用循环实现排序算法。

______________________________________________________________________________二.实验环境操作系统:windows xp编译程序:masm 5.0______________________________________________________________________________三.实验原理1、loop指令循环2、二层、三层循环嵌套______________________________________________________________________________四.实验步骤及结果分析1.简单的循环程序。

汇编语言实验七实验报告

汇编语言实验七实验报告

汇编语言实验七实验报告汇编语言实验七实验报告一、实验目的本次实验的目的是了解多重循环结构的编程技巧,并使用它们对数据进行排序和搜索。

二、实验内容本实验内容主要包括: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上述代码主要实现了线性搜索的功能,通过比较数组中的每一项与给定的关键字,如果相同,则记录下该项的偏移量,然后根据偏移量计算出索引,最终返回数组中搜索到的数据。

汇编语言、微机原理、接口技术-实验三:循环程序实验

汇编语言、微机原理、接口技术-实验三:循环程序实验
外层循环:初始化BL。初始化比较两个数的指针。当BL=0时,提前退出循环。
图一:直接选择排序
图二:冒泡排序
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等
基本要求源代码:
冒泡排序关键代码:
mov cx,4 ; CX length-1
mov si,offset a ; DI string pointer
INC SI jna j1
loop lp3 xchg al,[si+2]
HLT mov [si],al
A DW '5','7','1','9','2' inc bl
; si string pointer j1:
;cx length-1 inc si
sort proc inc si
lp2: loop lp1
计算机硬件实验室实验报告
课程名称:
姓名
学号
班级
成绩
设备名称及软件环境
Windows XP操作系统emu8086仿真器proteus仿真器
实验名称
[0003]循环程序实验
实验日期
2012/11/6
一.实验内容
1.实现内存数据访问,用两种方法对五个字从大到小排序
2.扩展要求
1.用冒泡法时快排
2.理论分析或算法分析
思考内容:冒泡排序之所以能实现快速排序,是每一次排序都将最大或最小的放在最后或最前,并且有个来统计交换的次数,一旦交换的次数为0时直接退出循环。
五.结论\
完成了本次实验要求的实验内容。学会了实现内存数据访问,用两种方法实现对五个字从大到小排序
报告提交日期

汇编语言实验报告

汇编语言实验报告

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

东北大学
计算机硬件技术基础实验报告
一、实验目的
(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。

图2 图1
图3
四、实验步骤
1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

1)输入源程序:
DATA SEGMENT
BUF DW 23,123,-12,-210,45,0,90,-453
BUF1 DW 8 DUP(0)
BUF2 DW 8 DUP(0)
A DW ?
B DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
LEA BX, BUF
LEA SI, BUF1
LEA DI, BUF2
MOV A,0
MOV B,0
MOV CX,8
L0: MOV AX,[BX]
CMP AX,0
JGE L1
MOV [DI],AX
ADD DI,2
INC B
JMP NEXT
L1: MOV [SI],AX
ADD SI,2
INC A
NEXT: ADD BX,2
LOOP L0
MOV AH, 4CH
INT 21H
CODE ENDS
END START
2)运行程序。

3)检查结果无错误后将结果记录下来。

2.设STR字符串是以0结尾。

试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。

1)输入源程序:
DATA SEGMENT
STR DB 'HOW arE YoU!',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STR
AGAIN:MOV DL,[SI]
OR DL,DL
JZ OK
CMP DL,'A'
JB NEXT
CMP DL,'Z'
JA NEXT
ADD DL,20H
MOV [SI],DL
NEXT: MOV AH,2
INT 21H
INC SI
JMP AGAIN
OK: MOV AH,4CH
INT 21H
CODE ENDS
END START
2)运行程序。

3)检查结果无错误后将结果记录下来。

3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。

1)输入源程序:
DATA SEGMENT
COUNT DW ?
TOTAL DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,0
MOV AX,0
MOV BX,0
LOOP1: INC BX
ADD AX,BX
INC CX
CMP AX,5050
JLE LOOP1
MOV COUNT,CX
MOV TOTAL,AX
CODE ENDS
END START
2)运行程序。

3)检查结果无错误后将结果记录下来。

五、实验结果
1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

程序运行结果如下界面所示:
2.设STR字符串是以0结尾。

试编写一个把字符串中的所有大写字母改为小
写字母的程序并将转换后的字符串显示输出。

程序运行结果如下界面所示:
3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。

程序运行结果如下界面所示:
六、思考题
1.本程序属于循环次数已知的程序,使用CX寄存器存放计数值,使用LOOP 指令完成循环。

但是在有些情况下,是不可以用LOOP指令的,比如循环中要用到移位指令时需要占用CL寄存器。

我们仍可以两条指令完成相同的功能,请问是哪两条指令?
答:ROL和RCL
2.如果程序要求把小写字母都改为大写字母,程序段该如何修改?
答:将原程序中“CMP DL,'A'”、“CMP DL,'Z'”、“ADD DL,20H”语句依次改为“CMP AL,'a'”、“CMP AL,'z'”、“ADD AL,20H”语句。

3.本程序的循环较为简单,请画出本程序的流程图。

答:见图3.
七、扩展题
1.统计以BUF为首地址开始的字节数据块中的正数的个数,将统计结果放
至RLT单元。

答:
DATA SEGMENT
BUF DW 23,123,-12,-210,45,0,90,-453
RLT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
LEA BX, BUF
MOV RLT,0
MOV CX,8
L0: MOV AX,[BX]
CMP AX,0
JL L1
INC RLT
ADD BX,2
LOOP L0
L1: ADD BX,2
LOOP L0
MOV AH, 4CH
INT 21H
CODE ENDS
END START
2.有一系列以$为结束符的字符串,对其中的非数字字符计数,保存计数结果。

答:
DATA SEGMENT
STR DB 'hjds67g5s5yii$'
COUNT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STR
AGAIN:MOV DL,[SI]
CMP DL,'$'
JZ OK
CMP DL,'0'
JB NEXT
CMP DL,'9'
JA NEXT
INC SI
JMP AGAIN
NEXT: INC COUNT
INC SI
JMP AGAIN
OK: MOV AH,4CH
INT 21H
CODE ENDS
END START
3.从STRN地址开始有一字符串,以¥作为结束标志,要求统计字符串长度并存入LENG单元。

答:
DATA SEGMENT
STRN DB 'HOWAREYOU$'
LENG DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV LENG,0
MOV SI,OFFSET STRN
AGAIN:MOV DL,[SI]
CMP DL,'$'
JZ OK
INC LENG
INC SI
JMP AGAIN
OK: MOV AH,4CH
INT 21H
CODE ENDS
END START
八、实验心得
通过运行分析源程序,让我更加了解了循环程序的基本要求和步骤。

通过思考题深入学习了四种循环指令同时对ASCII码表进一步熟悉,为以后更加熟练操作编程提供方便。

今后我会进一步学习汇编语言为以后学习单片机做准备。

相关文档
最新文档