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

北京邮电大学

微机原理与接口技术实验报告

学院:电子工程学院

班级: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,DATA

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的逆向逐个字符访问,后来发现这样做不能实现预期功能,在[]不能用减号和加数字,只能对寄存器进行操作。解决了这两个问题,程序终于通过并实现了逆序存储,这个过程我学到很多,巩固了汇编程序的编写和编译调试过程,熟悉了内存寻址的操作。

北京邮电大学

微机原理与接口技术实验报告

学院:电子工程学院

班级: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,DATA

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的逆向逐个字符访问,后来发现这样做不能实现预期功能,在[]不能用减号和加数字,只能对寄存器进行操作。解决了这两个问题,程序终于通过并实现了逆序存储,这个过程我学到很多,巩固了汇编程序的编写和编译调试过程,熟悉了内存寻址的操作。


相关文章

  • 高中信息技术 二进制十进制转换教案
  • 二进制十进制转换教案 [教学目的与要求] 1.熟悉数制的概念:2.掌握位权表示法: 3.熟练掌握各数制之间的转换方法. [课时安排] 1课时. [教学重点与难点] 1.难点:位权表示法 十进制转化为二进制 2.重点:二.十进制间相互转换 [ ...查看


  • 程序设计基础实验指导2
  • 实验七 数组程序设计1 一 实验目的和要求 1. 掌握数组的声明.初始化.赋值.引用 2. 掌握数组元素的输入.输出 3. 熟悉典型数组应用程序设计 二 实验内容 以下实验内容所需数据自行解决 1.将一个数组中的元素逆置 2.求一个数组中的 ...查看


  • 泛型算法 (输入输出迭代器和算法综合介绍)
  • 第十一章 泛型算法 标准库容器定义的操作非常少.标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是"泛型"的,可作用在不同类型的容器和不同类型的元素上. 考虑下面的例子,可以使 ...查看


  • 请判断下列说法的是否正确(10分
  • 一. 请判断下列说法的是否正确:(10分,每小题1分) 1.所有的变量在使用前都必须予以声明.( ) 2.C语言认为变量number和NuMbEr是相同的.( ) 3.空串与空格串是相同的.( ) 4.若用数组名作为函数调用时的实参,则实际 ...查看


  • [程序设计基础]实验指导书
  • 实验1 C的实验环境和C语言的数据类型 ⒈ 实验目的 ⑴ 了解在具体的语言环境下如何编辑.编译.连接和运行一个C程序. ⑵ 通过运行简单的C程序,初步了解C源程序的特点. ⑶ 掌握C语言数据类型,熟悉如何定义一个整型.字符型和实型的变量,以 ...查看


  • 银监会专业笔试
  • 2015年的银监会计算机类专业科目笔试的真题.举例如下: [例1]"science"是XML 中一个元素的定义,其中元素的内容是( ). A.title B.style C.italic D.science [例2]SQ ...查看


  • [高级语言程序设计]答案)
  • 1. 输入两个整数,要求用两个函数求出其最大公约数和最小公倍数,最大公约数和最小公倍数都在主函数中输出. #include int main() { int i,j,t; int max(int,int); int min(int,int) ...查看


  • 实验一 简单的C程序设计实验报告
  • 成绩: 实验名称:集中上机 1-C 语言程序设计 学生姓名:李梦雅 学生学号:2013212360 学生专业:机械设计制造及其自动化 学生班级:0841302 指导教师: 李敏老师.张开碧老师 实习时间: 2014 年上半年 第 11周到第 ...查看


  • 个人程序设计
  • 北方民族大学课程设计 课程名称: 高 级 语 言 程 序 设 计 院(部) 名 称: 信息与计算科学学院 组长姓名学号: 曹永利 20124473 同组人员姓名: 张婷.马义花 指导教师姓名: 董建强 设 计 时 间: 2013年 6.7- ...查看


热门内容