(1)从键盘输入一个字符串(串长不大于80)。

(2)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)。

(3)输出原字符串且令非字母字符闪烁显示。

(4)找出字符串中ASCII码值最大的字符,在字符串中用红色显示。

(5)字符串的输入和结果的输出都要有必要的提示,且提示独占一行。

(6)要使用到子程序。

data segment
hintinput db "please input a string:$"
hintoutput1 db "The number of non-alphabetic characters:$";输出非字母字符的个数
hintoutput2 db "flashes non-alphabetic characters:$";输出原字符串并闪烁
hintoutput3 db "The character with the largest ASCII value in a string:$";ascill最大字符
buf db 200
db ?
db 200 dup(?)
count db 0
crlf db 0ah,0dh,'$'
data ends
stack segment stack
string db 500 dup(?)
stack ends
extra segment ;定义附加段 extra ends
codes segment
assume cs:codes,ds:data,ss:stack,es:extra
main proc far
start:
mov ax,data ;分别将数据段,堆栈段,附加段送入代码段
mov ds,ax
mov ax,stack
mov ss,ax
mov ax,extra
mov es,ax
;---------------------------输入字符串提示语并进行回车换行
lea dx,hintinput ;输入提示语
mov ah,9;输出功能入口在dx
int 21h
lea dx,crlf;输入提示语后,回车换行
mov ah,09
int 21h
;---------------------------通过a号功能进行字符串输入操作并回车换行
mov ah,0ah;输入功能入口在dx
lea dx,buf
int 21h lea dx,crlf ;输入后回车换行
mov ah,9
int 21h
;------------------------------------首先用cl储存字符串长度,si源变址寄存器指向串真正开始的地方
mov cl,buf+1;cl中放置实际字符串长度 lea si,buf+2;si放置字符串首地址
;------------------------------------首先输出提示语回车换行,以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)。 call print1
;--------------------------------------
call print2
;---------=----------------------------
call print3
;--------------------------------------
mov ah,4ch
int 21h
main endp print1 proc near ;-----------------子程序一入口
push cx
push si
lea dx,hintoutput1 ;输出提示语
mov ah,09h;输出功能入口在dx
int 21h
lea dx,crlf;输入提示语后,回车换行
mov ah,09
int 21h
mov dl,0 ;用dl来计数,统计符串中非字母字符的个数
L0:
mov al,[si]
cmp al,'A'
jb L1 ;如果字符<'A',跳转到L1
cmp al,'Z'
jbe L2 ;如果字符<='Z',跳转到L2
cmp al,'a'
jb L1 ;如果字符<'a',跳转到L1
cmp al,'z'
jbe L2 ;如果字符<='Z',跳转到L2 L1:
inc dl ;计数器加1
L2:
inc si
dec cl
jnz L0
;----------------------------------输出非字母字符的个数dl cmp dl,9h
jbe L ;如果非字母个数小于10,则直接加30输出
mov dh,0 ;否则把dx存入ax中
mov ax,dx
mov bl,10 ;ax除以10后,ah作为商
div bl ;al作为余数
mov dl,al
mov ch,al ;防止ah中的商被02h冲掉,先把商转移到ch中
add dl,30h ;先输出商,再输出余数,就是10进制了
mov ah,02h
int 21h mov dl,ch
L:
add dl,30h
mov ah,02h
int 21h
lea dx,crlf ;输出后,回车换行
mov ah,09
int 21h
pop si
pop cx
ret print2 proc near
lea dx,hintoutput2 ;输出提示语
mov ah,09h ;输出功能入口在dx
int 21h
lea dx,crlf ;输入提示语后,回车换行
mov ah,09h
int 21h
push cx
push si
cld ;方向标志位df清零 L3:
push cx
lodsb ;从字符串串中取数据至al
cmp al,'A'
jb L4 ;如果字符<'A',跳转到L4
cmp al,'Z'
jbe L5 ;如果字符<='Z',跳转到L5
cmp al,'a'
jb L4 ;如果字符<'a',跳转到L4
cmp al,'z'
jbe L5 ;如果字符<='Z',跳转到L5
L4: ;如果不是字母,则进行闪烁输出
mov bl,10000111b ;bl属性闪烁输出
mov bh,0 ;显示页为0
mov cx,1 ;显示字符为1个
mov ah,09h
int 10h ;输出bl属性的字符串
mov ah,03h
int 10h ;读光标位置
inc dl ;输出列+1
mov ah,02h
int 10h ;置光标位置
jmp L6
L5:
mov bl,00000111b ;bl属性为平常输出
mov bh,0 ;显示页为0
mov cx,1 ;显示字符个数为1个
mov ah,09h
int 10h ;输出属性为bl的字符
mov ah,03h
int 10h ;读光标位置
inc dl ;输出列+1
mov ah,02h
int 10h ;置光标位置
L6:
pop cx
loop L3 lea dx,crlf ;输入提示语后,回车换行
mov ah,09
int 21h
pop si
pop cx
ret
print3 proc near
lea dx,hintoutput3 ;输出提示语
mov ah,09h ;输出功能入口在dx
int 21h
lea dx,crlf ;输入提示语后,回车换行
mov ah,09
int 21h
push cx
push si
;count用来存放ascill最大的字符
L7:
mov al,[si]
cmp al,count ;比较al和count的大小,如果al>count,则令al=count
jbe L8
mov count,al
L8:
inc si
dec cl
jnz L7
pop si
pop cx
cld
L9:
push cx
lodsb ;从串中取数据至al
cmp al,count
jz L11 ;如果字符==ascill码最大字符
L10:
mov bl,00000111b ;bl属性正常输出
mov bh,0 ;显示页为0
mov cx,1 ;显示字符为1个
mov ah,09h
int 10h ;输出bl属性的字符串
mov ah,03h
int 10h ;读光标位置
inc dl ;输出列+1
mov ah,02h
int 10h ;置光标位置
jmp L12
L11:
mov bl,00000100b ;bl属性为红色输出
mov bh,0 ;显示页为0
mov cx,1 ;显示字符个数为1个
mov ah,09h
int 10h ;输出属性为bl的字符
mov ah,03h
int 10h ;读光标位置
inc dl ;输出列+1
mov ah,02h
int 10h ;置光标位置
L12:
pop cx
loop L9
lea dx,crlf ;输出后,回车换行
mov ah,09
int 21h ret
codes ends
end start
;----------------------2020年5月18日14:29:33----------------

希望大家不吝赐教,在下面支出我的错误,谢谢

汇编语言从键盘输入一个字符串(串长不大于80)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)的更多相关文章

  1. 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符“A”的个数,并将结果显示在屏幕上。

    问题 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符"A"的个数,并将结果显示在屏幕上. 代码 data ...

  2. 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现。

    问题 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现. 源程序 data segment hintinput db "plea ...

  3. Java不限制从键盘输入一个数组

    Java不限制从键盘输入一个数组 在写算法的时候,需要从键盘输入一个数组,一直不会,最近看了几篇博客学会了,下面用二分查找举例: package com.基础; import java.util.Sc ...

  4. [汇编] 从键盘输入一个一位数字,然后响铃n声

    ; multi-segment executable file template. data segment ends stack segment dw dup() ends code segment ...

  5. 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度。 2)输出字符串中第一个出现字母a的位置。 3)在字符串的第3个字符后面插入子串“hello”,输出新字符串。 4)将字符串“hello”替换为“me”,输出新字符串。 5)以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。 */

    namespace test4 {/* 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度. 2)输出字符串中第一个出现字母a的位置. 3)在字符串的第3个字符 ...

  6. Java初学者作业——输入一个五位数字,计算各位数字之和并输出,运行结果为五个数字之和(实践2)

    返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个五位数字,计算各位数字之和并输出,运行结果为五个数字之和. 实现思路: (1)声明变量num,用于存储用户输入的数字. (2)通过Sca ...

  7. for循环:从键盘输入一个正整数n,

    #include<stdio.h>void main(){ int i,n,sum=0; //声明三个整型变量,并为变量sum初始化赋值为0// printf("Please e ...

  8. 校招小白机考入坑之从键盘输入java的各种数据类型

    //1.从键盘输入一个整型(其他基本类型类似) Scanner sc =new Scanner(System.in); sc.hasNextInt(); int str1 = sc.nextInt() ...

  9. Java编程中获取键盘输入实现方法及注意事项

    Java编程中获取键盘输入实现方法及注意事项 1. 键盘输入一个数组 package com.wen201807.sort; import java.util.Scanner; public clas ...

随机推荐

  1. 资深阿里程序员一一为你解刨Web前端知识体系结构,付出与收获成正比!

    只要接触过前端,都会指导web前端的知识主要由三部分组成:分别为静态html,样式css,动态javascript(简称js)这三大部分组成.其三部分组成的一个体系的复杂程度不亚于其他一门技术的复杂程 ...

  2. how to switch a different buffer from a terminal buffer

    In term-mode, any regular C-x whatever keybinding becomes C-c whatever instead.

  3. JavaScript之原型模式

    JavaScript中有这样的一个概念,对象. 有不少人觉得Java这么语言才是面向对象的语言,JavaScript哪里面向对象了. 其实说JavaScript面向对象还不如说JavaScript基于 ...

  4. Redundant Paths 分离的路径【边双连通分量】

    Redundant Paths 分离的路径 题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields ...

  5. 怎么给tbody加滚动条?通过css样式给表格tbody加垂直滚动条

    tbody加滚动条实现思路: 1,把tbody设置成display:block,然后就对其高度设置一个固定值,overflow设置成auto. 2,把thead的tr设置成display:block. ...

  6. MVC中model、dao、view、controlller、service之间的关系

    Model:是事物的模型,如Person.java,定义人的属性行为.pojo,OR maping,持久层 Dao:是持久化操作代码编写处,与数据库对接,如对Person进行增删改查. Service ...

  7. 【ASP.NET Core】mdl conflicts with tinymce

    When I implementd the popular Richtext Editor tinymce for this web application, it conflicts with ma ...

  8. HTTP响应头拆分/CRLF注入详解

    转自:https://blog.csdn.net/gstormspire/article/details/8183598 https://blog.csdn.net/cqf539/article/de ...

  9. python 并发专题(二):python线程以及线程池相关以及实现

    一 多线程实现 线程模块 - 多线程主要的内容:直接进行多线程操作,线程同步,带队列的多线程: Python3 通过两个标准库 _thread 和 threading 提供对线程的支持. _threa ...

  10. 使用MapReduce运行WordCount案例

    @ 目录 一.准备数据 二.MR的编程规范 三.编程步骤 四.编写程序 Mapper程序解读 一.准备数据 注意:准备的数据的格式必须是文本,每个单词之间使用制表符分割.编码必须是utf-8无bom ...