试设计一程序,该程序从键盘输入一个字符串,输入的字符串最大允许15个字符且以回车字符结束(15个字符含回车符)。同时,如果输入的字符串中有数字字符,则将数字字符删除,并新起一行显示处理后的字符串。 以

试设计一程序,该程序从键盘输入一个字符串,输入的字符串最大允许15个字符且以回车字符结束(15个字符含回车符)。同时,如果输入的字符串中有数字字符,则将数字字符删除,并新起一行显示处理后的字符串。

以下是定义好的数据段和堆栈段:
data segment
maxlen db 15;0AH子功能入口参数,指定最大字符数
inputlen db 0;0AH子功能出口参数,返回实际输入的字符数
str1 db 15 dup(0);0AH子功能的字符串缓存区
str2 db 15 dup(0);09H子功能的字符串缓存区
data ends

stack1 segment stack
dw 40h dup(0)
stack1 ends

assume cs:code ds:code
data segment
    maxlen db 15      ;0AH子功能入口参数,指定最大字符数
    inputlen db 0     ;0AH子功能出口参数,返回实际输入的字符数
    str1 db 15 dup(0) ;0AH子功能的字符串缓存区
    str2 db 15 dup(0) ;09H子功能的字符串缓存区
data ends

stack1 segment stack
    dw  40h dup(0)
stack1 ends
code segment
start:

    mov ax, data
    mov ds, ax
    mov di,0  ;作为str1的偏移量   
    mov si,0  ;作为str2的偏移量  

    lea dx,maxlen
    mov ah,0ah
    int 21h
            
    mainlop: 
    havenumber:mov al,str1[di]
    inc di
    cmp  al,0dh  ;若为回车符,跳出循环
    jz  print      
    
    cmp  al,30h  ;小于30h则跳入nonumber,执行导入str2操作
    jb  nonumber   
    
    cmp  al,39h  ;大于39h则跳入nonumber,执行导入str2操作
    ja nonumber  
    
    jmp havenumber  ;否则,跳入havenumber,不执行导入str2操作
    
    nonumber:
    mov str2[si],al
    inc si  
    
    LOOP mainlop 
    
    print:
    mov  al,24h
    mov str2[si],al   ;在字符串末尾添加 $   
   
    call cursor      ;调用光标函数
    lea dx,str2    ;打印str2字符串
    mov ah,09h
    int 21h
    
    
    
    mov ax, 4c00h  ;退出
    int 21h  
    
    cursor proc      ;光标函数
    mov dl,0ah      ;换行,使光标移动到下一行
    mov ah,02
    int 21h
    
    mov  dl,0dh     ;回车,使光标移动到最左段
    mov ah,02h
    int 21h  
    ret 
    cursor endp    
ends

end start ; set entry point and stop the assembler.

你可能感兴趣的:(试设计一程序,该程序从键盘输入一个字符串,输入的字符串最大允许15个字符且以回车字符结束(15个字符含回车符)。同时,如果输入的字符串中有数字字符,则将数字字符删除,并新起一行显示处理后的字符串。 以)