毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 开发语言 >> 正文

从键盘输入(带回显)一个长度在10字符以内的字符串,并保存在缓冲区

更新时间:2012-12-18:  来源:毕业论文

从键盘输入(带回显)一个长度在10字符以内的字符串,并保存在缓冲区
检测并删除字符串中的数字字符,将字符串中所有小写字母改为大写字母;

将处理后的字符串在新的一行显示,若字符串为空串则显示 ‘?’。


DATAS SEGMENT
    MAXLEN DB 10  ;0ah子功能入口参数,指定最大字符数
    INPTLEN DB ?   ;0ah子功能出口参数,返回实际输入的字符数
    STR1 DB 11 DUP(0)  ;oah子功能的字符缓冲区
    STR2 DB 11 DUP(0)  ;o9h子功能的字符缓冲区
DATAS ENDS

STACKS SEGMENT
    DW 40H DUP(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    LEA DX,MAXLEN  ;输入字符串
    MOV AH,0AH
    INT 21H
    XOR CX,CX
    MOV CL,INPTLEN  ;循环次数为实际输入的字符数
    LEA SI,STR1
    LEA DI,STR2
    CALL DELETENUM
    CALL TRANaA
    mov [DI],'$' ;在结果的末端加“$”
    CALL NEWLINE ;调用回车换行子程序
    LEA DX,STR2 ;回显操作结果
    MOV AH,09H
    INT 21
    MOV AH,4CH
    INT 21H
DELETENUM PROC ;检测并清除数字字符
    PUSHF
    PUSH AX
    PUSH DX
LOP1:CMP [SI],30H  ;判断当前字符是否为数字字符
    JAE L1
    JMP L2
L1: CMP [SI],39H
    JA L2
    JMP L3
L2: MOV AL,[SI]  ;若不是,保存至STR2
    MOV [DI],AL
    INC DI
L3: INC SI       ;若是,不保存
    LOOP LOP1
    POP DX
    POP AX
    POPF
    RET
DELETENUM ENDP
TRANaA PROC   ;将小写转化为大写
    PUSHF
    PUSH AX
    PUSH DX
LOP:CMP [SI],'a'
    JAE L4
    JMP L7
L4: CMP [SI],'z'
    JNB L6
    JMP L7
L6: SUB [SI],20H
L7: MOV AL,[SI]
    MOV [DI],AL
    INC DI
    INC SI
    LOOP LOP
    POP DX
    POP AX
    POPF
    RET
TRANaA ENDP
NEWLINE PROC ;回车换行子程序
    PUSH AX
    PUSH DX
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    POP DX
    POP AX
    RET
NEWLINE ENDP
CODES ENDS
    END START
这程序能到运行阶段?编译时就有不少的错误吧,如 mov [DI],'$' 这样的没有指定操作数大小的问题,应该写成 mov byte ptr [DI],'$' ,下面还有好几处。
主要的错误是转大写时,没有指定源和目标地址以及计数器 CX 导致程序意外操作。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。