系统软件的子程序结构有什么特点

系统软件的子程序结构有什么特点,第1张

结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。

虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。

由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难

本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。

Code Segment

Assume CS:Code,DS:Code

-------------------------------------

功能:显示指定地址(Str_Addr)的字符串

入口:

Str_Addr=字符串地址(要求在数据段)

用法: Output Str_Addr

用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

-------------------------------------

冒泡排序:对从MEM单元开始的N个8位无符号数降序排序

入口参数:ds:SI=数组地址,CX=数组元素个数

Bubbling Proc Near

push es

push si

push di

push cx

push ax

push ds

pop es

dec cx 外循环次数

cld

@@Scanning: push cx 入栈保存外循环次数

push si 入栈保存数组地址

@@Compare: mov di,si 当前数组元素地址赋给目的变址寄存器,以备交换之用

lodsb 将当前数组元素读入累加器

cmp al,[si] 当前数组元素与相邻的下一个数组元素相比较

jae @@NextOne 若大于或等于,不作数据交换,处理下一个数组元素

xchg al,[si] 若小于,交换数组元素

stosb 保存数值较小者

@@NextOne: loop @@Compare 处理下一个数组元素

pop si 数组地址出栈

pop cx 外循环次数出栈

loop @@Scanning 下一趟比较

pop ax

pop cx

pop di

pop si

pop es

ret

Bubbling EndP

-------------------------------------

MEM db 12,56,253,200,10,99,78,75,63,100

N equ $-MEM

Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$'

Start:push cs

pop ds

mov cx,N 数组元素个数

lea si,MEM 数组地址

call Bubbling

-------------------------------------

Exit_Proc: Output Press_Key 提示 *** 作完成,按任意键结束程序

mov ah,1

int 21h

mov ah,4ch 结束程序

int 21h

Code ENDS

END Start 编译到此结束

DATAS SEGMENT

MONTH DB 'JanFebMarAprMayJunJulAugSepOctNovDec'

MESS DB ' INPUT THE MONTH:',0DH,0AH,'$'

NUM DB 3 ;按照标准应该是2 ,但是我写2 就是不行,可能是我软件的问题

DB ?

DB 2 DUP(0,?)

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START: MOV AX,DATAS

MOV DS,AX

LEA DX,MESS

MOV AH,9

INT 21H

LEA DX,NUM

MOV AH,0AH

INT 21H

MOV AX,0

ADD AL,NUM+2

AND AL,0FH

MOV CL,10

MUL CL

MOV DX,AX

MOV AX,0

MOV AL,NUM+3

AND AL,0FH

ADD AX,DX

SUB AX,1

MOV CL,0003H

MUL CL

MOV BX,AX

MOV CL,3

SHOW: MOV DL,MONTH[BX]

INC BX

MOV AH,2

INT 21H

LOOP SHOW

JMP START

MOV AX,4C00H

INT 21H

CODES ENDS

END START

已经调试过了 没问题 但是一定要输入两位数 比如一月要输入01


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/10968500.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存