汇编语言,输入一个长度为n的字符串,将大写字母转化为小写

供稿:hz-xin.com     日期:2025-01-13
用汇编语言写一个把字符串中的所有大写字母改为小写的程序假设字符以‘0’结尾

关键指令,假如要转换的字符已经读入AL寄存器,则,

大写转小写: OR AL,20H

小写转大写: AND AL,0DFH

DATA SEGMENT
BUF DB 10 DUP(?)
COUNT EQU $-BUF
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
STAPN DB 100 DUP(?)
TOP EQU LENGTH STAPN
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA BX,BUF
MOV CX,COUNT

CALL INPUT
CALL CHANGE
CALL SHOW
MOV AH,4CH
INT 21H


SHOW PROC
PUSH CX
PUSH BX
PUSH AX
MOV AH,2
MOV DL,' '
INT 21H
L6: MOV AH,2
MOV DL,BYTE PTR[BX]
INC BX
INT 21H
LOOP L6
POP AX
POP BX
POP CX
RET
SHOW ENDP

CHANGE PROC
PUSH CX
PUSH BX
PUSH AX
L4: CMP BYTE PTR[BX],'Z'
JBE L2
JA L5
L2: CMP BYTE PTR[BX],'A'
JAE L3
JB L5
L3: ADD BYTE PTR[BX],20H
L5: INC BL
LOOP L4
POP AX
POP BX
POP CX
RET
CHANGE ENDP

INPUT PROC
PUSH CX
PUSH BX
PUSH AX
L1: MOV AH,1
INT 21H
MOV BYTE PTR [BX],AL
INC BX
LOOP L1
POP AX
POP BX
POP CX
RET
INPUT ENDP
CODE ENDS
END START

;从键盘输入一个长度为n的字符串,0<n<32。要求:
;1,输入和输出之前必须先显示提示信息,提示必须独占一行,输入用回车符结束。
;2,将字符串中的大写字母转化为小写字母并将转化后的字符串显示在屏幕。
;3,统计字符串中的非数字字符数,用十进制输出。
;4,输出字符串中包含的小写字母中ascii值最小的一个。

ASSUME CS:CC, DS:QQ

QQ SEGMENT
MSG1 DB 'Input the string : ', 13, 10, '$'
MSG2 DB 13, 10, 'The string is : '
STR DB 100, ?, 101 DUP('$')

MSG3 DB 13, 10, 'The CHAR is : '
NN DB '00'

MSG4 DB 13, 10, 'The small is : '
SM DB 'No.$'

QQ ENDS

CC SEGMENT

START:
MOV AX, QQ
MOV DS, AX
;--------------------------------------------------
LEA DX, MSG1 ;显示“INPUT THE STRING:”
MOV AH, 9
INT 21H

LEA DX, STR
MOV AH, 0AH ;输入字符串
INT 21H

MOV CL, STR + 1
MOV CH, 0
CMP CX, 0
JNZ CAL
JMP EXIT
CAL:
MOV STR, 13
MOV STR + 1, 10

MOV AL, 'z' + 1
MOV BX, 0
LOP:
CMP BYTE PTR STR[BX + 2], 'A'
JB NEXT1
CMP BYTE PTR STR[BX + 2], 'Z'
JA NEXT1
ADD BYTE PTR STR[BX + 2], 32
NEXT1:

CMP BYTE PTR STR[BX + 2], '0'
JB NNNN
CMP BYTE PTR STR[BX + 2], '9'
JBE NEXT2
NNNN:
INC BYTE PTR NN + 1
CMP BYTE PTR NN + 1, '9'
JNA NEXT2
MOV BYTE PTR NN + 1, '0'
INC BYTE PTR NN + 0

NEXT2:
CMP BYTE PTR STR[BX + 2], 'a'
JB NEXT3
CMP AL, STR[BX + 2]
JB NEXT3
MOV AL, STR[BX + 2]
NEXT3:
INC BX
LOOP LOP

CMP AL, 'z' + 1
JZ NO
MOV SM, AL
MOV BYTE PTR SM + 1, '$'
NO:
CMP BYTE PTR NN + 0, '0'
JNE SHOW1
MOV BYTE PTR NN + 0, ' '
SHOW1:
LEA DX, MSG2 ;显示 The string is:
MOV AH, 9
INT 21H
LEA DX, MSG3 ;显示其它
MOV AH, 9
INT 21H
;--------------------------------------------------
EXIT:
MOV AH, 4CH
INT 21H
CC ENDS
END START

四个要求都满足了。

第4个输出的是原来输入的字符串还是转化后的字符串。

C语言中,输入一个数n,则输出字符串中的第n个字符,怎么实现
include <stdio.h>int main(){ char s[100]= "this is a test string"; int n; \/\/scanf("%s",s);\/\/如果要自己输入字符串,那么取消这个注释。 scanf("%d",&n); printf("%c\\n", s[n-1]); \/\/平时说的第几个 从1开始计数。 而下标是从0开始的。 所以这里减一...

C语言编程:如何输入任意长度的字符串?(不用C++和String)
每次使用都malloc申请一个空间 记得要包含stdlib.h \/\/for 用一个循环控制输入字符串 char *p;p=(char *)malloc(sizeof(char));\/\/只申请一个存放空间 p=getchar();\/\/取得键盘输入的字符 用完记得要释放掉 free(p);

假定一个字符串的长度为n,则定义存储该字符串的字符数组的长度...
xiongwei630003 兄弟讲错了!正确答案是:n+1 原因:字符串是以'\\0'结尾的, 所以如果字符串长度为n,也就是有n个字符,那么加上'\\0'就是有 n+1 个字符。故定义数组大小时候至少需要 n+1 字节大小的内存空间。即:char string[n+1];...

编写一个函数,输入一行字符,将此字符串中最长单词输出。
include<stdio.h> include<string.h> void longword(char s[],char t[]);\/\/定义最长单词函数 int main(){ char str[30],lg[20];gets(str);\/\/输入一行字符 longword(str,lg);\/\/调用最长单词函数 puts(lg);\/\/输出最长单词 return 0;} \/\/最长单词函数 void longword(char s[],char t...

从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现
;可以这样考虑:;1.利用dos 21h中断的A号功能,读取一个字符串,这样可以取得字符串的长度N。;2.mov cx,N,利用Loop指令,倒序输出字符串。;代码如下:; multi-segment executable file template.data segment buf0 db 255 ;字符串最大长度 db 0 ;输入的字符串的实际长度 buf1 db ...

C语言实现输入一个数N后,再输入N行字符串?
include<stdio.h>#include<stdlib.h>int main(){int N;scanf("%d%*c",&N);char *p[N];for(int i=0;i<N;i++){p[i]=(char*)malloc(100*sizeof(char)); gets(p[i]);}for(int i=0;i<N;i++) printf("%s\\n",p[i]);\/\/getchar();return 0;} ...

c语言中从键盘输入N个字符串,将字符串按从小到大的顺序排列并输出
= 0; i < N-1; i ++) { for(j = i+1; j < N; j ++){ if(strcmp(str[i],str[j])>0) { char temp[100]; strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp);} } } for(i = 0; i < N; i ++) puts(str[i]);}。运行代码:执行结果:...

编写一个n个字符串最长函数longstr(s,n),其中s指向多个字符串,n是字 ...
include<stdio.h>#include<string.h>#include<stdlib.h>#define MaxLen 100 \/\/字符串的最大长度为MaxLen-1 char *longstr(char a[][MaxLen],int n){int i,max=0; \/\/max是最长字符串的下标for(i=1;i<n;i++){if(strlen(a[max])<strlen(a[i])){max=i;}}return a[max]; ...

C语言编程:从键盘中输入一个英文字符串
include<stdio.h> include<stdlib.h> int main(){ int strSize = 100;char *str = (char *)malloc(sizeof(char) * strSize);int charNum = 0;char input;\/\/逐个字符输入字符串,可以输入int可以表示的最大值个字符 printf("请输入任意个字符:\\n");while(true){ scanf("%c",&input);...

C语言程序设计实现任一字符和字符串长度的输出,其中字符和字符串内容由...
str); printf("\\n输入的字符串长度为:%d\\n",getLen(str)); return 0;}char *input(){ int len=2; char c=0,*str=NULL,*strSave=NULL; while((c=getch())!='\\r') { printf("%c",c); if(str==NULL) str=(...