汇编语言程序设计实验六

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

实验六分支及循环程序设计

一、实验目的

1、1、学习提示信息的显示及键盘输入字符的方法。

2、2、掌握分支程序和循环程序的设计方法。

二、实验预习要求

1、1、复习比较指令、转移指令、循环指令的用法。

2、根据编程提示,编出汇编语言源程序。

3、有兴趣的同学请编写出实验习题中的程序。

三、分支程序和循环程序简介

1、分支程序是根据不同条件执行不同处理过程的程序。分支程序的结构有两种:—种是二分支,—种是多分支。它们的共同特点是在满足某一条件时,将执行多个分支中的某—分支。

2、循环程序

四、实验内容

在屏幕上显示提示信息“Please input 10 numbers:”,提示用户输入10个数(数的范围在0~99之间),然后从键盘上读入这10个数。接着对这10个数从小到大进行排序,并统计0~59、60~79、80~99的数各有多少。最后在屏幕上显示排序后的数(每个数之间用逗号分隔)并显示统计的结果。显示格式如下:

Sorted numbers: xx,xx,xx,xx,xx,xx,xx,xx,xx,xx

0-59: xx

60-79: xx

80-99: xx

代码:

CALLDOS MACRO FUNCTION

MOV AH,FUNCTION

INT 21H

ENDM

CRLF MACRO

MOV DL,0DH

CALLDOS 2

MOV DL,0AH

CALLDOS 2

ENDM

DATA SEGMENT

MESSAGE DB'Please input 10 number:',0DH,0AH,'$' NUMBERS DB 10 DUP(?)

KB_BUF DB 3

ACTLEN DB?

BUFFER DB 3 DUP(?) ;输入的字符放在次区域中LE59 DB 0 ;0——5的个数

GE60 DB 0 ;60——79的个数

GE80 DB 0 ;80——99的个数SORTSTR DB'Sorted numbers'

SORTNUM DB 9 DUP(20H,20H,','),20H,20H,0DH,0AH

MESS00 DB'0-59:',30H,30H,0DH,0AH

MESS60 DB'60-79:',30H,30H,0DH,0AH

MESS80 DB'80-99:',30H,30H,0DH,0AH,'$'

DATA ENDS;数据段结束

CODE SEGMENT;定义代码段ASSUME CS:CODE,DS:DATA,ES:DATA

START:MOV AX,DATA

MOV DS,AX

MOV ES,AX

LEA DX,MESSAGE

MOV AH,09H

INT 21H ;显示MESSAGE

;从键盘读入数据并转化成二进制数保存

MOV CX,10

LEA DI,NUMBERS ;设置数据保存区指针LP11:LEA DX,KB_BUF

MOV AH,0AH

INT 21H ;从键盘读入数据

CMP ACTLEN,0

JZ LP11

CMP ACTLEN,1

JNZ LP12

MOV AL,BUFFER ;若只有一个数字

AND AL,0FH ; 转化成二进制

JMP LP13

LP12:MOV AH,BUFFER ;若有二个数字MOV AL,BUFFER+1

AND AX,0F0FH ; 转化成BCD数

AAD; 转化成二进制数

LP13:STOSB ; 保存数据CRLF

LOOP LP11

MOV BL,9

LP21:LEA SI,NUMBERS

MOV CL,BL

LP22:LODSB ; ?第一个数Ni CMP AL,[SI] ; Ni<=Nj?

JLE LP23 ; 若小于等于则不交换XCHG AL,[SI] ; 否则交换Ni,Nj

MOV [SI-1],AL

LP23:DEC CL

JNZ LP22 ;若内循环未结束则继续DEC BL

JNZ LP21 ;若外循环未结束则继续

;对NUMBERS中的10个数据进行统计,结果放在GE80,GE60和LE59中

LEA SI,NUMBERS ;指向数据保存区

MOV CX,10

LP31:CMP BYTE PTR[SI],60

JGE LP32

INC LE59

JMP LP34

LP32:CMP BYTE PTR[SI],80

JGE LP33

INC GE60

JMP LP34

LP33:INC GE80

LP34:INC SI

LOOP LP31

;把排序后的10个数据转换成ASCII码依次存入SORTNUM字符中串中

LEA SI,NUMBERS ; 指向数据保存区

LEA DI,SORTNUM ; 指向字符串

MOV CX,10

LP41:LODSB

CMP AL,10 ; 大于10,则有二位数字JGE LP42

ADD AL,30H ; 只有一位数字则直接转换MOV AH,20H ; 高位显示成空格

JMP LP43

LP42:AAM; 转化成二位BCD数

ADD AX,3030H ;转化成ASCII码

LP43:XCHG AH,AL ; 十位数放到AL中

MOV [DI],AX

ADD DI,3

LOOP LP41

;把统计结果转化成ASCII码存入MESS80,MESS60,MESS00字符串中

MOV AH,LE59

CMP AH,10 ;大于10,则有二位数字

JGE LP51

ADD AH,30H ; 只有一位数字则直接转换MOV AL,20H ;高位显示成空格

JMP LP52

LP51:MOV AX,3031H

LP52:MOV WORD PTR MESS00+6,AX

MOV AH,GE60

CMP AH,10 ; 大于10,则有二位数字JGE LP53

ADD AH,30H ;只有一位数字则直接转换MOV AL,20H ;高位显示成空格

JMP LP54

相关文档
最新文档