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

合集下载

《循环指令》实验报告

《循环指令》实验报告
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.设计:
分别为十个成绩、成绩总个数、分段的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)熟练掌握循环程序设计的方法和要点
(2)掌握冒泡排序放进行循环程序设计的方法
(3)掌握XCHG、LOOP、JAE等指令的应用
实验内容
(1)用全屏编辑软件建立源程序
(2)用masm.exe汇编语言对源程序进行汇编,形成目标文件
熟练,掌握循环程序设计的方法和要点
掌握冒泡排序放进行循环程序设计的方法,掌握XCHG、LOOP、JAE等指令的应用
databuf dw n
db n dup(?)
data ends
code segment
assume cs:code,ds:data,es:data,ss:stack
start:
mov ax,data
mov ds,ax
mov es,ax
mov ax,stack
mov ss,ax
lea sp ,top
实验结果及分析分析实验结果从debug的内容看出数据排序正确在缓冲区databuf中保存一组无符号数据8位其数据个数存放在databuf的第一二字节中其思想是采用双层循环对n个数据进行从小到大排序的冒泡排序从后往前比较当前这大于后者是交换两者的次序这样经过n1此的比较得出结果熟练掌握循环程序设计的方法和要点掌握冒泡排序放进行循环程序设计的方法掌握xchgloopjae等指令的应用
(3)用link.exe连接程序对目标程序进行连接,形成可执行文件
(4)用DEBUG对连接通过的可执行程序进行调试
三、实验过程原始数

循环程序设计实验报告

循环程序设计实验报告

学号:0740303104姓名:雷凤循环程序设计实验报告一、实验目的:1、了解和掌握比较循环程序的组成部分,重复控制指令的功能、作用和方法。

2、学会循环程序设计的方法。

3、学习汇编语言输出输入语句的设计。

二、实验要求:1、具体了解和掌握循环程序的组成部分,重复控制指令的使用和在使用时应注意的问题2、学习循环序设计的一般方法。

三、实验内容1、实验任务设有N个学生的某科成绩(百分制),已按学号的次序存放在以STUD 为首址的字单元数组中,现要求按成绩的高低记入名次,并把名次填入成绩所在的字单元的高字节中。

字单元的格式为2、实验的原理这个实验要用循环的嵌套,内外循环都循环6次,刚开始时将所有的名次都置1,外循环从第一个成绩开始依次与每一个学生(包括自己)的成绩比较大小,要是小于,相应的名次就加1,再将第二个成绩与所有的分数依次比较大小,一直循环6 次,就能得出名次排序了,将相应的名次分别保存在dl 低字节中,也便于输出名次。

3、程序设计流程图开始BX<-STUD存区首址CX<-外循环次数DL<-1AL<-[BX]CX<-内循环次数Slv-STUD存区首址DL<-DL+1SI<-SI+2[BX+1]<-DLBX<-BX+2Slv-SI+2结束A:INC SIINC SILOOP LOP2POPCXmov[BX+1], dl ; 把结果保存到高地址INC BX; 修改地址INC BX 四、实验步骤1、编辑源程序,建立一个以后缀为 .ASM 的文件 .DATASSEGMENT; 此处输入数据段代码STUDDW78,65,89,90,58,99DATASENDSSTACKSSEGMENT; 此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMCES:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX; 此处输入代码段代码LEABX,STUDLOP1:PUSHCXMOVdl,1 ;dl 用来存放名次MO\AL,[BX];BX 的内容送给AL MOVCX,6取偏移地址 LOP2:CMPAL,[SI]JL LOP3JMP A; 比较大小 ; 小于就转 ;LOOP LOP LOP3:INC dl ; 小于,名次加 1; 修改地址add dl,30h ; 输出movah,02hint 21hLOOP LOP1 ; 回到外面的循环MOVAH,4CHINT 21HCODESENDSENDSTART2、汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。

程序循环结构实验报告(3篇)

程序循环结构实验报告(3篇)

第1篇实验名称:程序循环结构实验实验日期:2023年4月10日实验地点:计算机实验室实验目的:1. 理解循环结构在程序设计中的作用。

2. 掌握不同循环结构(如for循环、while循环、do-while循环)的语法和应用。

3. 能够根据实际问题选择合适的循环结构进行编程实现。

4. 提高编程实践能力。

实验环境:1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm实验内容:一、实验一:for循环结构1. 实验目的了解for循环的语法和使用方法,掌握其基本操作。

2. 实验步骤(1)编写一个程序,使用for循环打印1到10的整数。

(2)编写一个程序,使用for循环计算1到100的整数之和。

3. 实验代码```python打印1到10的整数for i in range(1, 11):print(i)计算1到100的整数之和sum = 0for i in range(1, 101):sum += iprint("1到100的整数之和为:", sum)```4. 实验结果程序成功运行,打印出1到10的整数和1到100的整数之和。

二、实验二:while循环结构1. 实验目的了解while循环的语法和使用方法,掌握其基本操作。

2. 实验步骤(1)编写一个程序,使用while循环计算1到10的整数之和。

(2)编写一个程序,使用while循环判断一个数是否为素数。

3. 实验代码```python计算1到10的整数之和sum = 0i = 1while i <= 10:sum += ii += 1print("1到10的整数之和为:", sum)判断一个数是否为素数num = 29is_prime = Truei = 2while i i <= num:if num % i == 0:is_prime = Falsebreaki += 1if is_prime:print(num, "是素数")else:print(num, "不是素数")```4. 实验结果程序成功运行,打印出1到10的整数之和以及29是否为素数。

汇编语言实验五循环程序设计1

汇编语言实验五循环程序设计1

实验五循环程序设计一实验类型:验证性实验目的:1、掌握循环程序的设计方法2、学会针对不同的问题,选用不同的组织循环的方法。

实验步骤:1、进入DOS环境2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用3、启动EDIT编辑器输入程序代码4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm)5、运行命令MASM CHEN.ASM生成OBJ文件6、如果出错请回到第3步再纠正错误7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE文件8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容)9、执行反汇编U10、查看程序结束地址11、运行G 命令运行程序12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。

实验内容:1、在数据段有一字数组array,要求编写程序在数组中在数组中查找某一数据并且删除它2、在数据段有一按从小到大排序的字数组array,要求编写程序在数组中在数组中查找某一数据的合适位置插入该元素data segmentx dw ?array dw 1,2,3,4,6,7arrayend dw ?s dw 5data endscode segmentmain proc farassume cs:code,ds:datastart:push dssub ax,axpush axmov ax,datamov ds,ax;***************************mov ax,slea si,array-2lea di,arrayendmov cx,(arrayend-array)/2loop1:add si,2jcxz l2dec cxcmp ax,[si]jg loop1inc cxl1:jcxz l2dec cxmov bx,[di-2]mov [di],bxsub di,2jmp l1l2:mov [di],ax;***************************ret main endp code endsend start。

汇编循环程序设计(一)实验报告

汇编循环程序设计(一)实验报告

§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. 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码表进一步熟悉,为以后更加熟练操作编程提供方便。

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

相关文档
最新文档