汇编语言从键盘输入一个字符串(串长不大于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 ...
随机推荐
- Oracle Solaris 10下gdb安装(附安装包)
文章目录 1. 背景说明 2. gdb相关包 3. gdb安装 3.1 上传资源 3.2 解压 3.3 安装 3.4 环境变量 4. 位数确认 5. 验证可用性 1. 背景说明 本文承接Oracle ...
- 【Oracle】如何让一个用户能够访问另外一个用户下所有的表
根据需求的不同,也分为好几种方法,且看下文. 先构造基本的环境:创建两个用户AA,BB,基本需求为用户AA能够访问用户BB下所有的表,即用户AA有对BB下所有的表有"select on&qu ...
- node-koa
什么是koa 基于node.js 平台的下一代web开发框架 async await npm install --save koa npm install --save koa-router ctx. ...
- JavaScript图形实例:再谈IFS生成图形
在“JavaScript图形实例:迭代函数系统生成图形”一文中,我们介绍了采用迭代函数系统(Iterated Function System,IFS)创建分形图案的一些实例.在该文中,仿射变换函数W的 ...
- html中map area 热区自适应的原生js实现方案
在做自适应网页的时候,如果在图片中使用了热区map.图片可以通过样式实现:图片大小随页面变化,但是MAP中每个area的坐标并不能通过css直接实现自适应.这篇文章就介绍通过原生js来实现:MAP中每 ...
- html5中contenteditable 光标_如何设置光标位置
在js中,光标是一个对象,当你选中某个元素的时候才会出现光标对象.比如:我们点击一个输入框,实际会产生一个选中对象-selection,这个对象我们可以通过indow.getSelection()来获 ...
- Cow Relays,过N条边的最短路
题目链接 题意: 找从a到b的经过N条边的最短路 分析: 有点板子...方法:矩阵存,然后有个类似快速幂的思想,然后再加上离散化就好了. 没啥写的,只能说说矩阵了,我用的方法是先枚举i,j再枚举k,当 ...
- 【asp.net core 系列】15 自定义Identity
0. 前言 在之前的文章中简单介绍了一下asp.net core中的Identity,这篇文章将继续针对Identity进行进一步的展开. 1. 给Identity添加额外的信息 在<[asp. ...
- day59 django初识
目录 一.借助wsgiref模块实现简易版web框架 二.动静态页面 三.python三大主流web框架 四.启动一个django项目 1 启动前的注意事项 1.1 计算机的问题 1.2 django ...
- 关于echarts中的饼状图的label文字显示过长的问题
label: { normal: { fontSize: 14, formatter(v) { let text = v.name let count = text.indexOf('¥') cons ...