汇编语言实现字符串逆序输出

合集下载

汇编语言实验7实验报告

汇编语言实验7实验报告

汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。

二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。

三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。

为了方便起见,我们可以先规定字符串的最大长度为100。

接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。

然后,我们需要使用INT 21H中断来读取用户输入的字符串。

具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。

接着,我们需要将该字符串逆序输出到屏幕上。

为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。

具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。

python2 字符逆序的简单写法

python2 字符逆序的简单写法

标题:Python2 字符逆序的简单写法1. 概述在编程中,经常会遇到需要对字符串进行逆序操作的情况。

Python2 提供了一种简单的写法,可以轻松实现字符串的逆序。

本文将介绍如何使用 Python2 来实现字符逆序的操作,包括具体的代码和示例。

2. 使用步骤在 Python2 中,可以通过以下几个简单的步骤来实现字符串的逆序:a) 我们需要定义一个字符串变量,用于存储需要进行逆序操作的字符串。

```pythonstr = "Hello, World!"```b) 利用 Python2 中的切片功能,可以很轻松地实现字符串的逆序。

只需要使用 `[::-1]` 的形式,即可将字符串逆序。

```pythonreversed_str = str[::-1]```c) 将逆序后的字符串打印出来,即可看到逆序结果。

```pythonprint(reversed_str)```3. 示例下面我们通过一个具体的示例来演示如何使用 Python2 来实现字符逆序的操作。

```pythonstr = "Hello, World!"reversed_str = str[::-1]print(reversed_str)```输出结果为:```!dlroW ,olleH```4. 结论通过以上步骤和示例,我们可以看到,在 Python2 中实现字符串逆序操作非常简单。

只需要利用切片功能,即可轻松地实现字符串的逆序。

这种简单的写法不仅方便,而且代码清晰易懂,非常适合在实际开发中使用。

Python2 提供了一种简单的写法,可以便捷地实现字符串的逆序操作。

希望本文能够对读者有所帮助,谢谢!5. 参考资料- Python2 切片 (Slice):xxx#slice在Python2中,实现字符串逆序操作是编程中常见的需求之一。

正如前文所述,利用切片功能可以轻松地实现字符串的逆序操作。

而且,逆序操作对于处理字符串的应用场景非常广泛,比如在文本处理、数据分析、字符串匹配等方面都有着重要的作用。

【原创】(C#)字符串倒序的5种方法

【原创】(C#)字符串倒序的5种方法

【原创】(C#)字符串倒序的5种⽅法【原创】(C#)字符串倒序的5种⽅法作者:神游⽇期:2009-08-27字体⼤⼩: ⼩中⼤转载请注明:奇猫居-神游天地间c# 实现字符串倒序的n 种写法最简洁就是linq的写法,推荐⽅法⼀、// string concatenation with for looppublic string ReverseA(string text){char[] cArray = text.ToCharArray();string reverse = String.Empty;for (int i = cArray.Length - 1; i > -1; i--){reverse += cArray[i];}return reverse;}⽅法⼆、// Array.Reverse functionpublic string ReverseB(string text){char[] charArray = text.ToCharArray();Array.Reverse(charArray);return new string(charArray);}⽅法三、// push/pop Stack<>public string ReverseC(string text){Stack resultStack = new Stack();foreach (char c in text){resultStack.Push(c);}StringBuilder sb = new StringBuilder();while (resultStack.Count > 0){sb.Append(resultStack.Pop());}return sb.ToString();}⽅法四、// LINQpublic string ReverseD(string text){return new string(text.ToCharArray().Reverse().ToArray()); }⽅法五、// StringBuilderpublic string ReverseE(string text){char[] cArray = text.ToCharArray();StringBuilder reverse = new StringBuilder();for (int i = cArray.Length - 1; i > -1; i--){reverse.Append(cArray[i]);}return reverse.ToString();}。

如何完成字符串的逆序

如何完成字符串的逆序

如何完成字符串的逆序在计算机编程中,字符串是一种非常常见的数据类型。

逆序字符串是指将字符串中的字符顺序颠倒过来。

在本文中,我将介绍几种常见的方法来实现字符串的逆序。

方法一:使用循环最简单的方法是使用循环逐个处理字符串中的字符。

具体步骤如下:1. 定义一个空字符串变量,用于存储逆序后的结果。

2. 从字符串的最后一个字符开始,逐个向前遍历。

每遍历到一个字符,就将其添加到结果字符串变量中。

3. 当遍历完整个字符串后,逆序的结果就存储在结果字符串变量中。

下面是一个示例代码,演示了如何使用循环实现字符串的逆序:```pythondef reverse_string(string):reversed_string = ""for i in range(len(string)-1, -1, -1):reversed_string += string[i]return reversed_strings = "Hello, World!"print(reverse_string(s)) # 输出:!dlroW ,olleH```方法二:使用切片在Python中,字符串也可以使用切片操作。

切片操作可以从一个字符串中提取出指定范围的子字符串。

通过逆向切片,我们可以轻松实现字符串的逆序。

下面是一个示例代码,演示了如何使用切片实现字符串的逆序:```pythondef reverse_string(string):return string[::-1]s = "Hello, World!"print(reverse_string(s)) # 输出:!dlroW ,olleH```方法三:使用递归递归是一种常见的编程技巧,在处理字符串的逆序时也可以使用递归来实现。

递归的思想是将一个问题拆分成更小的子问题,然后通过递归调用解决子问题,最终得到原始问题的解。

下面是一个示例代码,演示了如何使用递归实现字符串的逆序:```pythondef reverse_string(string):if len(string) <= 1:return stringreturn reverse_string(string[1:]) + string[0]s = "Hello, World!"print(reverse_string(s)) # 输出:!dlroW ,olleH```方法四:使用栈栈是一种后进先出(Last In First Out,LIFO)的数据结构,在处理字符串的逆序时也可以使用栈来实现。

【C】字符串逆序

【C】字符串逆序

【C】字符串逆序将⼀个字符串str的内容颠倒过来,并输出。

str的长度不超过100个字符。

如:输⼊“I am a student”,输出“tneduts a ma I”。

输⼊参数:inputString:输⼊的字符串返回值:输出转换好的逆序字符串输⼊样例:I am a student输出样例:tneduts a ma I解决⽅案1:#include<stdio.h>int main(){char inputString[101];char c;int i=0;while((c=getchar())!='\n'){inputString[i]=c;i++}inputSting[i]='\0';for(int j=i-1;j>=0;j--)printf("%c",inputString[j]);return 0;}这种⽅法可以实现字符串的逆序,但是在华为OJ上却通不过,原因是,c定义为char类型,但是getchar()函数的原型是int getchar(void)返回值是int,因此可能会造成数据丢失。

解决⽅案2#include<stdio.h>#include<string.h>int main(){char inputString[101];gets(inputString);for(int j=strlen(inputString)-1;j>=0;j--)printf("%c",inputString[j]);return 0;}这种⽅法⽤gets()函数读取⼀⾏,放⼊inputString中,然后逆序打印,通过了华为OJ。

运⾏结果:另外,关于字符串的⼏种输⼊⽅法,参见:。

将内容逆序输出

将内容逆序输出
str[i] = str[k];
str[k] = temp;
k--;
} /* 调试时设置断点 */
for(i = 0; str[i] != '\0'; i++)
putchar(str[i]);
return 0;
oldch='#';
str[k]='.';
flag=0;
sub=0;
for(i=0;i<k;i++)
if(str[i]==cc){
sub=i;
flag=1;
}
while((ch=getchar())!='#'||oldch!='#'){
k=0;
while(ch!='#'&& k< MAXLEN-1){
str[k++]=ch;
ch=getchar();
}
oldch='#';
str[k++]=ch;
ch=getchar();
}
oldch='#';
str[k]='\0';
count=0;
for(i=0;i<k;i++)
if(str[i]>'A'&&str[i]<='Z'&&str[i]!='E'&&str[i]!='I'&&str[i]!='O'&&str[i]!='U')

字符串逆序输出的算法

字符串逆序输出的算法

字符串逆序输出的算法不说了,直接贴代码:/*** StringReverse⽤于处理字符串逆序输出的算法,* 时间:2022-02-24** 来源:javascript重难点实例精讲*///定义⼀个字符串var str = 'abcdefg';/*** 算法1:采⽤数组的reverse()实现逆序*/function reverseString1(str) {return str.split('').reverse().join('');}/*** 算法2:利⽤字符串的charAt()*/function reverseString2(str) {let result = '';for (let i = str.length; i >= 0; i--) {result += str.charAt(i);}return result;}/*** 算法3:使⽤递归** 会⽤到charAt(),涉及到的参数:字符串、位置、返回值(拼接字符串)*/function reverseString3(str, result = '', pos = str.length - 1) {if (pos < 0) {return result;}result += str.charAt(pos--);return reverseString3(str, result, pos);}/*** 算法4:改变slice()执⾏主体*/function reverseString4(str) {return Array.prototype.slice.call(str).reverse().join('');}/*** 算法5:使⽤栈, 要在栈定义之后调⽤栈,否则会出现异常*///定义⼀个栈//使⽤类创建栈的时候,在栈声明之前调⽤栈,会出现初始化前调⽤类的异常//Cannot access 'Stack' before initializationclass Stack {constructor() {this.data = []; //保存栈内元素this.top = 0; //记录栈顶位置}//⼊栈:先在栈顶添加元素,然后元素个数加1push(element) {this.data[this.top++] = element;}//出栈:先返回栈顶元素,然后元素个数减1pop() {return this.data[--this.top];}length() {return this.top;}toString() {return this.data.toString() + ',[class]';}}// //使⽤函数创建栈,在栈声明之前调⽤栈,会出现异常// //s.push is not a function// function Stack() {// this.data = [];// this.top = 0;// }// Stack.prototype = {// push: function (element) {// this.data[this.top++] = element;// },// pop: function () {// return this.data[--this.top];// },// length: function () {// return this.top;// },// toString: function () {// return this.data.toSgtring() + ',[function]';// },// }function reverseString5(str) {let s = new Stack();let arr = str.split('');let result = '';for (const i of arr) {if (i) {s.push(i);}}while (s.length()) {result += s.pop();}// console.log(s.toString());return result;}console.log(reverseString1(str)); //gfedcba console.log(reverseString2(str)); //gfedcba console.log(reverseString3(str)); //gfedcba console.log(reverseString4(str)); //gfedcba console.log(reverseString5(str)); //gfedcba。

汇编语言_24个汇编实例小程序

汇编语言_24个汇编实例小程序

24个汇编小程序题目列表:逆序输出字符串“BASED ADDRESSING”从键盘上输入两个数,分别放到x,y单元,求出它们的和是编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来求出首地址为data的100个字数组中的最小偶数,并把它放在ax中输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match”从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。

如有,则把cl的第五位置1,否则将该位置置0在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f分别考虑有符号数、无符号数情况)一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。

试编制一个程序,把既在A中又在B中出现的整数存放于数组C中设在A、B和D单元中分别存放着三个数。

若三个数都不是0,则求出三个数的和并存放在S单元,若其中有一个数为0,则把其它两个单元也清零。

请编写此程序从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示这三类的计数结果已定义两个整数变量A和B,试编写程序完成以下功能(1)若两个树种有一个是奇数,则将奇数存入A中,偶数存入B中(2)若两个数均为奇数,则将两个数加1后存回原变量(3)若两个数均为偶数,则两个变量均不变写一段子程序skiplines,完成输出空行的功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京邮电大学
微机原理与接口技术实验报告
学院:电子工程学院
班级:2012211203
学号:2012210876
姓名:邱启哲
字符串的逆序存储实验
一、题目要求
实现将STRING1起始存取单元中的字符串’ABCDEFGHIJKLM’逆序存放到STRING2的存储单元中,并在屏幕上显示结果。

二、设计思路
在数据段定义时,将字符串’ABCDEFGHIJKLM’存入STRING1中,并定义一个空字符串数组STRING2用于存放字符。

将指针[STRING1+BP]指向字符串数组STRING1的最后一个字符,指针[STRING2+BX]指向STRING2的起始字符对其进行赋值,每次赋值后STRING1的指针减一,STRING2的指针加一,循环赋值13次。

赋值完成后用系统调用实现STRING2中内容的循环输出。

三、程序代码
DATA SEGMENT
STRING1 DB 'ABCDEFGHIJKLM'
STRING2 DB 13DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DA TA
MOV DS,AX
MOV CX,13
MOV BX,0
MOV BP,12
LOOP1:;此循环用于实现对STRING2的赋值功能MOV AL,[STRING1+BP];通过AL实现STRING1对STIRNG2的赋值
MOV [STRING2+BX],AL
INC BX
DEC BP
LOOP LOOP1
MOV CX,13;将CX值复员以便进入下一个循环
MOV BX,OFFSET STRING2;使BX指向STRING2的起始字符LOOP2:
MOV AH,2 ;调用2号系统调用,输出STRING2
MOV DL,[BX];用STRING2中的字符为DL赋值
INT 21H
INC BX;BX加一,向后移一位
LOOP LOOP2
MOV AH,4CH;程序结束
INT 21H
CODE ENDS
END START
四、程序运行截图
1、汇编和连接过程
2、生成相应程序文件
3、程序运行结果
由结果可见,实现了字符串的逆序存储。

五、实验总结
这次上机实验的题目不难,但是在完成的过程中遇到了一些问题。

开始编译的时候迟迟过不了,后来发现是因为不能通过CX等通用寄存器引用内存,只能通过BX,BP的基址寻址和SI,DI的变址寻址来访问内存。

后来发现每次都是送入STRING2中一个正序的字符串,这个问题困扰了我很久,因为我是使用[STRING1+12-BX]来实现对STRING1的逆向逐个字符访问,后来发现这样做不能实现预期功能,在[]不能用减号和加数字,只能对寄存器进行操作。

解决了这两个问题,程序终于通过并实现了逆序存储,这个过程我学到很多,巩固了汇编程序的编写和编译调试过程,熟悉了内存寻址的操作。

相关文档
最新文档