关闭

汇编作业

905人阅读 评论(3) 收藏 举报

题目:

从键盘输入一个长度为n的字符串(0<n<32),要求:

   1 在进行输入和输出之前必须先显示相应的提示信息;提示信息必须独占一行;输入必须用回车符结束;

   2 将字符中的大写字母转化为小写字母并将转化后的字符串在屏幕上显示;

   3 统计字符串中的非数字字符(‘0'——‘9'以外的字符)个数,以十进制输出;

   4 输出字符串中包含的小写英文字符里面ASCII值最小的一个;

代码:

   

data segment

 inpinfo db 'please input:',10,13,'$'

 str db 512 dup(?)

 BTL db 10,13,'after convert big to small they are:',10,13,'$'

 numinfo db 10,13,'the number not num is :',10,13,'$'

 wordinfo db 10,13,'the smallest word is :',10,13,'$'

 worderror db 10,13,'no small word exist!',10,13,'$'

 count db 0

 little dw 122  ;'z'+1

data ends

assume cs:code,ds:data

code segment

start:

   mov ax,data

   mov ds,ax

 

   mov si,0

   ;******input

   MOV DX,OFFSET INPINFO

   MOV AH,09H

   INT 21H

 

INPUT_T1:

   mov ah,01h

   int 21h  

   mov str[si],al

   inc si

   cmp al,13

   je FIND

   jne INPUT_T1

   ;*****找出其中ASII码最小的一个字符

FIND:

   DEC SI

   MOV BX,SI

   mov si,0

   mov dh,123

find_0:  

    mov cl,str[si]

    cmp cl,'a'

    jb  find_1

    cmp cl,'z'

    ja  find_1

    cmp cl,dh

    jb give

    inc si

    cmp si,bx

    je print_it

    jne find_0

give:

    mov dh,cl

    inc si

    cmp si,bx

    je print_it

    jne find_0       

find_1:

    inc si

    cmp si,bx

    je print_it

    jne find_0  

print_it:

    cmp dh,123

    je fail

    push dx

    lea dx,wordinfo

    mov ah,09h

    int 21h

    pop dx

    mov dl,dh

    mov ah,02h

    int 21h

    jmp CONVERT  

fail:

    lea dx,worderror

    mov ah,09h

    int 21h

    jmp CONVERT

; *******FIND OK 

;*******将其中的大写转小写

CONVERT:

   mov si,0

   mov ah,09

   lea DX,BTL

   INT 21H

CONVT_1:

   mov dl,str[si]

   CMP DL,'A'

   JB  CONVT_2

   CMP DL,'Z'

   JA  CONVT_2

   ADD DL,20H

   MOV STR[SI],DL

   inc si

   cmp si,bx

   jne CONVT_1

   je OUTPUT

CONVT_2:

   INC SI

   cmp si,bx

   jne CONVT_1

   je OUTPUT

OUTPUT:

   MOV SI,0

OUT_1:

   MOV DL,STR[SI]

   MOV AH,02H

   INT 21H

   INC SI

   CMP BX,SI

   JNE OUT_1

   JE count_no

;**********大写转小写完成

;**********计算非数字的个数

count_no:

   MOV CL,0

   mov si,0

COUNT_0:

   mov al,str[si]

   cmp al,'0'

   jb  count_1

   cmp al,'9'

   ja  count_1

   inc si

   cmp si,bx

   jne COUNT_0

   je output_num

count_1:

   ADD COUNT,1

   inc si

   cmp si,bx

   jne count_0

   je output_num

output_num:

   lea dx,numinfo

   mov ah,09h

   int 21h

   MOV AX,0

   mov AL,count

   MOV CL,10

   DIV CL

   PUSH AX

   MOV DL,AL

   mov ah,02h

   or dl,30h

   int 21h

   POP AX

   MOV DL,AH

   OR DL,30H

   MOV AH,02H

   INT 21H

   jmp EXIT00

   ;**************统计OVER

 

exit00:

   mov ax,4c00h

   int 21h

 code ends

end start

  

  

 

     

  

  

 

 

  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:61664次
    • 积分:1126
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:12篇
    • 译文:0篇
    • 评论:17条
    最新评论