汇编语言从键盘输入一个字符串(串长不大于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 ...
随机推荐
- 基础-Junit单元测试_反射_注解
一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...
- 每日一题 - 剑指 Offer 33. 二叉搜索树的后序遍历序列
题目信息 时间: 2019-06-26 题目链接:Leetcode tag:分治算法 递归 难易程度:中等 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 tr ...
- 云开发 VSCode 插件 Cloudbase Toolkit 的正确打开方式
什么是 Cloudbase Toolkit Tencent CloudBase Toolkit 是云开发的 VS Code(Visual Studio Code)插件.该插件可以让您更好地在本地进行云 ...
- 隐写工具outguess安装使用介绍
0x00 outguess下载安装 Kail终端命令输入git clone https://github.com/crorvick/outguess 安装包随即下载到文件夹.双击打开文件夹,右键点 ...
- drf源码剖析系列(系列目录)
drf源码剖析系列(系列目录) 01 drf源码剖析之restful规范 02 drf源码剖析之快速了解drf 03 drf源码剖析之视图 04 drf源码剖析之版本 05 drf源码剖析之认证 06 ...
- 爬虫04 /asyncio、selenium规避检测、动作链、无头浏览器
爬虫04 /asyncio.selenium规避检测.动作链.无头浏览器 目录 爬虫04 /asyncio.selenium规避检测.动作链.无头浏览器 1. 协程asyncio 2. aiohttp ...
- How to use the functions of apply and call
Although apply and call can implement same function. However, there is a litter different between ...
- python爬虫学习01--电子书爬取
python爬虫学习01--电子书爬取 1.获取网页信息 import requests #导入requests库 ''' 获取网页信息 ''' if __name__ == '__main__': ...
- Spring入门案例
一.Spring基本介绍 1.什么是Spring Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制 ...
- bzoj1699[Usaco2007 Jan]Balanced Lineup排队*&bzoj1636[Usaco2007 Jan]Balanced Lineup*
bzoj1699[Usaco2007 Jan]Balanced Lineup排队 bzoj1636[Usaco2007 Jan]Balanced Lineup 题意: 询问区间最大值减区间最小值的差. ...