汇编语言从键盘输入一个字符串(串长不大于80)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)
(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)的更多相关文章
- 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符“A”的个数,并将结果显示在屏幕上。
问题 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符"A"的个数,并将结果显示在屏幕上. 代码 data ...
- 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现。
问题 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现. 源程序 data segment hintinput db "plea ...
- Java不限制从键盘输入一个数组
Java不限制从键盘输入一个数组 在写算法的时候,需要从键盘输入一个数组,一直不会,最近看了几篇博客学会了,下面用二分查找举例: package com.基础; import java.util.Sc ...
- [汇编] 从键盘输入一个一位数字,然后响铃n声
; multi-segment executable file template. data segment ends stack segment dw dup() ends code segment ...
- 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度。 2)输出字符串中第一个出现字母a的位置。 3)在字符串的第3个字符后面插入子串“hello”,输出新字符串。 4)将字符串“hello”替换为“me”,输出新字符串。 5)以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。 */
namespace test4 {/* 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度. 2)输出字符串中第一个出现字母a的位置. 3)在字符串的第3个字符 ...
- Java初学者作业——输入一个五位数字,计算各位数字之和并输出,运行结果为五个数字之和(实践2)
返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个五位数字,计算各位数字之和并输出,运行结果为五个数字之和. 实现思路: (1)声明变量num,用于存储用户输入的数字. (2)通过Sca ...
- for循环:从键盘输入一个正整数n,
#include<stdio.h>void main(){ int i,n,sum=0; //声明三个整型变量,并为变量sum初始化赋值为0// printf("Please e ...
- 校招小白机考入坑之从键盘输入java的各种数据类型
//1.从键盘输入一个整型(其他基本类型类似) Scanner sc =new Scanner(System.in); sc.hasNextInt(); int str1 = sc.nextInt() ...
- Java编程中获取键盘输入实现方法及注意事项
Java编程中获取键盘输入实现方法及注意事项 1. 键盘输入一个数组 package com.wen201807.sort; import java.util.Scanner; public clas ...
随机推荐
- SpringCloud之OpenFeign
SpringCloud之openFeign Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架 ...
- 【react】实现动态表单中嵌套动态表单
要实现一个功能动态表单中嵌套动态表单如下: 仔细看看antd的文档其实不难 具体步骤如下 1.建立一个 名为 ConcatRegion的组件(动态表单A)代码如下 export function Co ...
- 这样基于Netty重构RPC框架你不可能知道
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365天原创计划”第5天. 今天呢!灯塔君跟大家讲: 基于Netty重构RPC框架 一.CyclicBarrier方法说明 1. ...
- When Lambo with Howdoo
原文链接:https://howdoo.io/when-lambo/ 为了庆祝即将推出的革命性新社交媒体平台Howdoo以及我们令人惊喜的合作伙伴关系和社区,我们正在发起一项竞赛,以最终回答“When ...
- 装机预备技能,Linux系统简介,安装Linux系统,Linux基本操作-云计算学习(2)
装机预备技能 问题 要求安装一台可用的KVM服务器: RHEL与CentOS系统有什么关联? Linux系统中第三块SCSI硬盘如何表示? 步骤 实现此案例需要按照如下步骤进行. 步骤一:RHEL系统 ...
- MCU 51-3定时器
51定时/计数器简介 51单片机有2个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5).这里所说的16位是指定时/计数器内部分别有16位的计数寄存器. 当工作在定时模式时, ...
- Django之 admin组件
本节内容 路由系统 models模型 admin views视图 template模板 Django Admin介绍 admin 是django 自带的用来让你进行数据库管理的web app. 提供 ...
- Linux01 /Linux初识
Linux01 /Linux初识 目录 Linux01 /Linux初识 1. 服务器 2. Linux系统介绍 3. linux简单介绍 4. VMware与Centos系统安装 5. 各个连接协议 ...
- matlab中的静态变量与全局变量
matlab中的静态变量和全局变量 1.静态变量 在matlab中,和其他语言一样,函数中的变量一把都是局部变量,也就是说,在函数调用完毕后,变量就会被释放.但是有些时候回希望上次改变的变量在下一次调 ...
- bzoj3892[Usaco2014 Dec]Marathon*
bzoj3892[Usaco2014 Dec]Marathon 题意: 在二维平面上有N个点,从(x1,y1)到(x2,y2)的代价为|x1-x2|+|y1-y2|.求从1号点出发,按从1到N的顺序依 ...