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

循环程序设计实验报告循环程序设计实验报告引言:循环程序设计是计算机科学中一项重要的技术,它能够让计算机在特定条件下重复执行一段代码,从而实现特定的功能。
本实验旨在通过编写循环程序,探索循环程序设计的原理和应用。
实验目的: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;}```通过以上代码,我们可以找到数组中的最大值,并将其输出到控制台。
循环程序实验首次汇编实验详细操作过程

4.运行可执行程序 在DOS下输入可执行程序名disp即可。
二、对程序进行调试
MASM只能检查语法错误,不能检查程序的算法错误和其它非语法 错误。 若运行结果不符合程序预先设计的要求,则需要调试程序。 方法有二: 直接在源程序中查找错误; 利用调试程序Debug.exe调试生成的可执行程序disp.exe。
若disp.asm没有语法错误,则汇编后生成目标文件disp.obj。 若有语法错误,就没有生成目标文件。回到源程序修改错误。
3.连接源程序 在DOS下,输入link,回车。 在提示信息Object Modules后,输入上述目标文件名disp,回车。 其它都选择默认。 终于生成可执行程序disp.exe。
比如在编写源程序时定义变量x: x db 05h 误写成: x db -5h 利用Debug.exe把disp.exe装入内存。 查看内存单元内容
(提醒:一定要用我带来的这三个程序。网上下载等方式得到的可能存在各 种各样的问题,不要用,以免浪费时间和精力! )
1. 编辑源程序 在自建目录My01下编辑自己的汇编语言源程序。 注: 源程序名及源程序语句中不能有汉字字符——包括标点符号(注 释符号’;’后可以有) 后缀必须是.asm 假设自己的源程序编辑完毕,保存,名称为 disp.asm。
2.汇编源程序 在DOS下汇编上述源程序disp.asm,过程如下: 1)桌面“开始”菜单:开始-->运行,输入 cmd,进入DOS状态。 2)进入自建目录My01:在DOS环境下,输入命令 CD C:\My01 则进入自建目录My01。 3) 汇编源程序disp.asm 在DOS下输入 MASM,回车。 在提示信息Source filename后,输入源程序名disp,回车。 其它都选择默认。
循环汇编程序设计

实验四循环程序设计学号 200811030 姓名檀超男专业电子信息工程专业成绩【实验目的】(1) 熟悉上机实验流程、调试及查看实验结果。
(2) 掌握循环程序设计方法。
(3) 掌握DOS功能调用。
【实验内容及要求】从键盘输入3~9之间的数字,用“*”号组成一个三角形图案,如输入数字7,屏幕上应显示出以下图案。
****************************【实验结果】程序代码如下:DSEG SEGMENTDATA DB ?STR DB 'PLEASE ENTER A NUMBER(3~9)',0DH,0AH,'$'DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGMAIN PROC FARSTART:MOV AX,DSEGMOV DS,AXLEA DX,STRMOV AH,09HINT 21HMOV AH,1INT 21HSUB AL,30HMOV BL,ALNEXT1:MOV CL,BLCALL CHARNEXT2:MOV DL,'*'MOV AH,2INT 21HDEC CLJNZ NEXT2CALL CHARDEC BLJNZ NEXT1MOV AH,4CHINT 21HMAIN ENDPCHAR PROCPUSH DXMOV DX,0DHMOV AH,2INT 21HMOV DX,0AHMOV AH,2INT 21HPOP DXRETCHAR ENDPCSEG ENDSEND START 实验结果如下:【实验心得与体会】在这次实验中,我接触到了嵌套循环和子程序,我学会了外循环和内循环镶嵌程序的编写,学会了自定堆栈和系统堆栈的使用,并知道了自定堆栈和系统堆栈使用后的结果,通过这四次的上机实验,我初步掌握了汇编语言的编写,并会在以后更进一步的学习,相信会对以后微机接口及单片机的学习和实验有很大的帮助。
汇编实验三--分支循环程序设计

福建农林大学金山学院实验报告系:专业:计算机科学与技术年级: 08 姓名:学号:实验课程:汇编语言实验室号:_______ 实验设备号:实验时间:指导教师签字:成绩:实验三分支循环程序设计1.实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。
2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1.有10个数,统计正数的个数,存放在变量M中中。
经过汇编后,形成EXE文件。
在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。
用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确。
(AL寄存器中存放正数的个数)DSEG SEGMENTMSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 10MOV AL, 0LEA SI, MSGL1: MOV BL, [SI]CMP BL, 0JBE NEXTINC ALNEXT: INC SILOOP L1MOV M, ALMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START2.数据段中是一组无符号数,将最小数存放在M单元中。
按上题方法查找一处逻辑错误。
DSEG SEGMENTMSG DB 13, 15, 7, 25, 24M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 4MOV AL, MSGMOV SI, OFFSET MSG+1L1: CMP AL, [SI]JB NEXTMOV AL, [SI]NEXT: LOOP L1MOV M, ALMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START3.编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
汇编语言实验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.简单的循环程序。
汇编语言循环结构程序设计

实验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指令及其结果)实验思考与总结:通过本次实验我熟悉了源程序的基本组成及其使用,掌握了数据传送、算术运算类指令的使用。
微机原理与汇编语言_实验3_循环程序设计实验讲解

微机原理与汇编语言实验报告姓名x x x学号xxxxxx 专业班级计科x班课程名称微机原理与汇编语言实验日期2014.10.22实验名称循环程序设计实验成绩一、实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二、实验内容1、实验原理(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数2、实验步骤(1)流程图(2)实验源码.model small.stack ;定义堆栈段.data ;定义数据段inf1 db "Please input a number(1-627):$"inf2 db 0ah, 0dh, "1+2+......+$"ibuf db 7, 0, 6 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中mov ah, 09hint 21hmov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1mov ch, 0mov si, offset ibuf+2mov ax, 0loop1: mov dx, 10mul dxand byte ptr [si], 0Fhadd al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中开始结束素、、(CX)-1=0累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和)BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)ADD AX,BXINC BX累加和(在AX中)转换为十进制数并显示YNadc ah, 0inc siloop loop1mov cx, ax ;计算1+2+3+...+nmov ax, 0mov bx, 1loop2: add ax, bxinc bxloop loop2mov di, offset obuf+6 ;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, offset inf2 ;结果输出mov ah, 09hint 21hmov cl, ibuf+1 ;显示nmov ch, 0mov si, offset ibuf+2loop4: mov dl, [si]add dl, 30hinc simov ah, 02hint 21hloop loop4mov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题1源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 0ah, 0dh, "1+2+......+$"obuf1 db 6 dup(0)obuf2 db 7 dup(0) ;除了六位数字外还要有一个=号.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出 1+2+......+mov ah, 09hint 21hmov ax, 0 ;计算1+2+3+...+nmov bx, 1loop1: add ax, bxinc bxcmp ax, 60000jbe loop1push ax ;将最终结果备份入栈push bx ;将n备份pop cxmov di, offset obuf1+5;将cx二进制数转换为十进制数并以ascii的形式存于obuf1mov byte ptr [di], '$'mov ax, cxmov bx, 10loop2: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop2mov dx, di ;输出nmov ah, 09hint 21hpop axmov di, offset obuf2+6;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf2mov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, di ;=输出结果mov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题2源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 'Please input six num:', 0ah, 0dh, '$'inf2 db 'sum:$'obuf0 db 0ah, 0dh, '$'ibuf db 5, 0, 4 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov bx, 6 ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop2push ax ;将结果入栈保存mov dx, offset obuf0 ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov cx, 6mov ax, 0loop3: pop bxadd ax, bxloop loop3mov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf mov byte ptr [di], '$'mov bx, 10loop4: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop4mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21hmov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题3源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式) .stack ;定义堆栈段.data ;定义数据段inf db "Please input a num(0-65535):$"inf2 db 0ah, 0dh, "The num of 1:$"ibuf db 6, 0, 5 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov es, axmov ah, 09h ;输出提示信息Please input a num:mov dx, offset infint 21hmov ah, 0Ah ;接收一个无符号十进制整数(小于65536)mov dx, offset ibufint 21hmov ax, 0mov cl, ibuf+1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中mov ch, 0mov si, offset ibuf+2loop1: mov dx, 10mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop1mov bx, 0loop2: shr ax, 1adc bx, 0cmp ax, 0jnz loop2mov ax, bxmov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3mov ah, 09h ;输出提示信息The num of 1:mov dx, offset inf2int 21hmov ah, 09h ;将统计结果在屏幕上显示出来mov dx, diint 21hmov ax, 4c00hint 21hend start实验习题4源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段N equ 5ibuf db 4, 0, 3 dup(0)inf1 db 'Please input N num(0-255):', 0ah, 0dh, '$'inf2 db 'Sort:', 0ah, 0dh, '$'buf db N dup(0)obuf2 db 4 dup(0)obuf db 0ah, 0dh, '$'.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov di, offset bufmov bx, N ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]inc siloop loop2mov [di], alinc dimov dx, offset obuf ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov bx, N-1 ;比较大小mov cx, bxmov dx, bxmov di, offset bufloop3: mov si, dimov al, [di]inc siloop4: cmp [si], aljbe loop5mov al, [si]mov ah, [di]mov [si], ahmov [di], alloop5: inc siloop loop4dec dxmov cx, dxinc didec bxcmp bx, 0jne loop3mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21h;结果输出mov cx, Nmov si, offset bufloop6: mov di, offset obuf2+3;将buf中的二进制数转换为十进制数并以ascii的形式存于obuf2,并输出 mov byte ptr [di], '$'mov bx, 10mov al, [si]mov ah, 0loop7: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop7mov dx, dimov ah, 09hint 21hmov dx, offset obufmov ah, 09hint 21hinc siloop loop6mov ax, 4c00hint 21hend start3、实验结果(1)实验结果(2)实验习题1程序流程图:(3)实验习题2(4)实验习题3(5)实验习题4三、实验总结1)通过本次实验我掌握循环程序的设计方法,掌握比较指令、转移指令和循环指令的使用方法,进一步掌握了调试工具的使用方法。
汇编语言设计-循环程序

②、参数表传送。主程序在调用子程序之前, 应事先建 立一个参数表。参数表可建在内存或外设端口中, 由子程 序按规则去存取。它适合于参数较多的情况。
③、堆栈传送。主程序和子程序在同一堆栈中存放数据 或结果, 根据参数存取的需要, 调节出入栈顺序, 达到传递 参数的目的。其中主程序将参数压入堆栈, 子程序将参数 从堆栈中弹出。它适合于参数多且子程序有嵌套或递归调 用的场合。
思考:若数据块长度为100个字节,遇回车符停止清0,否则 全部清0,程序应如何编写?
4、多重循环
多重循环又称循环嵌套 , 即循环套循环。使用时, 应注 意以下几点:
①、内循环必须完整地包含在外循环内,不得互相交叉。
()
()
②、内循环在外循环中的位置,根据需要设置。 ③、内循环在外循环中可以并存、可以从内循环中直接 跳至外循环 , 反之则不行。
①、先将断点(即CALL下一条指令的地址)NEXT进栈, 即保护断点。
②、程序转到DTOB处执行 ,实现转子 ;且利用子程序的
最后一条指令RET ,将堆栈 的内容弹出 ,返回主程序。
⑵、寄存器及其所用工作单元内容的保护
设计子程序时, 除具有通用性外, 还要注意避免子程序无
意破坏主程序的数据的情况, 因此, 应将子程序中用到的寄
四、循环程序设计
1、循环程序的引入
例:计算Y=100ai 设和数为16位数
i=1
置数据区
MOV AX , 0 ;清结果寄存器 MOV BX,OFFSET TABL ;置地址指针
ADD AX , [BX] ;求部分和
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二循环程序设计
一、实验目的与要求
1.熟悉汇编语言运行、调试环境及方法。
2.掌握循环程序的设计方法。
3.掌握显示输出DOS功能调用的使用方法。
4.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验内容
在数据段中有从STRING单元开始存放的100个字节数据,编写程序要求将字符串中的大写字母转换为小写字母,并显示到屏幕上。
1.记录汇编源程序。
DA TA SEGMENT
MAX DB 20
ACT DB 7
STRING DB 'W','E','L','C','O','M','e'
DA TA ENDS
CODE SEGMENT
ASSUME CS: CODE,DS:DATA
START: MOV AX, DA TA
MOV DS, AX
BEGIN:
MOV CL, ACT
LEA DI, STRING
AGAIN: MOV AH, [DI]
CMP AH, 'A'
JL N EXT
CMP AH, 'Z'
JG NEXT
ADD AH, 20H
NEXT: MOV DL, AH
MOV AH, 02H
INT 21H
INC DI
LOOP AGAIN
MOV AH, 4CH
INT 21H
CODE ENDS
END START
2.记录调试过程中遇到的问题和解决的方法。