211123班北邮微原软件实验报告.docx

上传人:b****5 文档编号:3350035 上传时间:2022-11-22 格式:DOCX 页数:42 大小:521.74KB
下载 相关 举报
211123班北邮微原软件实验报告.docx_第1页
第1页 / 共42页
211123班北邮微原软件实验报告.docx_第2页
第2页 / 共42页
211123班北邮微原软件实验报告.docx_第3页
第3页 / 共42页
211123班北邮微原软件实验报告.docx_第4页
第4页 / 共42页
211123班北邮微原软件实验报告.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

211123班北邮微原软件实验报告.docx

《211123班北邮微原软件实验报告.docx》由会员分享,可在线阅读,更多相关《211123班北邮微原软件实验报告.docx(42页珍藏版)》请在冰豆网上搜索。

211123班北邮微原软件实验报告.docx

211123班北邮微原软件实验报告

2011211123班北邮微原软件实验报告

信息与通信工程学院

微机原理软件实验报告

班级:

2011211123

姓名:

学号:

日期:

2013.11.28

实验二分支、循环程序设计

一、实验目的

1.开始独立进行汇编语言程序设计;

2.掌握基本分支,循环程序设计;

3.掌握最简单的DOS功能调用。

二、实验内容

1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。

三、预习思考

1.十进制数0~9所对应的ASCII码是什么?

如何将十进制数0~9在屏幕上显示出来?

答:

0~9分别对应ASCII码的30H~39H。

将十进制数0~9显示在屏幕上,要用二进制数0~9分别加上30H。

2.如何检验一个数为正,为负或为零?

你能举出多少种不同的方法?

答:

和0相比是否相等,然后用该数和10000000相与,取出符号位判断,可区分正负。

还可以直接用CMP命令和0比较,然后用JZ等命令进行判断。

 

四、实验过程

1、流程图

 

 

 

 

2、源代码

DATASEGMENT

ARRAYDB8,0,0,5,8,-1,-2,-3,0,1,4,3

LENGEQU$-ARRAY;数组长度

POSIDB?

;正数个数

NEGTDB?

;负数个数

ZERODB?

;零的个数

POSIEVENDB?

;正偶数的个数

POSIODDDB?

;正奇数的个数

NEGTEVENDB?

;负偶数的个数

NEGTODDDB?

;负奇数的个数

POSICHARDB'Pos:

$'

NEGTCHARDB'Neg:

$'

ZEROCHARDB'Zero:

$'

EVENCHARDB'ou:

$'

ODDCHARDB'ji:

$'

CRDB0DH,0AH,'$';回车换行

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETARRAY-1

MOVCL,LENG;数组长度

MOVAL,0

LOP:

CMPCL,0;循环控制条件

JECALC

INCSI

DECCL

MOVBL,[SI];基址加变址寻址

CMPBL,AL;和零比较

JGISPOSI;是正数

JEISZERO;是零

JLISNEGT;是负数

ISPOSI:

INCPOSI;正数个数加一

ANDBX,1

ADDPOSIEVEN,BL;和1与之后的结果加到正偶数中

JMPLOP

ISZERO:

INCZERO

JMPLOP

ISNEGT:

INCNEGT;负数个数加一

ANDBX,1

ADDNEGTEVEN,BL;和1与之后结果加到负偶数中

JMPLOP

CALC:

MOVAH,POSI

MOVAL,POSIEVEN

SUBAH,AL;计算正奇数个数

MOVPOSIODD,AH

MOVAH,NEGT

MOVAL,NEGTEVEN

SUBAH,AL;计算负奇数个数

MOVNEGTODD,AH

PRINT:

;打印

MOVAH,09H

MOVDX,OFFSETPOSICHAR

INT21H

MOVAH,02H

MOVDL,POSI

ADDDL,30H

INT21H

MOVAH,09H

MOVDX,OFFSETEVENCHAR

INT21H

MOVAH,02H

MOVDL,POSIEVEN

ADDDL,30H

INT21H

MOVAH,09H

MOVDX,OFFSETODDCHAR

INT21H

MOVAH,02H

MOVDL,POSIODD

ADDDL,30H

INT21H

MOVDX,OFFSETCR

MOVAH,09H

INT21H

MOVAH,09H

MOVDX,OFFSETNEGTCHAR

INT21H

MOVAH,02H

MOVDL,NEGT

ADDDL,30H

INT21H

MOVAH,09H

MOVDX,OFFSETEVENCHAR

INT21H

MOVAH,02H

MOVDL,NEGTEVEN

ADDDL,30H

INT21H

MOVAH,09H

MOVDX,OFFSETODDCHAR

INT21H

MOVAH,02H

MOVDL,NEGTODD

ADDDL,30H

INT21H

MOVDX,OFFSETCR

MOVAH,09H

INT21H

MOVAH,09H

MOVDX,OFFSETZEROCHAR

INT21H

MOVAH,02H

MOVDL,ZERO

ADDDL,30H

INT21H

EXT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

五、实验分析

实验结果如下:

 

六.预习题

1.十进制数0--9所对应的ASCII码是什么?

如何将十进制数0--9在

屏幕上显示出来?

答:

0-9的ascii码为,30h,31h,32h,34h,35h,36h,37h,38h,39h,

将要显示的数加上30h,得到该数的ascii码,再利用DOS功能调用显示单个字符

2.如何检验一个数为正,为负或为零?

你能举出多少种不同的方法?

答:

利用cmp指令,利用TEST指令,将该数与0相减,观察标志位。

检查最高位,为0是正数,为1时再检查其他位判断是负数或0

七、实验总结

通过上课和实验编程初步掌握了基本分支,循环程序的设计,数字的显示相关功能,即掌握了最简单的DOS功能调用。

但是用这种方法预见如果显示一串在程序中得到的数字,将会是比较繁琐的过程。

 

实验三代码转换程序设计

一、实验目的

1.掌握几种最基本的代码转换方法;

2.运用子程序进行程序设计。

二、实验内容

1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。

2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。

3.对输入要有检错措施,以防止非法字符输入,并有适当的提示。

4.将整个程序分解为若干模块,分别用子程序实现。

在报告中要给出模块层次图。

三、预习思考

1.如何将输入的两个字符(0~9)变为十进制或二进制数?

答:

输入的字符0~9是ASCII码表示的,对应于30H~39H,通过减去30H,可以转换为相应的计算机数。

2.如何将选出的最小值(二进制或十进制)变为ASCII码再进行显示?

答:

如果采用输入时把ASCII码转换为数字,然后比较数字的大小再输出,那么输出时还需要把数字再次转换为ASCII码。

这是不明智的。

可以直接读入并存储数字的ASCII码,容易比较其大小,然后直接输出ASCII码即可。

3.你觉得采用二进制运算还是十进制运算更适合于这个实验?

答:

采用二进制或者十进制都需要进行ASCII码到数字的转换和其反向转换,换用新的思路可以大大简化编程负担。

即直接使用数字对应的ASCII比较,分别比较十位和个位,最后直接输出字符即可。

四、实验过程

1、流程图

 

 

 

 

2、源代码

DATA  SEGMENT   ;定义数据段

      BUFFER  DB        100

              DB        ?

              DB        100 DUP(?

      RESULT  DB        ?

        STR1  DB        'please input number:

$'

        STR2  DB        'The minimum :

$'

        STR3  DB        'INPUT IS WRONG!

$'

          CK  DB        ?

        DATA  ENDS

       STACK  SEGMENT   STACK 'stack'

              DB        100 DUP('s')

       STACK  ENDS

        CODE  SEGMENT   ;定义代码段

              ASSUME    CS:

CODE,DS:

DATA,SS:

STACK

       START  PROC      FAR

              PUSH      DS

              XOR       AX,AX

              PUSH      AX

              MOV       AX,DATA

              MOV       DS,AX

;输出信息

        AGAIN:

LEA       DX,STR1

              MOV       AH,9

              INT       21H

  

              MOV       DL,0AH

              MOV       AH,2

              INT       21H

              MOV       DL,0DH

              MOV       AH,2

              INT       21H

          

              LEA       DX,BUFFER

              MOV       AH,10

              INT       21H

              MOV       DL,0AH

              MOV       AH,2

              INT       21H

              MOV       DL,0DH

              MOV       AH,2

              INT       21H

              CALL      CHECK

              CMP       CK,0

              JZ        AGAIN

              CALL      TRANSFORM

              CALL      COM

              LEA       DX,STR2

              MOV       AH,9

              INT       21H

              CALL      DISPY

 

              RET

       START  ENDP

   ;子程序check 检查是否符合规范

       CHECK  PROC

              LEA       BX,BUFFER+2

              MOV       CX,32H

              MOV       CK,1

      NEXT1:

  MOV       AL,[BX]

              CMP       AL,39H

              JNS       WARNING

              CMP       AL,30H

              JS        WARNING

              MOV       AL,[BX+1]

              CMP       AL,39H

              JNS       WARNING

              CMP       AL,30H

              JS        WARNING

              MOV       AL,[BX+2]

              CMP       AL,0DH

              JZ        FINISH

              CMP       AL,20H

              JZ        NEXT

              JMP       WARNING

       NEXT:

  ADD       BX,3

              DEC       CX

              JNZ       NEXT1

    WARNING:

              MOV       DL,0AH

              MOV       AH,2

              INT       21H

              MOV       DL,0DH

              MOV       AH,2

              INT       21H

              LEA       DX,STR3

              MOV       AH,9

              INT       21H

              MOV       DL,0AH

              MOV       AH,2

              INT       21H

              MOV       DL,0DH

              MOV       AH,2

              INT       21H

              MOV       CK,0

     FINISH:

  RET

       CHECK  ENDP

   ;子程序transform进行排序算法

   TRANSFORM  PROC

              LEA       BX,BUFFER+2

      NEXT3:

  MOV       AH,[BX]

              AND       AH,0FH

              SAL       AH,1

              MOV       DL,AH

              MOV       CL,2

              SAL       AH,CL

              ADD       AH,DL

              MOV       AL,[BX+1]

              AND       AL,0FH

              ADD       AL,AH

              MOV       [BX],AL

              MOV       AL,[BX+2]

              ADD       BX,3

              CMP       AL,0DH

              JNZ       NEXT3

              RET

   TRANSFORM  ENDP

             

         ;子程序com进行输出结果

         COM  PROC

              LEA       BX,BUFFER+2

              MOV       AL,[BX]

      NEXT2:

  ADD       BX,3

              CMP       AL,[BX]

              JS        NEXT4

              MOV       AL,[BX]

      NEXT4:

  MOV       DL,[BX+2]

              CMP       DL,0DH

              JNZ       NEXT2

              MOV       RESULT,AL

              RET

         COM  ENDP

       子程序dispy进行显示      

       DISPY  PROC

              MOV       BL,RESULT

              MOV       BH,0

      NEXT6:

  CMP       BL,0AH

              JS        NEXT5

              INC       BH

              SUB       BL,0AH

              JMP       NEXT6

      NEXT5:

  ADD       BH,30H

              ADD       BL,30H

              MOV       DL,BH

              MOV       AH,2

              INT       21H

              MOV       DL,BL

              MOV       AH,2

              INT       21H

              RET

       DISPY  ENDP

        CODE  ENDS

              END       START

3、模块层次图

 

五、输出结果

说明:

对输入的数字进行了位数和范围的严格限制,即必须是两位数字,如果数字小于10,需要补齐零。

空格分隔不同数字输入,回车结束。

一位数后面空格为错误,回车后判断。

六.预习题

1如何将输入的两个字符(0--9)变为十进制或二进制数?

答:

将输入的字符减去30H,可得到十进制数

 

2如何将选出的最小值(二进制或十进制)变为ASCII码再进行显示?

答:

先定义一个字节的数据,分为十位和低位,每次将输入的数十位和已存的十位相比较,若小于则将输入的字符和已存的交换,大于则不交换,等于时比较个位,若小于则交换,最后将十位和个位分别加上30H变为相应的ascii码输出

3你觉得采用二进制运算还是十进制运算更适合于这个实验?

答:

十进制

七.实验心得与体会

这次的实验相较于上次复杂了很多,光编写代码的时间就用了2个小时,子程序设计的最重要的地方在于入口参数、出口参数的设计与主程序之间的关系。

还有子程序功能之前应该保护现场。

本实验主要将子程序设计在从键盘输入数字的功能,并设置标志,用于主程序确认输入是否正确。

分隔符、结束符的确认较为简单,只需一个比较就可以了。

数字的确认需要两个比较,即必须在0~9之间。

输入错误时调用09号功能输出提示字符串。

对于最小值的确认,初始应设为最大值99,以方便接下来的刷新。

得到最小值就将其赋给MIN,最后再位、个位分别输出。

总的来说,这次实验是第一次遇到比较多的挑战,但自己都慢慢的解决了,很有成就感。

 

实验四子程序设计

一、实验目的

1.进一步掌握子程序设计方法;

2.进一步掌握基本的DOS功能调用。

二、实验内容

1.从键盘上输入某班学生的某科目成绩。

输入按学生的学号由小到大的顺序输入。

2.统计检查每个学生的名次。

3.将统计结果在屏幕上显示。

4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜。

输出应便于阅读.尽可能考虑美观。

5.输入要有检错手段。

三、预习思考

1.如何确定一个学生在这门科目中的名次?

答:

1.可以抽取每个学生的成绩和其他所有学生的成绩进行比较,然后统计比其分数高的学生,得出该学生的名次。

2.可以把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩指针。

然后比较指针所指的成绩的大小,根据比较结果移动指针完成排序。

2.输入结束后,采用什么方法进行比较以得到学生的名次最为简单?

答:

采用移动指针完成排序的方法在汇编语言下实现,复杂度较高。

由于人数比较少,冒泡法还是比较简洁的。

冒泡法的时间和空间性能都还不错,可以接受。

3.

准备好模块层次图。

 

4.给出输出显示的形式。

答:

根据输入的每个学生的ID,成绩,列出一个表,后面跟着排名次数。

具体形式参见实验分析部分的输出截图。

四、实验过程

1、流程图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1