
虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难
本程序在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位无符号数降序排序
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 SEGMENTMONTH 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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)