分支与循环程序设计实验.docx

上传人:b****6 文档编号:8178585 上传时间:2023-01-29 格式:DOCX 页数:18 大小:173.01KB
下载 相关 举报
分支与循环程序设计实验.docx_第1页
第1页 / 共18页
分支与循环程序设计实验.docx_第2页
第2页 / 共18页
分支与循环程序设计实验.docx_第3页
第3页 / 共18页
分支与循环程序设计实验.docx_第4页
第4页 / 共18页
分支与循环程序设计实验.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

分支与循环程序设计实验.docx

《分支与循环程序设计实验.docx》由会员分享,可在线阅读,更多相关《分支与循环程序设计实验.docx(18页珍藏版)》请在冰豆网上搜索。

分支与循环程序设计实验.docx

分支与循环程序设计实验

1.实验目的及实验环境

实验目的:

1、掌握分支程序的设计方法。

2、掌握宏定义及宏调用的基本方法。

3、了解小写和大写字母的ASCII码表示及其转换方法。

了解数字及其它字符在的ASCII码表示方法。

4、掌握循环程序的设计方法。

5、掌握比较指令、转移指令和循环指令的使用方法。

6、进一步掌握调试工具的使用方法

实验环境:

80x86系列微型计算机一台以及进行汇编语言程序设计所必需的编程工具(文本编辑器、ASM.EXE、LINK.EXE、DEBUG.EXE)

2.实验内容

1、从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。

若输入为小写字母,显示“YouInputaLowercaseLetter!

”;若输入为大写字母,显示“YouInputaUppercaseLetter!

”;若输入为数字,显示“YouInputaDigit!

”;若输入为其它字符,显示“YouInputOtherLetter!

”。

2、计算1+2+……n=?

,其中n通过键盘输入。

要求在屏幕上提供如下信息:

Pleaseinputanumber(1627):

;出现此信息后通过键盘输入一个小于628的无符号整数

1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和

程序运行情况如下图所示(说明:

图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。

3.方案设计

(一)分支程序设计实验

1、编程指导

数字09的ASCII码为30H39H;大写字母的ASCII码为41H5AH,小写字母的ASCII码为61H7AH。

本题目将字符分为小写字母、大写字母、数字及其它字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。

字符串显示使用功能号为09H的DOS功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。

2、

流程图及程序框图

(1)流程图

(2)程序框架

DATASEGMENT

INFOR1DB0AH,0DH,"PleasePressAnyKeytoinputaletter:

$"

INFOR2DB0AH,0DH,"YouInputaLowercaseLetter!

$"

INFOR3DB0AH,0DH,"YouInputaUppercaseLetter!

$"

INFOR4DB0AH,0DH,"YouInputaDigit!

$"

INFOR5DB0AH,0DH,"YouInputOtherLetter!

$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

显示信息“PleasePressAnyKeytoinputaletter”的指令序列以及接收从键盘输入一个字符的指令序列

MOVDS,AX

MOVDX,OFFSETINFOR1

MOVAH,09H

CMPAL,'0'

JBOTHER

CMPAL,'9'

JBEDIGIT

CMPAL,'A'

JBOTHER

CMPAL,'Z'

JBEUPPER

CMPAL,'a'

JBOTHER

CMPAL,'z'

JBELOWER

JMPPEND

显示“YouInputaLowercaseLetter!

”的指令序列

LOWER:

JMPPEND;注意执行完一个分支后应使程序跳出

显示“YouInputaUppercaseLetter”的指令序列

UPPER:

JMPPEND

显示“YouInputaDigit!

”的指令序列

DIGIT:

MOVDX,OFFSETINFOR4

JMPPEND

显示“YouInputOtherLetter!

”的指令序列

OTHER:

PEND:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3、课后习题

在屏幕上显示信息“Areyoureallywanttoexit?

”,然后从键盘输入一个字符,若输入“Y”或“y”,则显示“Thankyouforyourusing!

”后程序结束;若输入“N”或“n”,则显示“"Let'scontinue!

”后程序结束;若输入其它字符,则显示“Youpressanerrorkey!

”后程序结束(要求尽量使用宏指令以便使源程序更加简洁)。

(二)循环程序设计实验

1、编程指导

(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。

将键盘输入的十进制数转换为二进制数的程序清单如下:

DATASEGMENT

INF1DB"Pleaseinputanumber(0-65535):

$"

IBUFDB7,0,6DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETINF1

MOVAH,09H

INT21H

MOVDX,OFFSETIBUF;键入一个十进制数(<65535)

MOVAH,0AH

INT21H

MOVCL,IBUF+1;十进制数的位数送CX

MOVCH,0

MOVSI,OFFSETIBUF+2;指向输入的第一个字符(最高位)

MOVAX,0;开始将十进制数转换为二进制数

AGAIN:

MOVDX,10;((010+a4)10+…)10+a0

MULDX

ANDBYTEPTR[SI],0FH

ADDAL,[SI]

ADCAH,0

INCSI

LOOPAGAIN

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

本程序功能:

从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。

(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数。

将二进制数转换为十进制数的程序清单如下:

DATASEGMENT

OBUFDB6DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETOBUF+5

MOVBYTEPTR[BX],'$'

MOVCX,10;做(DX):

(AX)/10运算

LOOP1:

MOVDX,0;被除数高16位清0

DIVCX

ADDDL,30H;将DL中的一位十进制数转换为ASCII码

DECBX

MOV[BX],DL

ORAX,AX

JNZLOOP1

;判断商是否为0,不为0继续

MOVDX,BX

MOVAH,09H

INT21H

;显示转换得到的十进制数

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

本程序功能:

将存储在AX寄存器中的二进制数转换为十进制数并显示。

2、

流程图及程序框架

(1)流程图

(2)程序框架

DATASEGMENT

INF1DB"Pleaseinputanumber(0-65535):

$"

IBUFDB7,0,6DUP(?

OBUFDB6DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

接收从键盘输入的十进制数,并将其转换为二进制数(存AX寄存器)的指令序列

MOVDS,AX

MOVCX,AX

MOVAX,0

MOVBX,1

LOOP2:

ADDAX,BX

INCBX

将AX中存放的二进制数转换为十进制数并显示的指令序列

LOOPLOOP2

CODEENDS

ENDSTART

3、实验习题

从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和累加和。

显示格式为:

1+2+…+n=sum,其中n为累加个数,sum为累加和

四.测试数据及运行结果

1.分支程序设计实验

 

课后题:

2.循环程序设计实验

课后题:

五.总结

通过实验三(分支程序设计实验),我熟悉掌握了分支程序的设计方法以及宏定义及宏调用的基本方法,了解了小写和大写字母的ASCII码表示及其转换方法以及数字及其它字符在的ASCII码表示方法,并对分支程序和宏指令更加熟悉,进一步理解和巩固课堂学习内容。

通过实验二(循环程序设计实验),我学习和掌握了循环程序的设计方法以及比较指令、转移指令和循环指令的使用方法,并进一步掌握了调试工具的使用方法。

只有熟练掌握,理解题目,对各个功能实现的先后顺序和之前执行的程序对之后执行的程序的影响心中有数,这样才能实现程序的功能。

6.附录:

1、分支程序设计实验

(1)从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。

若输入为小写字母,显示“YouInputaLowercaseLetter!

”;若输入为大写字母,显示“YouInputaUppercaseLetter!

”;若输入为数字,显示“YouInputaDigit!

”;若输入为其它字符,显示“YouInputOtherLetter!

”。

DATASEGMENT

INFOR1DB0AH,0DH,"PLEASEPRESSANYKEYTOINPUTALETTER:

$"

INFOR2DB0AH,0DH,"YOUINPUTALOWERCASELETTER!

$"

INFOR3DB0AH,0DH,"YOUINPUTAUPPERCASELETTER!

$"

INFOR4DB0AH,0DH,"YOUINPUTADIGIT!

$"

INFOR5DB0AH,0DH,"YOUINPUTOTHERLETTER!

$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETINFOR1

MOVAH,09H

INT21H

MOVAH,01H

INT21H

MOVDX,OFFSETINFOR1

MOVAH,09H

CMPAL,'0'

JBOTHER

CMPAL,'9'

JBEDIGIT

CMPAL,'A'

JBOTHER

CMPAL,'Z'

JBEUPPER

CMPAL,'a'

JBOTHER

CMPAL,'z'

JBELOWER

JMPPEND

LOWER:

MOVDX,OFFSETINFOR2

MOVAH,09H

INT21H

JMPPEND

UPPER:

MOVDX,OFFSETINFOR3

MOVAH,09H

INT21H

JMPPEND

DIGIT:

MOVDX,OFFSETINFOR4

MOVDX,OFFSETINFOR4

MOVAH,09H

INT21H

JMPPEND

OTHER:

MOVDX,OFFSETINFOR5

MOVAH,09H

INT21H

PEND:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(2)在屏幕上显示信息“Areyoureallywanttoexit?

”,然后从键盘输入一个字符,若输入“Y”或“y”,则显示“Thankyouforyourusing!

”后程序结束;若输入“N”或“n”,则显示“"Let'scontinue!

”后程序结束;若输入其它字符,则显示“Youpressanerrorkey!

”后程序结束(要求尽量使用宏指令以便使源程序更加简洁)。

DATASEGMENT

INFOR1DB0AH,0DH,"PLEASEPRESSANYKEYTOINPUTALETTER:

$"

INFOR2DB0AH,0DH,"YOUINPUTALOWERCASELETTER!

$"

INFOR3DB0AH,0DH,"YOUINPUTAUPPERCASELETTER!

$"

INFOR4DB0AH,0DH,"YOUINPUTADIGIT!

$"

INFOR5DB0AH,0DH,"YOUINPUTOTHERLETTER!

$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETINFOR1

MOVAH,09H

INT21H

MOVAH,01H

INT21H

MOVDX,OFFSETINFOR1

MOVAH,09H

CMPAL,'0'

JBOTHER

CMPAL,'9'

JBEDIGIT

CMPAL,'A'

JBOTHER

CMPAL,'Z'

JBEUPPER

CMPAL,'a'

JBOTHER

CMPAL,'z'

JBELOWER

JMPPEND

LOWER:

MOVDX,OFFSETINFOR2

MOVAH,09H

INT21H

JMPPEND

UPPER:

MOVDX,OFFSETINFOR3

MOVAH,09H

INT21H

JMPPEND

DIGIT:

MOVDX,OFFSETINFOR4

MOVDX,OFFSETINFOR4

MOVAH,09H

INT21H

JMPPEND

OTHER:

MOVDX,OFFSETINFOR5

MOVAH,09H

INT21H

PEND:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2、循环程序设计实验

(1)计算1+2+……n=?

,其中n通过键盘输入。

要求在屏幕上提供如下信息:

Pleaseinputanumber(1627):

;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum;其中n为用户输入的数。

DATASEGMENT

INF1DB"Pleaseinputanumber(0-65535):

$"

IBUFDB7,0,6DUP(?

OBUFDB6DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETINF1

MOVAH,09H

INT21H

MOVDX,OFFSETIBUF

MOVAH,0AH

INT21H

MOVCL,IBUF+1

MOVCH,0

MOVSI,OFFSETIBUF+2

MOVAX,0

AGAIN:

MOVDX,10

MULDX

ANDBYTEPTR[SI],0FH

ADDAL,[SI]

ADCAH,0

INCSI

LOOPAGAIN

MOVCX,AX

MOVAX,0

MOVBX,1

LOOP2:

ADDAX,BX

INCBX

LOOPLOOP2

MOVBX,OFFSETOBUF+5

MOVBYTEPTR[BX],'$'

MOVCX,0AH

LOOP1:

MOVDX,0

DIVCX

ADDDL,30H

DECBX

MOV[BX],DL

ORAX,AX

JNZLOOP1

MOVDL,0AH

MOVAH,02H

INT21H

MOVDX,BX

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(2)从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和累加和。

显示格式为:

1+2+…+n=sum,其中n为累加个数,sum为累加和

DATASEGMENT

OBUFDB6DUP(?

EUDB'+','$'

EBDB0DH,'=',0DH,'$'

DATAENDS

DISPLAYMACROSTRING

MOVDX,OFFSETSTRING

MOVAH,09H

INT21H

ENDM

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,1

MOVCX,0

LOOP1:

ADCCX,AX

CMPAX,1

JEALL

PUSHAX

DISPLAYEU

POPAX

ALL:

CALLEXCHANGE

INCAX

CMPCX,60000

JCLOOP1

PUSHAX

PUSHCX

DISPLAYEB

MOVAX,CX

CALLEXCHANGE

POPCX

POPAX

MOVAH,4CH

INT21H

RET

MAINENDP

EXCHANGEPROCNEAR

PUSHAX

PUSHBX

PUSHCX

MOVBX,OFFSETOBUF+5

MOVBYTEPTR[BX],'$'

MOVCX,10

LOOP2:

MOVDX,0

DIVCX

ADDDL,30H

DECBX

MOV[BX],DL

ORAX,AX

JNZLOOP2

MOVDX,BX

MOVAH,09H

INT21H

POPCX

POPBX

POPAX

RET

EXCHANGEENDP

CODEENDS

ENDSTART

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

当前位置:首页 > 医药卫生 > 临床医学

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

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