福建农林大学_汇编实验三_分支循环程序设计详解
实验3 循环与子程序汇编语言程序设计实验

六、执行到 5!,r2=1!+2!+3!+4!+5!=153=0x99
汇编程序代码:
4、 选做:利用 1 题中找最大数的方法,对内存中 19、21、4、33、51、16、72、28、39,2 的 10 个数据进行选择法升序排序。
5、 选做:用递归调用方法求 n!,n=6。 一、调试状态
12
二、执行 STRAT,开始给定义的寄存器赋值,然后跳转到 LOOP 子程序执行
分析:寄存器 r5 的值是 0x78,即是:1*2*3*4*5=120 汇编程序代码
9
3、 编写子程序调用程序 p3xxxx3.s,求 1!+2!+3!…+5!;其中子程序完成求 n!任务, 主程序完成求阶乘和的任务。
一、开始调试,执行 STRAT,给寄存器赋值,然后跳转到 LOOp 子程序执行
二、开始执行,r0=r0+1=1+1=2,同时 r3=r0*r1=2*1=2,如下面的图中的寄存器显示
分析:上面的图显示,r0=1,r1=1 三、开始执行 1*2
分析:上面的图显示:r0 自加 1,r0=2,r1=1 四、下面的图显示,r1*r0=r3=1*2=3
五、把 1*2=2 的值赋给 R1,
13
六、r0=2+1=3
七、R1*R0=2*3=6,值送到寄存器 R3 存放,r3=6
八、r0 自加 1 成 4,R0=4,R2=6
3
五、
分析:上面的图显示,寄存器 r0 的值是 0x28,即是 2*16+8=40=19+21 六、
分析:上面的图显示,寄存器 r0 的值是 0x2c, 即是 2*16+12=44=19+21+4 七、
循环程序设计实验

实验三分支、循环程序设计实验一、实验目的1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
3. 掌握循环结构程序设计、调试方法的方法。
二、实验设备TDN86/88教学实验系统一台。
三、实验内容及步骤1.已知有一个长x个字的数据块,存放在以0202H:1000H开始的存储区域内。
试编写一个完整的汇编语言程序,将该数据块复制到以0202H:1008H开始的存储区内。
(根据x的大小,判断从首地址,还是末地址传送)实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。
(2)在0202H:1000H开始的X个单元中依次存入数据,即:E0202:1000↙,并输入01、02、03、04、05、06、07、08……。
(3)G=0000:2000↙,运行以上程序(4)D0202:1008↙,显示结果为:01、02、03、04、05、06、07、08……。
(5)反复试几组数,考察程序的正确性。
2.在ADDR开始的单元中存放着一个字,将字中1的个数存入COUNT单元中。
算法:要测出1的个数就应逐位比较,可根据最高有效位是否为1来计数,然后用移位的方法把各位数逐次移到最高位去。
可以用测试字是否为0来作为结束条件,这样可缩短程序的执行时间,对不同的字循环次数不同,因此采用当型循环结构。
实验步骤(1)编制实验程序输入程序并检查无误,经汇编、连接后装入系统。
(2)用U0000:2000查看 MOV AX,XXXX(DATA)语句,即得到数据段段地址DS=XXXX用E命令EXXXX:0000↙,输入数据39,A3(3)G=0000:2000↙,运行实验程序。
(4)D XXXX:0002↙,显示应为结果________。
(5)反复试几组数,考察程序的正确性。
3.在当前数据段(DS决定),偏移地址为DATAB开始的顺序20个单元中,存放着某班80名同学某门考试的成绩。
编写程序统计大于等于90分;80-89分;70-79分;60-69分;小于60分的人数各位多少,并将结果放在同一数据段,偏移地址为BTRX开始的顺序单元中。
汇编实验报告(总)课案

福建农林大学金山学院(程序设计类课程)实验报告课程名称:汇编语言姓名:陈振韦系:信息与机电工程专业:电子信息工程年级:2012级学号: 126710100指导教师:刘永芬职称:讲师2013~2014学年第二学期实验项目列表福建农林大学金山学院实验报告系:信息与机电工程系专业:电子信息工程年级: 12 姓名:陈振韦学号: 126710100 实验课程:汇编语言实验室号:___试验A楼_608_ 实验设备号:实验时间: 2014,4,9 指导教师签字:刘永芬成绩:实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤(1)在记事本编写源程序 1.txt,masm 1.txe 回车,回车,出现提示输入1,生成1.lst,打开1.lst,查看内容。
汇编-循环与分支程序设计

汇编-循环与分支程序设计汇编-循环与分支程序设计1.引言在汇编语言中,循环与分支是非常重要的程序设计概念。
循环用于重复执行一段代码,而分支用于根据条件来选择不同的代码路径。
本文将详细介绍汇编语言中的循环与分支程序设计。
2.循环程序设计2.1 for 循环在汇编语言中,for 循环可以通过计数器和条件判断来实现。
以下是一个示例代码:________mov ecx, 10 。
设置计数器初始值为 10mov eax, 0 。
设置累加器初始值为 0for_loop:________add eax, ecx 。
累加计数器的值到累加器loop for_loop 。
循环,直到计数器为 0在上述示例代码中,循环的条件是计数器 ecx 的值非零。
每次循环时,累加器 eax 会将计数器的值累加到自身,然后计数器会自动减一,直到计数器为 0,循环结束。
2.2 while 循环在汇编语言中,while 循环可以通过条件判断来实现。
以下是一个示例代码:________mov eax, 0 。
设置累加器初始值为 0while_loop:________cmp eax, 10 。
比较累加器的值和 10jge end_while 。
如果累加器的值大于等于 10,跳出循环add eax, 1 。
累加器加 1jmp while_loop 。
跳到 while_loop 标签,继续循环end_while:________在上述示例代码中,循环的条件是累加器 eax 的值小于 10。
每次循环时,累加器会加 1,然后再进行条件判断,如果满足条件继续循环,否则跳出循环。
3.分支程序设计3.1 if-else 语句在汇编语言中,if-else 语句可以通过条件判断来实现。
以下是一个示例代码:________mov eax, 10 。
设置变量的初始值为 10cmp eax, 5 。
比较变量的值和 5jg greater 。
如果变量的值大于 5,跳转到greater 标签less:________。
实验三流程控制

福建农林大学金山学院实验报告系(教研室):信息与机电工程系专业:计算机科学与技术年级:2009 实验课程:Java 姓名:陈方波学号:092231042 实验室号:___605_ 计算机号:J605S042 实验时间:2011.05.19 指导教师签字:成绩:实验三流程控制一、实验目的和要求1、掌握分支、循环语句的使用。
2、打印的乘法表应该呈现阶梯状。
3、给定一个1-99999之间的整型数,程序可以判断它的位数,并判断是否是回文数。
4、实验报告给出完整代码。
二、实验内容和原理1、用循环语句打印一个99乘法表。
2、判断回文数(逆序排列后得到的数和原数相同)。
三、实验环境WindowXP系统NetBeans/JDK四、算法描述及实验步骤1、每项实验内容建立新类2、在main方法中编程五、实验结果12六、总结1.熟悉了分支、循环语句的使用。
2.对回文数有了了解。
附录:1.乘法表:classcfb{publicstaticvoidmain(String[]args){ inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)System.out.print(j+"*"+i+"="+i*j+" ");System.out.println();}}}2.判断回数:importjava.util.Scanner;classhws{publicstaticvoidmain(String[]args){intg,s,b,q,w,number;System.out.println("请输入一个1~99999之间的整形数");Scannerinput=newScanner(System.in);number=input.nextInt();if(number>=1&&number<10)System.out.println("这是个一位数");if(number>=10&&number<100){System.out.println("这是个两位数");s=number/10;g=number%10;System.out.println("十位数:"+s+"个位数:"+g);if(s==g)System.out.println("这个数是回文数");elseSystem.out.println("这个数不是回文数");}if(number>=100&&number<1000){System.out.println("这是个三位数");b=number/100;s=(number%100)/10;g=number%10;System.out.println("百位数:"+b+"十位数:"+s+"个位数:"+g);if(b==g)System.out.println("这个数是回文数");elseSystem.out.println("这个数不是回文数");}if(number>=1000&&number<10000){System.out.println("这是个四位数");q=number/1000;b=(number%1000)/100;s=(number%100)/10;g=number%10;System.out.println("千位数:"+q+"百位数:"+b+"十位数:"+s+"个位数:"+g);if((q==g)&&(b==s))System.out.println("这个数是回文数");elseSystem.out.println("这个数不是回文数");}if(number>=10000&&number<100000){System.out.println("这是一个五位数");w=number/10000;q=(number%10000)/1000;b=(number%1000)/100;s=(number%100)/10;g=num ber%10;System.out.println("万位数:"+w+"千位数:"+q+"百位数:"+b+"十位数:"+s+"个位数:"+g); if(w==g&&q==s)System.out.println("这个数是回文数");elseSystem.out.println("这个数不是回文数");}}}。
汇编实验报告分析解析

福建农林大学金山学院实验报告系:信息与机电工程专业:电子信息工程年级: 2013 班级: 3班姓名:单瑞学号: 136710101 实验课程:汇编语言实验室号:金综B705实验时间:2015/6/12指导教师签字:刘永芬成绩:实验三分支循环程序设计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 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, 0INT 21HCSEG ENDSEND START3.编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
C语言程序设计 实验报告3 循环结构

二、 实验内容和原理
1. 输入一行字符,分别统计出其中英文大写字母、小写字母、空格、数字和其他字符的个 数。 2. 计算输入的 10 个整数中正数的个数及正数平均值(要求使用 continue)。 3. 输出 3~100 之间所有的素数。 4. 请编程实现输出以下图案。
5. 输出所有的三位“水仙花数”。
合条件时相应表示增加,最后输出。
2、 用 for 语句限制个数,再用迭代方法处理,当 a 符合要求时,sum=sum+a。用 continue 结束本次循环。
3、 用 for 语句循环再用穷举法将 3~100 的数逐个检查,看它能不能被 2 到 sqrt(x) 中任意一整数整除,如果可以 num++。
ቤተ መጻሕፍቲ ባይዱ
数%d\n",letters,LETTERS,space,digit,other); return 0; } 2、#include<stdio.h> int main() {int i,num=0,a; float sum=0; printf("请任意输入是个整数(中间用空格隔开):"); for(i=1;i<=10;i++) {scanf("%d",&a); if(a>=0) {num++; sum+=a; continue; } } printf("正数个数:%d,正数个数总和:%.0f\n",num,sum); printf("正数平均数:%.2f\n",sum/num); return 0; } 3、#include<stdio.h> #include<math.h> int main() {int x,y,num=0; for(x=3;x<=100;x++) {for(y=2;y<=sqrt(x);y++) if(x%y==0) break; if(y>sqrt(x)) {printf("%d ",x); num++; } } printf("3-100 之间的素数有%d 个。\n",num); return 0; } 4、#include<stdio.h> int main() {int i,j,k; for(i=0;i<=4;i++) {for(j=0;j<=3-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); }
微机原理汇编实验-分支、循环及子程序设计实验

微机原理汇编实验-分支、循环及子程序设计实验学生实验报告实验课程名称:微机原理汇编实验开课实验室:年月日年级、专业、班学号姓名成绩实验项目名称分支、循环及子程序设计实验指导教师教师评语一、实验目的1.学习分支程序、循环结构程序的设计和调试方法。
2.学习子程序的定义和调试方法。
3.掌握分支、循环、子程序等程序的基本结构。
二、实验原理使用MASM汇编语言设计工具,设计简单的汇编语言程序并进行运行调试,以便掌握汇编语言设计、编写、调试和运行程序的方法。
三、实验仪器、材料1.软件MASM5.02.PC微机一台四、实验步骤1.输入程序并检查无误,经汇编、连接后生成.EXE文件。
2.使用DEBUG命令运行以上程序。
3.反复试几组数,考察程序的正确性。
五、实验源代码;-------------------------------------------------;程序名:Lab201;功能:实现对NUM中 -128~127; 的数进行负数统计;备注:负数的个数存放在BL中并在屏幕输出;-------------------------------------------------DSEG SEGMENT;定义需要统计的各个数值,数据值不能大于127,不能小于-128 NUM DB -100,-100,1,-100,30,-10,127,89,-128,20;统计数据的个数LENG EQU ($-NUM)DSEG ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DSEGSTART: MOV AX,DSEGMOV DS,AXMOV CX,LENGMOV BX,0000HMOV AX,DSEGMOV DS,AXMOV SI,OFFSET NUMAGAIN:MOV DL,[SI]CMP DL,0000HJL LITTELJMP BIGLITTEL:INC BL ;程序结束返回DOSADD SI,1LOOP AGAINJMP FINISHBIG:ADD SI,1LOOP AGAINJMP FINISH;---------------------------------- ;子程序名:TRANNUM;功能:将数值转换为数字; 字符输出;入口参数:DL;出口参数:无;---------------------------------- TRANNUM PROC NEARMOV AL,DLXOR AH,AHMOV CX,2MOV DL,10TRAN1:DIV DLXCHG AH,ALADD AL,'0'PUSH AXXCHG AH,ALMOV AH,0LOOP TRAN1MOV CX,2TRAN2:POP DXCALL DISPLAYLOOP TRAN2RETTRANNUM ENDP;----------------------------------;子程序名:DISPLAY;功能:将单个字符显示输出;入口参数:DL;出口参数:无;----------------------------------DISPLAY PROC NEARMOV AH,02HINT 21HRETDISPLAY ENDPFINISH:MOV DL,BLCALL TRANNUM ;调用子程序:TRANNUM MOV AH,4CH ;程序结束返回DOSINT 21HMAIN ENDPCODE ENDSEND START六、实验过程原始记录(数据图表、计算等)1、打开命令提示符:输入cmd2、输入:cd G:/asm/tos3、输入:G:5、输入:masm lab2016、输入:link lab2017、输入:lab201七、实验结果分析从程序代码分析,所给数值中有5个负数,运行程序后输出结果为05,说明程序能够实现其统计负数个数的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建农林大学计算机与信息学院实验报告
系:计算机专业:计算机科学与技术年级:2014
姓名学号:实验室号__ 计算机号
实验时间:2016-10-29指导教师签字:刘庆连成绩:
实验三分支循环程序设计
1.实验目的
(1)学习调试程序,查找逻辑错误;
(2)学习分支语句的编程和调试;
(3)学习循环语句的编程和调试。
2.实验内容
1)有10个数,统计正数的个数,存放在变量M中中。
经过汇编后,形成EXE文件。
在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。
用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL 寄存器中值的变化是否正确?(AL寄存器中存放正数的个数)
DSEG SEGMENT
MSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6
M DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
START: MOV AX, DSEG
MOV DS, AX
MOV CX, 10
MOV AL, 0
LEA SI, MSG
L1: MOV BL, [SI]
CMP BL, 0
JBE NEXT
INC AL
NEXT: INC SI
LOOP L1
MOV M, AL
MOV AL, 0
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
2)数据段中是一组无符号数,将最小数存放在M单元中。
按上题方法查找一处逻辑错误。
DSEG SEGMENT
MSG DB 13, 15, 7, 25, 24
M DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
START: MOV AX, DSEG
MOV DS, AX
MOV CX, 4
MOV AL, MSG
MOV SI, OFFSET MSG+1
L1: CMP AL, [SI]
JB NEXT
MOV AL, [SI]
NEXT: LOOP L1
MOV M, AL
MOV AL, 0
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
3)编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
4)编程:∑
-
=*
=
8
1
i
i i
B A
Y,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。
4.算法描述及实验步骤
实验一:输入题目代码->保存->运行->调试->观察结果(在Masm for windows在完成)
实验二: 根据代码实现功能从MSG中输入五个数,AL取第一个数,SI取第二个数,比较AL,SI所取到的数的大小,若AL<SI,SI取第三个数,再和AL比较;若AL>SI,AL=[SI]; 将AL的内容输出,则得出输出五个数中的最小数,步骤同实验一
实验三:依题可编写如下代码指令
实验四:依题可编写如下代码指令
5.调试过程
无
6. 实验结果
【实验一】
分步执行结果如下
分析:当将第二个数-2放入放入BL的时候发现数值是FE,转化为十进制数是254,并非是-2的十六进制,原因是JBE命令是用于无符号数的,指令说明如下,要实现有符号数的比较要使用JLE指令
JBE指令说明JLE指令说明
【实验二】
分步执行结果如下
分析:进入死循环,原因是两个数比较后,SI没有加1,一直停留在13和15的比较中,修改加入INC SI即可,如下图
【实验三】
执行结果如下
分析,BUL中4, -2, -6, 0, 5, 67, 8, -3, 5, 6 0的个数是1,实验结果与预期一致
【实验四】结果如下图
分析:Ai:10,45和Bi:8,2的∑
-
=*
=
8
1
i
i i
B A
Y结果是10*8+45*2=170转化为16进制是AA,有上图可知实验结果和预期一致!
7. 总结
通过此次实验,能够通过简单调试查找出错误,分步执行发现逻辑错误并改正,掌握并理解了分支语句的运用和循环语句的使用,纸上得来终觉浅,绝知此事要躬行,多多手动敲代码才能理解并掌握汇编的实质!!
附录:
【实验三代码】
DSEG SEGMENT
BUF DB4, -2, -6, 0, 5, 67, 8, -3, 5, 6
RESULT DB?
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG
MOV DS, AX
MOV CX, 10
MOV AL, 0
LEA SI, BUF
L1: MOV BL, [SI]
CMP BL, 0
JNE NEXT
INC AL
NEXT: INC SI
LOOP L1
MOV RESULT, AL
MOV AL, 0
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
【实验四代码】
DATA SEGMENT
NUM1 DB 10,45
NUM2 DB 8,2
REST DW?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA SI,NUM1
LEA DI,NUM2
MOV CX,10
MOV BX,0
L1: MOV AL,[SI]
MUL BYTE PTR[DI]
ADD BX,AX
INC SI
INC DI
LOOP L1
MOV REST,BX
MOV AH,4CH
INT 21H
CODE ENDS END START。