福建农林大学_汇编实验三_分支循环程序设计详解
实验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.加深对循环结构的理解。
4.掌握循环结构程序设计的方法以及调试方法。
二、实验设备PC机一台,TD-PITE实验装置一套。
三、实验内容:设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1所示。
图3-1 源数据块与目的数据块在存储中的位置情况对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:如图3-2所示。
图3-2 程序流程图实验程序STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010HMOV SI, 3100HMOV DI, 3200HCMP SI, DIJA A2ADD SI, CXADD DI, CXDEC SIDEC DIA1: MOV AL, [SI]MOV [DI], ALDEC SIDEC DIDEC CXJNE A1JMP A3A2: MOV AL, [SI]MOV [DI], ALINC SIINC DIDEC CXJNE A2A3: JMP A3CODE ENDSEND START实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统;2. 用E命令在以SI为起始地址的单元中填入16个数;3. 运行程序,然后再停止运行;4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
实验3 循环程序设计
实验3 循环程序设计一、实验目的:掌握循环指令的使用方法;掌握实现单重、多重循环程序设计、编写、调试和运行的方法。
二、实验内容:1、从自然数1开始累加,直到累加和大于1000为止,统计被累加的自然数的个数,并把统计的个数送入n单元,将累加和送入sum单元。
2、内存地址BUFFER开始存放着10个带符号字节数组,编写程序求数组中正数、零和负数的个数,并分别将它们存于PLUS开始的单元。
3、内存中有一串以“$”结尾的字符串,统计其中“A”出现的次数。
三、试验程序:1.DATAS SEGMENTSUM DW 0 ;定义一字节变量N DW 0 ;定义字节变量DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS ;建立短语段寄存器的关系START:MOV AX,DATASMOV DS,AXMOV CX,0 ;给CX寄存器赋值0MOV BX,1AGAIN: ADD SUM,BXADD BX,1INC CXCMP SUM,1000 ;当sum的数大于1000,结束循环JBE AGAINMOV N,CX ;将个数送到内存N单元中MOV AH,4CHINT 21HCODES ENDSEND START2.DATAS SEGMENTX DB 00H,3DH,15H,16H,0F5H,0F7H,64H,0F8H,0E5H,23H ;定义10个数ZHENGSHU DB? ;存放正数的个数FUSHU DB? ;存放负数的个数LING DB?;存放0的个数DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV SI,OFFSET X ;取x的偏移地址XOR AH,AH ; LINGXOR DH,DH ; FUSHUXOR DL,DL ; ZHENGSHUMOV CX,10AGAIN:MOV AL,[SI]TEST AL,0FFHJNZ ZHFUINC AH ; LINGJMP NEXT1ZHFU:ROL AL,1JC NEXTINC DLJMP NEXT1NEXT:INC DHNEXT1:INC SILOOP AGAINMOV LING,AH ;将结果分别送到相应的内存MOV FUSHU,DHMOV ZHENGSHU,DLMOV AH,4CHINT 21HCODES ENDSEND START3.DATA SEGMENTBUF DB'ANFAASFAWE$' ;定义字符串N DB 0 ;预留单元DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXXOR BL,BLLEA SI,BUFLP2:MOV AL,[SI] ;取字符串的偏移地址CMP AL,'$'JZ LP3CMP AL,'A' ;取字符‘A’与AL的内容比较 JNZ LP1 ;不等则转移打到LP1INC BLLP1:INC SIJMP LP2LP3:MOV N,BLMOV AH,4CHINT 21HCODE ENDSEND START四、调试用U反汇编,查看内存的起始地址用g执行,用d查看结果040BH=1035 2DH=45 2.10个数所在的内存状况运算结果为正数5个,负数4个,零1个用E修改其中一个数结果为正数4个,负数5个,零1个3.字符串在内存的形式统计A的个数为4个用E修改字符串的内容为上结果A的个数为6个五.收获与体会: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压栈,保留初始数据,
总汇编语言循环分支程序设计
总汇编语言循环分支程序设计简介总汇编语言是一种低级语言,用于编写计算机的机器指令。
循环和分支结构是编写程序时经常使用的控制结构。
本文将介绍总汇编语言中循环和分支结构的设计和实现,并给出一些示例代码来帮助读者更好地理解。
循环结构循环结构允许我们重复执行一段代码,直到满足特定条件为止。
在总汇编语言中,有两种常用的循环结构:计数器控制循环和条件控制循环。
计数器控制循环计数器控制循环中,我们使用一个计数器来确定循环执行的次数。
下面是一个示例代码片段,展示了如何使用计数器控制循环:MOV CX, 5 ; 设置循环次数为5L1:; 循环体代码; ...LOOP L1 ; 循环次数减1,如果不为0,则跳转到标签L1继续循环在上面的代码中,我们使用MOV指令将值5赋给CX寄存器,作为循环次数。
然后,我们使用LOOP指令在每次循环结束后将CX寄存器的值减1,并检查其是否为0。
如果不为0,则跳转到标签L1处,继续执行循环体代码。
条件控制循环条件控制循环中,我们使用一个条件来确定循环是否继续执行。
总汇编语言提供了多个指令来实现条件判断,例如CMP、JMP、JE等。
以下是一个示例代码片段,展示了如何使用条件控制循环:MOV CX, 10 ; 设置循环次数L1:; 循环体代码; ...DEC CX ; 循环次数减1CMP CX, 0 ; 比较循环次数与0JNE L1 ; 如果循环次数不为0,则跳转到标签L1继续循环在上面的代码中,我们使用MOV指令将值10赋给CX寄存器,作为循环次数。
然后,在每次循环结束后,我们使用DEC指令将CX寄存器的值减1,并使用CMP指令与0进行比较。
如果循环次数不为0,则使用JNE指令跳转到标签L1处,继续执行循环体代码。
分支结构分支结构允许我们在特定条件下选择不同的执行路径。
在总汇编语言中,我们可以使用条件判断指令(如CMP、JMP、JE等)来实现分支结构。
单一条件分支单一条件分支结构中,根据特定条件的真假选择不同的执行路径。
分支与循环程序设计实验
一. 实验目的及实验环境实验目的:实验目的:1、掌握分支程序的设计方法。
、掌握分支程序的设计方法。
2、掌握宏定义及宏调用的基本方法。
、掌握宏定义及宏调用的基本方法。
3、了解小写和大写字母的ASCII 码表示及其转换方法。
了解数字及其它字符在的ASCII 码表示方法。
码表示方法。
4、掌握循环程序的设计方法。
、掌握循环程序的设计方法。
5、掌握比较指令、转移指令和循环指令的使用方法。
6、进一步掌握调试工具的使用方法、进一步掌握调试工具的使用方法 实验环境:实验环境:80x86系列微型计算机一台以及进行汇编语言程序设计所必需的编程工具(文本编辑器、(文本编辑器、ASM.EXE ASM.EXE ASM.EXE、、LINK.EXE LINK.EXE、、DEBUG.EXE DEBUG.EXE)) 二. 实验内容 1、 从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。
若输入为小写字母,显示“若输入为小写字母,显示“You Input a Lowercase Letter You Input a Lowercase Letter You Input a Lowercase Letter!!”;若输入为大写字母,写字母,显示显示显示““You Input a Uppercase Letter Letter!!”; 若输入为数字,若输入为数字,显示显示“You Input a Digit Input a Digit!!”; 若输入为其它字符,显示“若输入为其它字符,显示“You Input Other Letter You Input Other Letter You Input Other Letter!!”。
2、计算1+2+……n=?n=?,其中,其中n 通过键盘输入。
要求在屏幕上提供如下信息:上提供如下信息:Please input a number(1~627): ;出现此信息后通过键盘输入一个小于628的无符号整数1+2+1+2+……..n=sum ;其中n 为用户输入的数,为用户输入的数,sum sum 为所求的累加和为所求的累加和 程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。
实验三 循环程序设计实验报告
汇编语言程序设计实验
实验三循环程序设计
班级:姓名:学号:得分:
一. 实验目的:
二. 实验内容:
1.编程实现:从一个字节字符串中查找字符‘#’,如果查到则将其偏移地址送
到存储单元addr中,否则将0送到addr中。
2.编程实现:统计存储下列给定字符串的数据块中所有的“0”位的个数,并将
统计的结果送入COUNT存储单元。
“十七大的主要议程是:听取和审议党的十六届中央委员会的报告,审议中央纪
律检查委员会的工作报告,审议并通过《中国共产党章程(修正案)》,选举党
的十七届中央委员会,选举中央纪律检查委员会。
”
三. 实验仪器: PC 机
四. 实验步骤:
五.实验心得:。
福建农林大学汇编语言实验报告
3.实验内容及实验数据记录
1)输入程序观察寄存器变化使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。注意用T命令执行时,CS: IP寄存器的内容
DA2 DB 0AH, 0DH
COUNT EQU $-DA1
DATAENDS
END
(2)输入有错误的文件,修改错误语句。(MASM没有出现错误即可。不
必连接、运行。)
DATASEGMENT
VAR1DB 0, 25, ODH, 300
VAR2DB 12H, A4H, 6BH
VAR3DB ’ABCDEF’
DATASENDS
CODESSEGMENT
ASSUMECS: CODES, DS: DATAS
START:MOVAX, DATAS
MOVDS, AX
LEADX, STRING
MOVAH, 9
INT21H
MOVAH, 4CH
INT21H
CODESENDS
ENDSTART
1.算法描述及实验步骤
编写各代码并存储为源程序asm文件,对其进行汇编、连接。
v.输入:link 1.asm
vi.在系统出现的提示中输入:
Run file [1.exe]:输入1
List file[nul.map]:回车键
libraries[.lib]:回车键
vii.出现“no stack segment”警告,不理会。生成了1.exe可执行文件
汇编-循环与分支程序设计
汇编-循环与分支程序设计汇编-循环与分支程序设计导言汇编语言是计算机最底层的程序设计语言之一,它直接操作计算机的硬件资源。
循环和分支是编写汇编程序中常用的两种控制结构,它们能够使程序按照一定的条件执行不同的操作。
本文将介绍汇编语言中循环与分支的基本概念与程序设计技巧。
循环程序设计在汇编语言中,循环是通过条件判断和无条件跳转实现的。
常见的循环结构有`while`循环和`for`循环。
while循环assembly; 初始化init:; 初始化计数器值mov cx, 0; 循环开始loop_start:; 判断循环条件cmp cx, 10je loop_end; 执行循环体操作 ;; 递增计数器inc cx; 跳转到循环开始处 jmp loop_start; 循环结束loop_end:;for循环assembly; 初始化init:; 初始化计数器值 mov cx, 0; 计数器上界mov dx, 10; 循环开始loop_start:; 判断循环条件cmp cx, dxjg loop_end; 执行循环体操作 ;; 递增计数器inc cx; 跳转到循环开始处 jmp loop_start; 循环结束loop_end:;分支程序设计在汇编语言中,分支是通过条件判断和条件跳转实现的。
常见的分支结构有`if`语句和`switch`语句。
if语句assembly; 判断条件cmp ax, bxjg greaterje equaljl lessgreater:; 条件为真时执行的语句;equal:; 条件为真时执行的语句 ;less:; 条件为真时执行的语句 ;switch语句assembly; 计算switch表达式的值mov ax, switch_value; 开始判断cmp ax, 1je case_1cmp ax, 2je case_2cmp ax, 3je case_3jmp default; case 1case_1:; 执行case 1的语句 ;; case 2case_2:; 执行case 2的语句 ;; case 3case_3:; 执行case 3的语句 ;; defaultdefault:; 执行default语句 ;总结循环和分支是汇编语言中常用的程序设计结构。
- 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。