河北工业大学汇编语言知识程序设计实验

合集下载

51单片机汇编语言课设

51单片机汇编语言课设

河北工业大学计算机硬件技术基础(MCS-51)课程设计报告学院能源与环境工程班级热能103姓名刘龙学号 100685 成绩 __ ____一、题目:广告灯的控制二、系统功能的描述(1)程序运行后,每隔0.5s接在P1 口的8个发光二极管依次点亮0,1,2,3,4,5,6,7,最后8个发光二极管全部点亮;接着8个发光二极管轮流点亮0,1,2,3,4,5,6,7,每次只点亮一个;如此反复循环。

(2)按下按钮开关8个发光二极管全部点亮,闪烁5 次,然后从反方向点每隔1S亮7,6,5,4,3,2,1,0,之后全灭;反复循环2次。

三、设计方案(1)按接线要求连线(2)时间间隔可以采用软件延时的方法。

(3)在外部中断源0的中断服务程序中,8位发光二极管全部点亮,闪烁,从反方向点亮,之后全灭。

四、硬件系统设计(1)接线方式:将P1口的8个引脚分别接8位发光二极管0,1,2,3,4,5,6,7,外部中断0的引脚INT0接一个按钮开关。

(2)所需设备:8个发光二极管,一个按键开关,单片机在外部中断源0的中(3)资源分配:A .P1口的8个引脚分别接8个发光二极管0,1,2,3,4,5,6,7; 外部中断0的引脚INT0接一个按钮开关。

B. 堆栈栈顶指针为60H五、软件设计软件功能模块本程序主要分为3个功能模块(1)延时功能模块:定时器0采用查询方式延时1秒;软件延时0.5秒(2)中断功能模块:按下按钮,外部中断0发出中断请求,保护现场,执行中断服务程序,恢复现场,中断返回(3)发光二极管的点亮模块:采用带进位的循环移位来实现各种点亮方式:依次点亮,轮流点亮,闪烁。

(4).软件系统设计程序流程图:六、程序清单:ORG 0000HLJMP MAIN ;跳转到主程序ORG 0003HLJMP KEY ;跳转到中断服务程序MAIN:MOV SP.#60H ;设置堆栈指针SETB EA ;中断初始化SETB EX0 ;外部中断源开中断SETB IT0 ;边沿触发方式CLR C ;CY位清零MOV A,#0FFHLOOP0:RLC A ;带进位循环左移位CLR CMOV P1,A ;给P1值,控制灯LCALL DELAY ;延时子程序调用JB ACC.7,LOOP0 ;判断灯7是否亮了,亮了向下执行,否则循环LCALL DELAYMOV A,#0FFHLOOP1:RLC A ;控制灯循环点亮MOV P1,ALCALL DELAYJB ACC.7,LOOP1 ;灯7点亮后向下执行LJMP LOOP0 ;循环loop0KEY:PUSH PSW ;送入堆栈,保护断点PUSH ACCMOV R3,#2 ;设置循环次数MOV R2,#5LOOP2: MOV A,#0 ;全部点亮MOV P1,ALCALL DELAYMOV A,#0FFH ;全部熄灭MOV P1,ALCALL DELAYDJNZ R2,LOOP2 ;控制循环,实现闪烁5次LOOP3:CLR CRRC A ;带进位循环右移,灯从7到0点亮MOV P1,ALCALL DELAY ;延时1sLCALL DELAYJB ACC.0,LOOP3 ;判断灯0是否点亮MOV A,#0FFH ;灯全部熄灭MOV P1,ALCALL DELAYDJNZ R3,LOOP3 ;判断是否已经完成2次点亮POP ACC ;恢复断点POP PSWRETI ;中断返回程序DELAY: MOV R5,#5REPT1: MOV R6,#100REPT2: MOV R7,#200REPT3: NOPNOPNOPDJNZ R7,REPT3DJNZ R6,REPT2DJNZ R5,REPT1RETEND七、设计问题的不足和改进方案不足:程序亮灯间隔上仅采用了软件延时,灯的显示方式也没有改变改进:可用定时器来控制循环,另外,可考虑在点亮二极管的同时使用LED显示字符,使广告功能更加完善。

河北工业大学 单片机实验 第四次试验 实验八 查表程序设计

河北工业大学 单片机实验  第四次试验  实验八 查表程序设计

实验八查表程序设计一、实验目的1.进一步熟悉MCS-51指令系统和汇编语言程序设计。

2.学会用MOVC指令编写查表程序。

二、实验内容1.设计并调试一个查平方表的程序,其功能为应用查表指令MOVC A,@A+PC,求累加器A中数的平方值,结果平方值送A。

要求待查的(A)≤15。

2.设计并调试一个根据电压值查与其对应的温度值的查表程序,其功能为应用查表指令MOVC A,@A+DPTR,求(A)中电压值对应的温度值,将温度值送R2R3(温度值为二字节的压缩BCD码),电压值的范围为(A)≤0FFH。

实验程序参考框图如3-8所示。

三、实验步骤1.键入程序和预定表后;2.通过修改自变量参数启动并调试程序,直至正确为止。

3.边调试边体会用PC或DPTR作指针查表的区别。

四、实验报告要求根据实验内容和程序参考流程,编出所需查表程序,列出实验程序清单。

五、思考题1.当表的长度〉255个字节时应选哪一条指令查表?答:当表的长度〉255个字节时应选“MOVC A,@A+DPTR”指令查表,并且需要对DPH、DPL进行运算处理,求出表目地址,再用“MOVC A,@A+DPTR”指令查表。

2.用PC指针查表编程时应注意什么?答:应先用传送指令把所查数据的项数送入累加器A,并用“ADD A,#data”对A进行修正data值等于查表指令和数据表格之间的字节数,然后用“MOVC A,@A+PC”查表,同时用PC指针查表的表的范围不能大于255个字节。

六、参考程序清单1.求平方值查表程序:ORG 0000HADD A,#02HMOVC A,@A+PCSJMP $DB 0,1,4,9,16,25 36,49DB 64,81,100,121,144,169,196,225END本程序实现通过查表得A累加器中数的平方值并将结果送A,根据A中数值采用基址加变址方法找到所查数的地址得所对应的平方数。

例:当(A)=5时,执行过程如下:D:0XE0(A)PC指针 ORG 0000H 05HC:0X0000 ADD A,#02H 07HC:0X0002 MOVC A,@A+PC 19H ;A+PC=A(10),查表的19H(25) C:0X0003 SJMP $C:0X0005 DB 0,1,4,9,16,25 36,49DB 64,81,100,121,144,169,196,225END2.测量温度查表程序:双字节查表程序刘程序如图3-8所示:双字节查表参考程序清单:ORG 0000HMOV DPTR,#TABMOV R0,AADD A,R0MOV F0,CADD A,DPLMOV DPL,ACLR AADDC A,DPHMOV C,F0ADDC A,#0MOV DPH,ACLR AMOVC A,@A+DPTR ;查第一个字节MOV R2,ACLR AINC DPTRMOVC A,@A+DPTR ;查第二个字节MOV R3,ASJMP $TAB:DW 0100H,0110H,0120H,0130H,0140H,0150H,0160H ;温度表END本程序实现根据A中电压查表中与之对应的温度值,表中温度均为2字节故(A)*2+DPTR(表首地址)即可查的对应温度值。

B12040813--实验2

B12040813--实验2

B12040813--实验2实验报告( 2014/ 2015 学年第一学期)课程名称汇编语言程序设计实验名称汇编语言语法练习实验时间2014 年11 月 4 日指导单位计算机学院指导教师韩崇学生姓名孙军班级学号B12040813 学院(系) 计算机学院专业软件工程实验报告结构化程序设计及实验名称指导教师韩崇应用程序设计实验类型验证实验学时 2 实验时间2014.11.4 一、实验目的和要求实验目的:使学生掌握汇编语言程序设计的基本理论和方法,熟悉汇编语言的开发工具和开发过程,加深基本概念的理解,增强实际编程能力。

实验内容:1.从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串字符中的ASC码在42H~A5H之间的字符个数,并将统计结果以二进制形式显示在屏幕上。

2.用户登录验证程序的实现。

实验要求:1.掌握汇编语言语法格式以及汇编程序的编辑、汇编、链接和执行的开发全过程;2.掌握汇编语言分支,循环程序的设计。

二、实验环境(实验设备)硬件:微型计算机软件:汇编语言开发工具,如Borland公司的TASM 5.0三、实验过程描述与结果分析实验2.3.3代码:DATA SEGMENTBUF DB 255DB ?DB 255 DUP(?)CRLF DB 0DH,0AH,24H ;回车换行n DB 0 ;统计的字符数DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA BEG:MOV AX,DATAMOV DS,AXMOV AH,0AHMOV DX,OFFSET BUFINT 21HMOV AH,9MOV DX,OFFSET CRLFint 21hMOV SI,OFFSET BUFINC SIMOV CL,[SI] MOV CH,0 INC SILAST1: MOV AL,[si] CMP AL,42H JB NO_1 CMP AL,45H JA NO_1INC NNO_1:INC SI LOOP LAST1 MOV AL,N MOV CX,8D_NEXT: ROL AL,1 PUSH AX MOV AH,2 JC DISP_1 MOV DL,'0' JMP DISPDISP_1:MOV DL,'1'DISP:INT 21HPOP AXLOOP D_NEXTMOV AH,4CHINT 21HCODE ENDSEND BEG实验2.3.3结果:实验3.3.8代码:;FILENAME:EXA131.ASM .486CRLF MACRO ;宏定义MOV AH,0EHMOV AL,0DH ;回车INT 10HMOV AL,0AH ;换行INT 10HENDMOUTX MACRO X ;显示字符串XMOV AH,09HMOV DX,OFFSET XINT 21HENDMDATAS SEGMENT USE16BUF1 DB 'B12040821'BUF2 DB '12345'IN1 DB 20 DUP(?)IN2 DB 20 DUP(?)OUT1 DB 'please enter the username and password!','$'OUT2 DB 'USERNAME:','$'OUT3 DB 'PASSWORD:','$'OUT4 DB '*','$'OUT5 DB 'ERROR!','$'OUT6 DB '----------WELCOME BACK!----------','$' ;此处输入数据段代码DATAS ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAS,ES:DATAS START:MOV AX,DATASMOV DS,AXMOV ES,AXOUTX OUT1CRLFOUTX OUT2MOV BX,OFFSET IN1MOV CX,20LAST1:MOV AH,01H ;输入一个字符INT 21HMOV BYTE PTR [BX],ALCMP AL,0DHJZ JUMP1INC BXLOOP LAST1JUMP1:CRLFOUTX OUT3MOV BX,OFFSET IN2MOV CX,20LAST2:MOV AH,07H ;输入一字符,无回显INT 21HMOV BYTE PTR [BX],ALCMP AL,0DHJZ JUMP2INC BXOUTX OUT4LOOP LAST2JUMP2:CRLFCMP1: MOV SI,OFFSET IN1MOV DI,OFFSET BUF1MOV CX,9CLDREPE CMPSBJZ CMP2OUTX OUT5JMP EXITCMP2:MOV SI,OFFSET IN2MOV DI,OFFSET BUF2MOV CX,5CLDREPE CMPSBJZ SUCCESSOUTX OUT5JMP EXIT SUCCESS: OUTX OUT6 EXIT: MOV AH,4CHINT 21HCODE ENDSEND START实验3.3.8结果:实验报告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)这次实践要求我们把课本上各章节的内容学懂,学透,融会贯通才能达到课题的要求。

河北工业大学编译原理实验报告

河北工业大学编译原理实验报告

河北工业大学编译原理实验报告————————————————————————————————作者:————————————————————————————————日期:编译原理实验报告组员:韦廷廷(112455)、熊敏(112456)、马昊(113042)任课老师:吴清一、任务概述本次实验我们要完成的任务主要是实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法。

我们组的分工并不是词法分析、语法分析、语义分析每人负责一个,而是先确定每种分析按照哪一种方法实现,然后每个人写出自己的想法,按照自己的想法实验,最后总结到一起,有问题大家一起讨论,共同商量解决的办法。

二、系统设计实验采用的实现方法和依据:语言中的各类单词符号及其分类码表单词符号类别编码类别码的助记符单词值begin 1 BEGINend2ENDif 3 IFthen 4THENelse 5 ELSE标识符 6 ID 字母打头的字母数字串无符号常数7UCON 机内二进制表示< 8 LT<= 9 LE= 10 EQ<> 11 NE> 12 GT>=13GE:= 14 IS+ 15PL- 16 MI* 17 MU/18DI实验采用的实现方法和依据:文法:E→ T| E+T | E-TT → F | T*F| T/F F→i| (E)SLR(1)分析表状态ACTION GOTO()+- */ i # E T F0 S4 S5 1 2 31 S6 S7 Acc2 R3 R3 R3S8S9R33 R6 R6 R6 R6 R6R64 S4 S5 10 2 35 R8 R8 R8 R8 R8R86S4 S5 11 37 S4 S5 1238 S4 S5 139S4S5 1410 S15 S6 S711 R1R1 R1 S8 S9 R112 R2 R2 R2S8S9 R213R4 R4 R4R4 R4 R414 R5 R5R5 R5 R5 R515R7 R7 R7 R7 R7 R7三、系统实现(包括必要的框图,各.h和.c文件说明,所有函数功能的说明,数据结构、各种表格、变量等的说明,以及函数调用关系图等)(1)各.h和.c文件说明Cifa.cpp的功能:字符串扫描识别。

河北工业大学汇编语言程序设计实验

河北工业大学汇编语言程序设计实验

DEC DI
;DI=DI-1,即将 DI 指向前
一个存储单元
PUSH CX
;保存 CX 寄存器的内容
MOV CL, 04H
;给 CL 寄存器赋值为 04H
河北工业大学汇编语言实验设计
SHR DX, CL
;将[DX]逻辑右移四位
POP CX
;恢复 CX 寄存器的内容
LOOP BBB
;循环判断语句,CX=CX-1,若 CX
A ;在屏幕上显示结果 ;带返回码终止
3) 在 BUF 和 BUF+1、BUF+2 单元分别放有一个无符号字节型数,编程序将其中 最大数存入 MAX 单元,并在屏幕上显示。
STACK SEGMENT STACK
;堆栈段
DB 1000 DUP (0)
;定义其后的每个操作数都占有一个字节
STACK ENDS
ADD DI, 03
NEXT: MOV AX, DX
河北工业大学汇编语言实验设计
AND AX, 000FH CMP AL, 0AH JB QQQ ADD AL, 07H QQQ: ADD AL, 30H MOV [DI], AL DEC DI PUSH CX MOV CL, 14 SHR DX, CL POP CX LOOP NEXT MOV DX, OFFSET MOV AH, 09H INT 21H MOV AH, 4CH INT 21H CODE ENDS END START
DEC SI
;SI=SI-1,即将 SI 指向前一个存储单

PUSH CX
;保存 CX 寄存器的内容
MOV CL, 04H
;给 CL 寄存器赋值为 04H
SHR DX, CL

c++程序设计实验报告 直接可交版

c++程序设计实验报告  直接可交版

河北工业大学《C语言程序设计课程设计》报告学部(系)计算机科学与技术班级计C141 姓名赵冰心学号 148025 成绩____一、题目小学生四则运算练习器二、设计思路1、总体设计1)分析程序的功能练习者首先选择所要练习的运算类型(加减乘除),再选运算数据的范围。

系统自动出题,练习者解答,答错两次后系统给出正确答案并出下道题。

每次出十题2)系统总体结构每一次练习的过程可以由这几部分完成:练习者选择运算种类,练习者选择运算数范围,系统连续出题,系统判断正误并给出提示,系统统计答题分数,学生选择是否继续运算。

每次计算有三个关注:1运算类型的选择2运算数范围的选择3结果正误的判断。

程序关键部分:1 switch语句,实现对运算类型的选择,表达式满足条件后break跳出2继续对运算数范围的选择。

3选择好之后系统根据练习者的选择,随机出十道题。

出题用到for循环语句和rand()函数产生随机数。

4定义三个函数,加减乘。

对函数多次调用,来实现10道题的运算。

5每次答题,系统记录答题情况,给予相应的分值,并以此累加,最终得出总成绩。

2、各功能模块的设计:说明各功能模块的实现方法#include<stdio.h>//把程序需要使用的关于系统定义的函数printf()的一些信息文件stdio.h包含进来。

#include<stdlib.h>//下面有用到rand()()、srand()() 所以先用头文件#include<time.h>//根据时间产生随机数的头文件{int a,c,d,i,g;char b;while(1){int f=0;jiemian();scanf("%d%c",&a,&b);//输入a,bfor(i=0;i<10;i++){srand(time(NULL));//根据time.h头文件产生随机数switch(b)}printf("本次成绩为:%d\n",f);printf("是否继续?\n");printf("1 是 2否\n");scanf("%d",&g);if(g==2)break;//如果g=2则打破循环}}void jiemian(){printf("***********欢迎使用四则运算练习程序**************\n"); printf("请选择运算种类及运算范围\n");printf("1 加法\n");printf("2 减法\n");printf("3 乘法\n");printf("a:1~10\n");printf("b:1~50\n");printf("c:1~100\n");}加法运算int jia(int a,int b)//加法运算{int e;printf("%d+%d=",a,b);scanf("%d",&e);if(e==a+b)return 1;//如果e=a+b成立继续循环else//错误的话给出正确答案{printf("回答错误!正确答案为:%d\n",a+b);return 0;}}减法运算int jian(int a,int b)//减法运算{int e,t;if(a<b){t=a;a=b;b=t;}printf("%d-%d=",a,b);scanf("%d",&e);if(e==a-b)return 1;//如果e=a-b成立继续循环else{printf("回答错误!正确答案为:%d\n",a-b); return 0;}}乘法运算int cheng(int a,int b)//乘法运算{int e;printf("%d*%d=",a,b);scanf("%d",&e);if(e==a*b)//如果e=a*b成立则继续循环return 1;else{printf("回答错误!正确答案为:%d\n",a*b);return 0;//返回}}3、设计中的主要困难及解决方案1 如何选择加减乘法以及如何选择算数范围2 产生的随机数满足所选定的运算数范围,由于随机数是随机产生的,经过参考资料知道利用所需范围的边界可对随机数的范围进行限定。

河北工业大学java实验一

河北工业大学java实验一

实验一:Java基本语法【实验目的】了解Java的数据类型,掌握各种变量的声明方式,理解运算符的优先级,掌握Java基本数据类型、运算符与表达式,掌握顺序结构、选择结构和循环结构语法的程序设计方法。

【实验要求】1、编写一个声明Java不同数据类型变量的程序。

2、编写使用不同选择结构的程序。

3、编写使用不同循环结构结构的程序。

【实验内容】1、声明不同数据类型变量public class SimpleType{public static void main(String args[]){byte b=0x55;short s=0x55f;int i=1000000;long l=0xfffl;char c='c';float f=0.23F;double d=0.7E-3;boolean bool=true;System.out.println("b="+b);System.out.println("s="+s);System.out.println("i="+i);System.out.println("l="+l);System.out.println("c="+c);System.out.println("f="+f);System.out.println("d="+d);System.out.println("bool="+bool);}}2、(1)使用选择结构public class TestIf{public static void main(String args[]){boolean leap;int year=2005;if((year%4==0&&year%100!=0)||(year%400==0))//方法一System.out.println(year+"年是闰年");elseSystem.out.println(year+"年不是闰年");year=2008;//方法二if(year%4!=0)leap=false;else if(year%100!=0)leap=true;else if(year%400!=0)leap=false;elseleap=true;if(leap==true)System.out.println(year+"年是闰年");elseSystem.out.println(year+"年不是闰年");year=2050;//方法三if(year%4==0){if(year%100==0){if(year%400==0)leap=true;elseleap=false;}elseleap=false;}elseleap=false;if(leap==true)System.out.println(year+"年是闰年");elseSystem.out.println(year+"年不是闰年");}}(2)使用switch语句public class SwitchTest{public static void main(String args[])throws java.io.IOException {char a;System.out.println("Enter a number from 1--3:");a=(char)System.in.read();switch(a){case'1':System.out.println("win a Car!");break;case'2':System.out.println("picked the goat");break;case'3':System.out.println("get to keep your 100");break;default:System.out.println("entry");}}}3.使用循环结构(1)使用for语句public class TestFor{public static void main(String args[])throws java.io.IOException{ int fahr,cels;System.out.println("Celsius Fahrenheit");for(cels=0;cels<=100;cels+=5){fahr=cels*9/5+32;System.out.println(cels+" "+fahr);}char a;outer://this is the label for the outer loopfor(int i=0;i<10;i++)for(int j=0;j<10;j++){a=(char)System.in.read();if(a=='b')break outer;if(a=='c')continue outer;}}}2)使用while语句A、import java.io.*;public class TestWhile{public static void main(String args[])throws IOException{char ch;System.out.println("按1/2/3数字键可得大奖!");System.out.println("按空格键后回车可推出循环操作。

河北工业大学汇编语言程序设计实验.doc

河北工业大学汇编语言程序设计实验.doc

河北工业大学汇编语言程序设计实验..汇编语言程序设计实验网络*** ***实验一顺序与分支程序设计一、实验目的1) 掌握顺序程序设计方法。

2) 掌握分支程序的结构及分支程序的设计,调试方法。

2) 学习数据传送及算术和逻辑运算指令的用法。

3) 熟悉在pc机上建立、汇编、连接、调试和运行汇编语言程序的过程。

二、实验内容1.实验六从键盘上接收一位十进制数x,计算y值,并以十六进制形式显示出来,y按下列公式计算。

2..实验七实验内容:从键盘上接收两个一位十六进制数x和y,然后再输入一个a-d之间的一个字符,按下列要求计算。

a) 当输入字符为a,则计算x+y,并以十六进制形式显示出来b) 当输入字符为b,则计算|x-y|,并以十六进制形式显示出来c) 当输入字符为c,则计算x*y,并以十六进制形式显示出来d) 当输入字符为d,则计算x/y,并以十六进制形式显示出来三、实验代码实验六DATE SEGMENT X DB ?DATE ENDS ;数据段CODE SEGMENT ASSUME CS:CODE,DS:DATE START:MOV AX,DATE ;代码段MOV DS,AX ;初始化ds寄存器MOV AH,1 INT 21H ;读文件到缓冲区CMP AL,33H ;比较指令JB L0 ;A逻辑与指令mov x,al ;al给x al,x al,3h je l1 ;执行l1命令al,4h l4 ;执行l4命令al,5h l6 ;执行l6命令al,6h l7 ;执行l7命令l1:mul al add ;al+x l5:mov bl,al cl,4 shr al,cl ;移位指令al,9 jle l2 ;转移指令。

小于或等于,或者不大于则转移al,7 l2:add al,30h ;寄存器al加0x30 -省略部分-h,00000000b ch,0 cl,0 dh,25 dl,80 int 10h retdown1 endpcode endsend start实验二data segment cx1 dw 0 cx2 xn yn x y length ? wide color db 1data endsstack1 stack 30h dup(0)stack1 endscode assume cs:code,ss:stack1,ds:datastart:mov ax,data ds,ax ah,0 al,12h ah,01h 21h sub xn,ax ax,640 dx,0 div length,ax yn,ax ax,480 wide,ax cx,ynlop4:mov cx1,cx cx,xnlop3:mov cx2,cx call hh ax,length x,ax inc cx,cx2 loop lop3 ax,wide y,ax x,0 cx,cx1loop lop4 ah,1h al,3 ah,4ch 21hhh proc dx,ymov si,0lop6:mov bp,0mov cx,xlop1:mov bh,0 al,color ah,0ch cx bpcmp bp,lengthjae lop2jmplop1lop2:inc dxinc sicmp si,widejae lop7jmp lop6lop7:rethh start四、实验结果3*5分割4*4分割七、实验心得在实验时,首先要设置屏幕的显示模式,只有在已知显示模式的情况下才能够知道一个屏幕用多少的像素值才能够覆盖整个屏幕,才能进一步的设置每一步的具体的步数。

北方工业大学计算机专业汇编语言实验一详细报告(含代码)

北方工业大学计算机专业汇编语言实验一详细报告(含代码)

(9)装入命令 L,它有两种功能:-L 地址 驱动器 扇区号 扇区数:把磁盘上指定扇区的内容装入到内存 指定地址起始的单元中;-L [地址]:此命令装入已在 CS:5CH 中格式化的文件控制块所指定的文件。 (10)写命令 W,有两种格式:-W 地址 驱动器 扇区号 扇区数:把数据写入磁盘的指定扇区;-W [地 址]此命令把指定内存区域中的数据写入由 CS:5CH 处的 FCB 所规定的文件中。
(4)追踪命令 T,有两种格式:-T[=地址]从指定地址起执行一条指令,显示寄存器内容和状态;-T[=地址][值] 该命令从指定地址起执行 n 条命令后停下来,n 由[值]确定。
(5)显示内存单元内容的命令 D,格式为:-D[地址]或-D[范围]
(6)修改内存单元内容的命令 E,它有两种格式:-E 地址 内容表;-E 地址:逐个单元相继地修改。
注意: 字母不分大小写; 只使用 16 进制数,不加 H; 分割符只在两个数值之间是必须的,命令和参数之间可有可无 ; 键入回车键执行命令,Ctrl+Break 或 Ctrl+C 中止命令的执行 ; 如命令不符合 DEBUG 的规则,则提示“error”并使用“^”指示错误位置。
2、DEBUG 的主要命令:
;将偏移地址 303 装入 0D
-e,304,0E
;将偏移地址 304 装入 0E
MOV AX,BX
;BX 赋给 AX
MOV AX,0304H
;0304 赋给 AX
MOV AX,[0304H]
;地址为 0304 的值赋给 AX
MOV AX,[BX]
;BX 的值赋给 AX
MOV AX,0001[BX] ;BX 的值+0001 赋给 AX
(11)退出 DEBUG 命令 Q,该命令格式为 Q:它退出 DEBUG 程序,返回 DOS,但该命令本身并不把在内 存中的文件存盘,如需存盘,应在执行 Q 命令前先执行写命令 W。

实验4 顺序结构程序设计

实验4  顺序结构程序设计

河北工业大学城市学院《汇编语言程序设计》实验报告实验4 顺序结构程序设计一、实验目的1.掌握汇编语言集成开发环境下编写完整汇编程序的书写方法。

2.掌握汇编语言集成开发环境下汇编程序的汇编、连接、执行和调试。

3.常用伪指令的使用。

4. 掌握顺序结构程序的编写方法。

二、实验内容1.从键盘输入一个大写字母,将其转换为小写字母并显示在屏幕上解:程序代码为:DATAS SEGMENTDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV AH,1;功能号为1,键盘输入单字符并回显INT 21HADD AL,32MOV DL,ALMOV AH,2;功能号为2,显示输出单字符INT 21HMOV AH,4CHINT 21HCODES ENDSEND START运行结果如图所示:2.在内存X和Y单元各存放了一个非压缩BCD码,将它们组合为压缩BCD码并存于Z单元(高地址做高位)。

解:程序代码为:DATAS SEGMENTX DB 00000101BY DB 00000110BZ DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV CL,4SHL X,CLMOV CL,YOR CL,XMOV Z,ALMOV AH,4CHINT 21H CODES ENDSEND START运行结果如图所示:3.在内存TAB开始的16个单元连续存放了0-15的平方值(0-225),任给一个数X(0 ≤X ≤15),求X的平方值,并把结果存放在Y单元中。

解:程序代码为:DATAS SEGMENTTAB DB 0,1,4,9,16,25,36DB 49,64,81,100,121DB 144,169,196,225X DB 6Y DB? DATAS ENDS CODESSEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA BX,TABMOV AL,XMOV AH,0ADD BX,AXMOV AL,[BX]MOV Y,ALMOV AH,4CHINT 21H CODES ENDSEND START。

专题五汇编语言程序设计

专题五汇编语言程序设计
Hebei University of Technology
பைடு நூலகம்
河北省级精品课
课程名称:计算机硬件技术基础
课程内容:MCS-51单片机原理及应用
本讲内容: 专题五 汇编语言程序设计 主讲教师: 赵晓安
河北工业大学计算机科学与软件学院计算机基础教学部
本讲的教学目标和教学方法
教学目标:
使学生掌握MCS-51单片机指令的汇编语言程序设 计,为后续驱动硬件程序的学习打好基础。
4.2 MCS-51单片机汇编语言程序设计
4.2.1 简单程序设计
4.2.3 分支结构程序设计 4.2.3 循环程序设计 4.2.4 查表程序设计 4.2.5 散转程序设计 4.2.6 子程序设计 4.2.7 运算程序设计(根据学时选讲)
4.2.1 简单程序设计
顺序程序的特点:
从第一条指令开始依次执行每一条指令,直到程序执行完 毕,中间没有转移指令,没有分支。只有一个入口一个出口。
I/O口、定时/计数器、中断系统等关键的参数;
寄存器间接寻址中指针的选择和使用技巧。 四、从宏观上看,MCS-51汇编语言程序的整体结构. 从微观上看,微机中各组成部分是如何通过程序联系起来。
本专题基本内容
第四章 汇编语言程序设计
4.1 汇编语言程序设计基础 4.1.1 汇编语言格式 4.1.2 伪指令 4.1.3 汇编语言程序的汇编 4.1.4 汇编语言程序设计的一般步骤 4.2 MCS-51单片机汇编语言程序设计 4.2.1 简单程序设计 4.2.3 分支结构程序设计 4.2.3 循环程序设计 4.2.4 查表程序设计 4.2.5 散转程序设计 4.2.6子程序设计 4.2.7 运算程序设计(根据学时选讲)
存储

JAVA实验报告(河北工业大学)

JAVA实验报告(河北工业大学)
}
}
public static void main( String args[] ){
threee t = new threee();
t.func();
}
}
class thre
{
private int i=10;
public void func(){
do{
if(i%3==0)
System.out.print(i+" ");
else
System.out.print("不能");
}}
4、已知XYZ+YZZ=532,其中X、Y和Z为数字,编程求出X,Y和Z的值。
class xyz
{
public static void main(String args[]){
int x=0,y=0,z=0;
for(x=0;x<=9;x++){
leap=false;
else
leap=true;
im.out.println(year+"年是闰年");
else
System.out.println(year+"年不是闰年");
year=2050; //方法3
if (year%4==0) {
if (year%100==0) {
for(y=0;y<=9;y++){for(z=0;z<=9;z++){
if(a=='b') break ;
if(a=='c') continue;
}
}
}
}

51单片机汇编语言课设

51单片机汇编语言课设

河北工业大学计算机硬件技术基础(MCS-51单片机原理及应用)综合实验设计任务书学院班级设计人温逸云成绩一、题目:LED灯的显示控制二、功能:断开电源,将P1 口的8个引脚分别接8位LED灯,外部中断0的引脚INT0 接一个按钮开关,P3.0引脚接蜂鸣器。

三、程序运行后,接在P1 口的8个LED灯轮流点亮(跑马灯),每次只点亮一个;如此反复循环。

按钮开关模拟故障。

按下按钮开关表明产生故障,LED灯开始闪烁,同时发出声音报警;再次按下按钮开关,故障排除,LED灯继续轮流点亮,蜂鸣器停止发声。

四、电路示意图五、软件系统MainL6 L2,L4,L5L1,L3MainMain:中断初始化并让一个灯亮L1:故障清除L2:控制蜂鸣器L3:返回程序L4:灯闪烁 L5:灯流水时间间隔L6:实现跑马灯程序六、程序ORG 0000HLJMP MAINORG 0003HLJMP INT0SORG 0100HMAIN: SETB P3.7 ;将P3.7故障标志位设置为1 CLR PX0 ; 清0优先级控制位SETB EA ;将CPU开中断SETB EX0 ;允许外部中断0中断SETB IT0 ;边缘触发MOV A,#0FEH ;打开一个LED灯MOV P1,A;用移位实现跑马灯功能L6: LCALL DELAY ;调用延时程序RL A ;累加器A的值循环右移一位MOV P1,AAJMP L6 ;跳转到目的程序继续执行;用外部中断设置故障INT0S: mov p1,#0ffhSETB PX0JB P3.7,L1LJMP MAIN;故障清除L1: CLR P3.7MOV R4,#0FFHMOV R3,#80H;实现LED灯的闪烁L4: CPL P1.0CPL P1.1CPL P1.2CPL P1.3CPL P1.4CPL P1.5CPL P1.6CPL P1.7L2: CPL P3.0L5: DJNZ R3,L5DJNZ R4,L2AJMP L4;返回到主程序L3: RETI;子程序名:Delay;功能:延时500ms;入口参数:无;出口参数:无;占用资源:R5 R6 R7Delay: mov R5,#5Rept1: mov R6,#100Rept2: mov R7,#200Rept3: nopnopnopdjnz R7,Rept3djnz R6,Rept2djnz R5,Rept1retiend七、不足和改进不足:程序不够创新,并且程序稍有繁复改进:程序设计时要尽量让结构简单八、设计时所作的工作和体会工作:分析问题,提出结构,设计程序,调试,注释程序,整理结果体会:对一个繁杂的问题,要从各个分析,用合适的结构来解决。

河北工业大学 单片机 第三次实验内容

河北工业大学 单片机 第三次实验内容

3.3汇编语言程序设计实验实验六 分支程序设计一、 实验目的1. 进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。

2. 掌握分支结构程序设计的方法。

3. 学会用条件转移指令、CJNE 、JMP 及其配合使用来编写二分支、三分支和多分支程序。

二、 实验内容1. 二分支的条件转移程序设变量X 存放于R0,函数值Y 存放在R1,其中X 、Y 均为二进制数。

试按照下式的要求给Y 赋值:程序框图如图3-5所示:Y= 1 X>0 0 X=0 -1 X<0:三、实验步骤1.根据实验内容和参考程序流程图,编出相应的分支结构程序。

2.输入程序,汇编成功;3.用F4(执行到光标处)、F7(跟踪执行)、F8(单步执行)或断点运行等方式调试程序;4.观察程序的流程,记录运行结果。

四、思考题1.CJNE指令对CY 有影响吗?用CJNE 和JC/JNC指令配合应注意什么?在用JMP 指令前,若变址 255怎么办?答:1)CJNE指令对CY 有影响。

CJNE (目的字节),(源字节),rel 功能:目的字节与源字节比较,相等则继续执行,不相等则转移,同时,若目的字节>=源字节,(C)=0若目的字节<源字节,(C)=12)选取好正确的direct值以便确定Cy的值3)提前设好变址,使变址<2552.用什么指令可以实现多分支之间的隔离?答:控制、条件转移指令,包括JMP、CJNE、DJNZ、JC、JB等,可以转移到$或其他。

五、实验报告要求写出题目运行结果。

六、参考程序清单1、二分支的条件转移程序1)用二分支结构程序实现:ORG 0000HMOV A, R0JZ LOAD ;等于零转LOADJNB ACC.7,GO ;大于零转GOMOV A, #0FFHSJMP LOADGO: MOV A, #01HLOAD: MOV R1, ASJMP $END运行结果:(R1)=0X002)赋值(R0)=15H运行结果: (R1)=0X013)赋值(R0)=0F2H2)用三分支结构程序实现:ORG 0000HMOV A, R0JNZ COMP ;不等于零转COMPMOV R1,#00H ;等于零,则0 →(R1)SJMP MP3COMP: CJNE R0,#80H,MP1 ;(R0)中数与80H比较,不相等则转移到MP1 MOV R1,#0FFH ;若比较相等,则-1 →(R1)LJMP MP3MP1: JC MP2 ;两数不相等,(R0)> 0转MP2MOV R1,#0FFH ;(R0) < 0,-1 →(R1)LJMP MP3MP2: MOV R1,#01H ;(R0)>0,1 →(R1)MP3: SJMP $END运行结果:(R1)=0X00 2)赋值(R0)=15H3)赋值(R0)=0F2H实验七循环程序设计一、实验目的1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。

汇编语言程序设计实验教程

汇编语言程序设计实验教程

汇编语言程序设计实验教程石陆魁刘恩海河北工业大计算机科学与软件学院目录第一章上机过程 (3)1.1编辑源程序 (3)1.2 汇编源程序 (4)1.3连接目标程序 (5)1.4运行程序 (6)第二章DEBUG命令祥解 (7)2.1 DEBUG程序使用 (7)2.2 DEBUG的常用命令 (7)第三章汇编语言程序设计实验 (12)3.1实验一顺序与分支程序设计 (12)3.2 实验二循环与子程序程序设计 (13)3.3 实验三算术运算与代码转换程序设计 (15)3.4 实验四字符串的匹配与替换程序设计 (16)3.5 实验五输入输出程序设计 (17)第四章部分实验参考答案 (19)第一章上机过程1.1编辑源程序汇编语言源程序:用汇编语句编写的解决应用问题的程序。

汇编程序:将汇编语言源程序翻译成机器语言程序的系统。

汇编:将汇编语言程序翻译成机器语言程序的过程。

在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。

(1)编辑软件编辑软件:EDIT、QE、WORD、NOTEPAD等。

当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。

(2)汇编程序有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。

TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。

(3)连接程序用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的目标代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。

(4)辅助工具程序(.EXE)进行汇编语言程序调试和文件格式转换的程序有: 动态调试程序EXE2BIN.EXE 文件格式转换程序CREF.EXE 交叉引用程序编辑、汇编、连接、调试过程如图1.1所示。

河北工业大学Java程序设计实验报告材料

河北工业大学Java程序设计实验报告材料

Java程序设计实验报告班级:网络 151 :徐毅民学号: 153299实验一Java语言基础一.实验目的掌握Java语言的基本语法、基本数据类型的使用方法,掌握从键盘输入基本类型的数据,熟练运用分支、循环等语句控制程序流程。

二.实验容1、编写一个Java应用程序,用户从键盘输入十名学生的信息,至少包括、年龄、出生年月日、java课程实验成绩,成绩使用浮点数,年龄使用整型,程序将输出年龄、java课程实验成绩的平均值。

提示:Scanner对象调用nextDouble()或nextFloat()可以获取用户从键盘输入的浮点数。

2、使用Arrays类实现数组排序:使用java.util包中的Arrays类的类方法public static void sort(double a[])可以把参数a指定的double 类型数组按升序排序;public static void sort(double a[], int start , int end)可以把参数a指定的double类型数组中从位置start到end位置的值按升序排序。

给定数组int a[]={12,34,9,-23,45,6,90,123,19,45,34}; 从键盘读入一个整数,使用折半查找判断该整数是否在这个数组中,并将结果输出。

3、输出100~200之间的所有素数。

4、采用for循环求1至1000之的所有“完全数”。

所谓“完全数”是指一个数,恰好等于它的因子之和。

例如,6是一个完全数,因为6的因子为1、2、3,而6=1+2+3。

5、已知XYZ+YZZ=532,其中X、Y和Z为数字,编程求出X,Y和Z的值。

三.实验步骤实验1以最终学生信息管理系统为准实验2代码如下:import java.util.Arrays;import java.util.Scanner;public class test2 {public static void printDoubleArray(double a[]) {for(int i = 0; i < a.length; i++) {System.out.print(a[i]+"");}System.out.println();}public static void printfIntegerArray(int a[]) {for(int i = 0; i < a.length; i++) {System.out.print(a[i]+"");}System.out.println();}public static void main(String[] args) {double a[] = {2.6, 4.6, 2, 8, 888, 569.5, 454.5, 100, -84.5, 45}; System.out.println("原double数组a:"); printDoubleArray(a);Arrays.sort(a, 0, a.length/2);System.out.println("排序double数组a前一半:"); printDoubleArray(a);Arrays.sort(a);System.out.println("排序整个double数组a:"); printDoubleArray(a);int b[] = {12, 34, 9, -23, 45, 6, 90, 123, 19, 45, 34}; Arrays.sort(b);System.out.println("排序整个double数组b:"); printfIntegerArray(b);Scanner in = new Scanner(System.in);System.out.print("输入要查询的数字:");int key = in.nextInt();int i = Arrays.binarySearch(b, key);if(i < 0 || i >= b.length) {System.out.println(i+"输入数字不在数组中!");} else {System.out.println(b[i]+"在数组b第"+(i+1)+"位!");}}}实验3代码如下:public class test3 {public static boolean isPrime(int x) {if(x == 1) return false;int s = (int)Math.sqrt(x);for(int i = 2; i <= s; i++) {if(x%i == 0) return false;}return true;}public static void main(String[] args) {int cnt = 0;for(int i = 100; i < 200; i++) {if(isPrime(i)) {cnt++;System.out.printf("%4d", i);}if(isPrime(i) && cnt%10 == 0) System.out.println();}}实验4代码如下:public class test4 {public static boolean isCompleteNumber(int x) { int sum = 0;for(int i = 1; i < x; i++) {if(x%i == 0) sum += x;}return x == sum;}public static void main(String[] args) {int cnt = 0;for(int i = 1; i <= 1000; i++) {if(isCompleteNumber(i)) {cnt++;System.out.printf("%4d", i);}if(isCompleteNumber(i) && cnt%10 == 0)System.out.println();}}实验5代码如下:public class test5 {public static void main(String[] args) {for(int x = 0; x < 10; x++) {for(int y = 0; y < 10; y++) {for(int z = 0; z < 10; z++) {if(100*x+110*y+12*z == 532) {System.out.println("X="+x+" Y="+y+" Z="+z);return;}}}}}}四.详细的调试和运行结果实验2运行结果:原double数组a:2.6 4.6 2.0 8.0 888.0 569.5 454.5 100.0 -84.5 45.0 排序double数组a前一半:2.0 2.6 4.6 8.0 888.0 569.5 454.5 100.0 -84.5 45.0 排序整个double数组a:-84.5 2.0 2.6 4.6 8.0 45.0 100.0 454.5 569.5 888.0 排序整个double数组b:-23 6 9 12 19 34 34 45 45 90 123输入要查询的数字:-23-23在数组b第一位!实验3运行结果:101 103 107 109 113 127 131 137 149151 157 167 173 179 181 191 193实验4运行结果:2 3 5 7 11 13 17 19 23 2931 37 41 43 47 53 59 61 67 7173 79 83 89 97 101 103 107 109 113127 131 137 149 151 157 167 173179 181 191 193 211 223 227 229233 239 241 251 257 263 269 271 277 281283 293 307 311 313 317 331 337 347 349353 359 367 373 379 383 389 397 401 409419 421 431 433 439 443 449 457 461 463467 479 487 491 499 503 509 521 523 541547 557 563 569 571 577 587 593 599 601607 613 617 619 631 641 643 647 653 659661 673 677 683 691 701 709 719 727 733739 743 751 757 761 769 773 787 797 809811 821 823 827 829 839 853 857 859 863877 881 883 887 907 911 919 929 937 941947 953 967 971 977 983 991 997实验5运行结果:X=3 Y=2 Z=1五.实验感想通过本次从实验对java语言的基本语法有了基本了解,学会了使用控制台命令行的方式运行java程序。

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

汇编语言程序设计实验网络*** ***实验一 顺序与分支程序设计一 、实验目的1) 掌握顺序程序设计方法。

2) 掌握分支程序的结构及分支程序的设计,调试方法。

2) 学习数据传送及算术和逻辑运算指令的用法。

3) 熟悉在pc 机上建立、汇编、连接、调试和运行汇编语言程序的过程。

二、实验内容1.实验六从键盘上接收一位十进制数x ,计算y 值,并以十六进制形式显示出来,y 按下列公式计算。

⎪⎪⎩⎪⎪⎨⎧===-=+=)6(2/)5()4(2)3(2222X X X X X X X X X X Y2..实验七实验内容:从键盘上接收两个一位十六进制数x 和y ,然后再输入一个a-d 之间的一个字符,按下列要求计算。

a) 当输入字符为a ,则计算x+y ,并以十六进 制形式显示出来 b) 当输入字符为b ,则计算|x-y|,并以十六进制形式显示出来 c) 当输入字符为c ,则计算x*y ,并以十六进制形式显示出来 d)当输入字符为d ,则计算x/y ,并以十六进制形式显示出来三、实验代码 实验六 DATE SEGMENT X DB ?DATE ENDS ;数据段CODE SEGMENTASSUME CS:CODE,DS:DATESTART:MOV AX,DATE ;代码段MOV DS,AX ;初始化ds寄存器MOV AH,1INT 21H ;读文件到缓冲区CMP AL,33H ;比较指令JB L0 ;A<BCMP AL,36HJA L0AND AL,0FH ;逻辑与指令MOV X,AL ;al给xMOV AL,XCMP AL,3HJE L1 ;执行L1命令CMP AL,4HJE L4 ;执行L4命令CMP AL,5HJE L6 ;执行L6命令CMP AL,6HJE L7 ;执行L7命令L1:MUL ALADD AL,X ;al+xL5:MOV BL,ALMOV CL,4SHR AL,CL ;移位指令CMP AL,9JLE L2 ;转移指令。

小于或等于,或者不大于则转移 ADD AL,7L2:ADD AL,30H ;寄存器al加0x30MOV DL,ALMOV AH,2 ;把2放入ah里INT 21HAND BL,0FH ;逻辑与运算指令CMP BL,9JLE L3ADD BL,7 ;相加L3:ADD BL,30HMOV DL,BLMOV AH,2INT 21HJMP L0L4:MUL ALSUB AL,XJMP L5L6:MUL ALJMP L5L7:MUL ALSHR AL,1JMP L5L0:MOV AH,4CHINT 21HCODE ENDSEND START实验七DATA SEGMENTX DB 0Y DB 0W DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXXOR AX,AXMOV AH,1INT 21HCMP AL,39HJBE L1SUB AL,07HL1:SUB AL,30HMOV X,ALMOV AH,1INT 21HCMP AL,39HJBE L2SUB AL,07HL2:SUB AL,30HMOV Y,ALMOV AH,1INT 21HA:CMP AL,41HJNE BXOR AL,ALMOV AL,XADD AL,YJMP L3B:CMP AL,42H JNE CXOR AL,AL MOV AL,X SUB AL,Y MOV W,AL CMP AL,0 JG L3NEG ALMOV W,AL JMP L3C:CMP AL,43H JNE DXOR AL,AL MOV AL,X MUL YMOV W,AL JMP L3D:XOR AX,AX MOV AL,X DIV YMOV W,AL L3:MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JNA L4ADD DL,07H L4:ADD DL,30H MOV AH,02H INT 21HMOV DL,W AND DL,0FH CMP DL,9 JNA L5ADD DL,07H L5:ADD DL,30H MOV AH,02H INT 21HMOV AH,4CH INT 21HCODE ENDS四、实验结果:实验六结果实验七结果五、实验心得:(1)通过实验使我知道了和熟悉了汇编程序设计的步骤1.建立数学模型遇到一个题目,首先要进行全面的分析,根据问题提出的条件,特点,找出规律,找出问题的数学模型或者制定解决问题的规律。

2.绘制程序流程图流程图能够把比较抽象的问题变得而形象化,并且有助于理清楚思路,便于程序的编制,在程序的易读性和易维护性上有很大的帮助。

3.合理分配存储空间和寄存器汇编语言能够直接的调用存储器和寄存器。

程序运行时,大两量的数据,中间结果或最后的结果都存放在存储器中,且运行的程序目标代码在存储器中,节约空间是一个好的程序应该注意的问题。

4.编制程序根据语法指令编制程序5.人工检查用人工的方式检查程序是否有错,并及时的改正。

6.上机调试只有通过上机才能验证程序是否正确,经过反复的运行调试,才能得到正确的程序。

(2)掌握了分支程序的结构及分支程序的设计,调试方法和数据传送及算术和逻辑运算指令的用法。

汇编语言程序设计实验网络*** ***实验二循环与子程序程序设计一、实验目的1) 加深对循环结构的理解。

2)掌握循环程序的设计方法。

3)学习子程序的定义和调用方法。

4)掌握子程序、子程序的嵌套、递归子程序的结构。

5) 掌握子程序设计、编制及调试。

6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1)编制在屏幕上显示九九乘法表的程序。

2)编制在屏幕上显示用*组成的三角形的程序。

三、实验代码实验一DATA SEGMENTS2 DB ?S1 DB ?X DB 1Y DB 1S DB 0AHFCH=2AHFDH=3DHFKG=20HFHH=0AHFHC=0DHDATA ENDSSTACK1 SEGMENT STACKDB 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATAMOV DS,AXMOV CL,9LL1:PUSH CX ;将CL压入堆栈段MOV CL,YLL2:CALL L1 ;调用子程序L1INC XLOOP LL2MOV X,1INC YMOV DL,FHH ;输出换行和回车MOV AH,2INT 21HMOV DL,FHCMOV AH,2INT 21HPOP CX ;从堆栈段中取出CLLOOP LL1MOV AH,4CH ;程序结束INT 21HL1 PROC ;计算X*Y=Z并且输出X*Y=Z的子程序MOV DL,XADD DL,30HMOV AH,2INT 21HMOV DL,FCHMOV AH,2INT 21HMOV DL,YMOV AH,2INT 21HMOV DL,FDHMOV AH,2INT 21HMOV AL,XMUL YDIV SMOV S1,AHADD AL,30HMOV DL,ALMOV AH,2INT 21HADD S1,30HMOV DL,S1MOV AH,2INT 21HMOV DL,FKG ;输出空格MOV AH,2INT 21HRETL1 ENDP ;子程序结束CODE ENDSEND START实验二DATA SEGMENTN DB ?FCH=2AHFDH=3DHFKG=20HFHH=0AHFHC=0DHDATA ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,1 ;输入一位16进制数确定输出行数 INT 21H CMP AL,39H JBE L1 SUB AL,07HL1:SUB AL,30H MOV N,ALXOR BX,BXMOV CL,NMOV DL,FHH ;输出换行和回车MOV AH,2INT 21HMOV DL,FHCMOV AH,2INT 21HLOP:PUSH CXINC BLMOV CL,BLMOV DL,FCHLOP2:MOV AH,02HINT 21HLOOP LOP2POP CXMOV DL,0AHMOV AH,02HINT 21HMOV DL,FHCMOV AH,02HINT 21HCMP BL,9JZ L2LOOP LOPL2:MOV AH,4CH ;程序结束INT 21HCODES ENDSEND START四、实验结果:实验一结果实验二结果五、实验心得五、循环程序由初始化部分、循环部分、调整部分、控制部分组成1〉两种方式,一种是先判断在执行,另一种是先执行再判断。

2〉两种控制循环的方式a〉计数控制循环一般使用LOOP指令,要先将循环的次数放入CX中,在多重循环的计数控制中要注保存和复原上一次循环的断点信息,在保留和复原时可以使用堆栈进行处理。

自认为可以理解为一根盘绕了确定的圈数的绳子,又进入的头,又出去的尾。

b〉条件控制循环一般使用JMP指令使程序跳到这一段的开头,用CMP在循环中进行比较判断,再根据程序要求,选择适当的转移条件,跳出循环。

自认为可以理解为一圆形的导轨,并在导轨上设置一个初口,在符合条件时就在导轨上脱离,否则,将会在导轨上一直的转下去。

3〉再循环中可以同时使用两者,当即已知循环的次数限制范围,但又要求在符合条件时结束循环是,就要同时使用两者。

六、子程序的使用大大的简化了程序设计的思路,在完成一个程序时,可以简单的把一个程序划分为几个完整的几部分,使每一部分独立的完成特定的一部分和计算任务。

子程序的使用还可以大大的减小程序的体积,在一程序中,如果需要多次反复的是用某一段代码的话,就可以将这段代码设定为子程序,以后想使用时,只要一CALL再一RET 就OK啦。

我认为使用子程序的关键在于明白子程序的机理,明白子程序是如何保存和恢复断点的信息的,只有真正的理解了这一点才能更好地利用好子程序。

子程序的参数传递的方式有很多种,但是在堆栈段传递参数时,应该注意使用带立即数的返回的方式,在利用寄存器BP访问堆栈段来取得参数。

汇编语言程序设计实验网络*** ***实验三算术运算与代码转换程序设计一、实验目的1)掌握算术运算程序的设计方法。

2)掌握代码转换程序的设计方法。

3)进一步掌握各种程序结构。

4)熟练掌握和使用用DEBUG调试程序。

二、实验内容1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。

2)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。

相关文档
最新文档