北京邮电大学
微机原理与接口技术实验报告
学院:电子工程学院
班级: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的逆向逐个字符访问,后来发现这样做不能实现预期功能,在[]不能用减号和加数字,只能对寄存器进行操作。解决了这两个问题,程序终于通过并实现了逆序存储,这个过程我学到很多,巩固了汇编程序的编写和编译调试过程,熟悉了内存寻址的操作。