汇编作业

题目:

从键盘输入一个长度为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, 4c 00h

   int 21h

 code ends

end start

  

  

 

     

  

  

 

 

  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值