(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. 执行dotnet *.dll启动项目,如何修改环境变量----ASPNETCORE_ENVIRONMENT

    docker环境: 启动容器时,添加参数:-e " ASPNETCORE_ENVIRONMENT=Development" windows系统: 命令行,以管理员身份运行:setx ...

  2. 硬刚 lodash 源码之路,_.chunk

    前置 chunk 函数内部借助其他函数实现,所以从其他函数开始,chunk 在最后. 你可能需要一些 JavaScript 基础知识才能看懂一些没有注释的细节. isObject 判断是否为 Obje ...

  3. HDFS和MR的配置和使用

    一.分布式HDFS的安装和启动 ①在$HADOOP_HOME/etc/hadoop/core-site.xml文件 <configuration> <property> < ...

  4. 从Linux源码看Socket(TCP)Client端的Connect

    从Linux源码看Socket(TCP)Client端的Connect 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就来从Linux源码的 ...

  5. Least Cost Bracket Sequence,题解

    题目链接 题意: 给你一个含有(,),?的序列,每个?变成(或)有一定的花费,问变成课匹配的括号的最小花费. 分析: 首先如果能变成匹配的,那么就有右括号的个数始终不多于左括号且左右括号数量相等,那就 ...

  6. python入门005

    垃圾回收机制详解(了解) 1.引用计数 x = 10 # 直接引用 print(id(x)) y = x z = x l = ['a', 'b', x] # 间接引用 print(id(l[2])) ...

  7. [JAVA]多线程之实现Callable接口

    通过继承Callable方式实现的多线程可以获取线程执行后的返回值 示例代码如下: public class Counter implements Callable<Integer> { ...

  8. 【XCTF】ics-05

    信息: 题目来源:XCTF 4th-CyberEarth 标签:PHP.伪协议 题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统 解题过程 题目给了一个工控管理系统,并提示存在后门, ...

  9. 读《大话设计模式》——应用工厂模式的"商场收银系统"(WinForm)

    要做的是一个商场收银软件,营业员根据客户购买商品单价和数量,向客户收费.两个文本框,输入单价和数量,再用个列表框来记录商品的合计,最终用一个按钮来算出总额就可以了,还需要一个重置按钮来重新开始. 核心 ...

  10. DOM 和 BOM 区别

    DOM, DOCUMENT, BOM, WINDOW 区别DOM 是为了操作文档出现的 API,document 是其的一个对象:BOM 是为了操作浏览器出现的 API,window 是其的一个对象. ...