上次提问了作业的问题后,回去好好的研究了半天,也是明白了很多东西,后来的作业也能自己独立完成了,但是!这次的作业简直丧心病狂!我实在不明白老师为什么要这么写。子程序难道不能和前面写在一起吗看着还方便我这还得前后来回拉着看!以至于这回的作业实在是看不出什么门道,只好厚颜无耻原封不动地贴上了
求大神给点思路让我先思考思考!
这次的 程序是要从键盘输入一个字符串(长度限制在50以内),并显示
;提示:输入字符串可以用DOS调用,功能3FH,BX=0
;统计这个字符串的长度,并显示
;统计字符串里的数字字符的个数,并显示
;将字符串做逆序处理,并显示
;将字符串中的小写字母转换为大写字母,并显示
老师啊你为什么要样!分成几个程序不好吗!
.model small
.DATA
STR DB 50 DUP(0)
STR_I DB 50 DUP(0) ; 存放逆序的字符串
LEN DB ?
num_D DB ?
.code
MAIN PROC NEAR
MOV AX,@DATA
MOV DS,AX
; 以下程序用文件的方式读取字符串STR
LEA AX,STR
PUSH AX
CALL GETS
ADD SP,2
MOV LEN,AL
; 以下程序打印字符串STR
LEA AX,STR
PUSH AX
CALL PRINTS
ADD SP,2
; 以下程序返回字符串STR的长度
LEA AX,STR
PUSH AX
CALL STR_LEN
ADD SP,2
MOV LEN,AL
; 以下程序打印LEN的数字
MOV AL,LEN
XOR AH,AH
PUSH AX
CALL PRINT_N
ADD SP,2
; 以下程序统计STR中数字的个数
LEA AX,STR
PUSH AX
CALL N_NUM
ADD SP,2
MOV num_D,AL
; 以下程序打印num_D的数字
MOV AL,num_D
XOR AH,AH
PUSH AX
CALL PRINT_N
ADD SP,2
; 以下程序返回字符串STR的逆序
LEA AX,STR
PUSH AX
LEA AX,STR_I
PUSH AX
CALL STR_INV
ADD SP,4
; 以下程序打印字符串STR_I
LEA AX,STR_I
PUSH AX
CALL PRINTS
ADD SP,2
; 以下程序将字符串中的小写字母转换为大写字母
LEA AX,STR
PUSH AX
CALL STR_UCASE
ADD SP,2
; 以下程序打印字符串STR
LEA AX,STR
PUSH AX
CALL PRINTS
ADD SP,2
MOV AX,4C00H
INT 21H
MAIN ENDP
; 键盘读取字符的子程序
GETS PROC NEAR
PUSH BP
MOV BP,SP
MOV DX,[BP+4]
; ......
POP BP
RET
GETS ENDP
; 打印字符串的子程序
PRINTS PROC NEAR
PUSH BP
MOV BP,SP
MOV SI,[BP+4]
; ......
POP BP
RET
PRINTS ENDP
STR_LEN PROC NEAR
PUSH BP
MOV BP,SP
MOV SI,[BP+4]
; ......
POP BP
RET
STR_LEN ENDP
STR_INV PROC NEAR
PUSH BP
MOV BP,SP
MOV DI,[BP+4]
MOV SI,[BP+6]
; ......
POP BP
RET
STR_INV ENDP
; 打印字符串的子程序
STR_UCASE PROC NEAR
PUSH BP
MOV BP,SP
MOV SI,[BP+2]
; ......
POP BP
RET
STR_UCASE ENDP
; 两位十进制数的打印子程序
PRINT_N PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,[BP+4]
; ......
POP BP
RET
PRINT_N ENDP
; 统计STR中数字个数的子程序
N_NUM PROC NEAR
PUSH BP
MOV BP,SP
MOV SI,[BP+4]
; ......
POP BP
RET
N_NUM ENDP
END MAIN
有省略号的地方是需要自己补全的,每个子程序都要,应该是有七处
在此先行谢过,求大神帮看