汇编程序:比较两个字符串是否相等

本文详细介绍了在DOS环境中使用MASM汇编语言编写程序,通过比较两个字符串是否相等,展示了从初始化环境、编写和编译源代码到执行和调试的全过程,包括DEBUG工具的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比较两个字符串是否相等

一、实验内容

本实验将通过编写一个简单的汇编程序来比较两个字符串是否相等。程序将定义两个字符串 S1S2,比较它们是否完全匹配,并根据比较结果输出“Match!”或“No match!”。

二、实验步骤

  1. 初始化环境
    在DOS环境下,先导航到包含MASM的目录。这是开始编程前的准备步骤,确保所有必要的工具都可用。

  2. 编辑和编译程序
    以下是详细的程序开发步骤:

    a. 启动编辑器:在MASM目录下,打开EDIT编辑器来编写源代码。例如,输入edit abc.asm来创建或编辑名为abc.asm的源文件。

    b. 汇编源程序:使用MASM汇编器对源代码进行汇编,生成目标文件(.obj)。例如,输入masm abc。这个过程可能会揭示编码错误,需要反复修改直到代码正确汇编为止。

    c. 链接生成可执行文件:使用链接器link将目标文件转换为可执行文件(.exe)。例如,输入link abc。这一步是将编译好的代码转换成可以在DOS环境下运行的程序。

    d. 执行程序:最后,在DOS环境中直接运行程序。只需输入生成的文件名,例如abc.exe,即可执行并观察程序的行为。

  3. 记录和分析
    在整个实验过程中,细致地记录每一个使用的命令,以及程序运行的结果。这不仅有助于跟踪实验步骤,也便于之后分析程序的行为和输出。特别是在调试阶段,详细的记录可以帮助识别和解决编程中遇到的问题。

注意:整个实验过程中,应保持耐心和细心,因为汇编语言编程通常比高级语言编程更为复杂和细节导向。每一步都可能对最终结果产生重大影响。

三、实验报告

1. 程序流程图和源程序清单

程序流程图
在这里插入图片描述
源程序清单

; 数据段定义
DATA SEGMENT
    ; 定义字符串S1,并结束于两个感叹号
	S1 DB 'HELLO WORLD!!' 
    ; 计算字符串S1的长度
	LEN1 EQU $-S1 
    ; 定义字符串S2,并结束于一个感叹号
	S2 DB 'HELLO WORLD!' 
    ; 计算字符串S2的长度
	LEN2 EQU $-S2 
    ; 定义匹配成功时显示的字符串
	SAME DB 'Match!',0DH,0AH,'$'
    ; 定义匹配失败时显示的字符串
	DIFFERENT DB 'No match!',0DH,0AH,'$'
DATA ENDS

; 代码段定义
CODE SEGMENT
    ; 设置段寄存器
	ASSUME CS:CODE,DS:DATA
START:
    ; 初始化数据段
	MOV AX,DATA 
	MOV DS,AX
	MOV ES,AX
    ; 将S1的长度加载到CX
	MOV CX,LEN1 
    ; 比较S1和S2的长度
	CMP CX,LEN2 
    ; 如果长度不等,则跳转到NO标签
	JNZ NO 
    ; 加载S1的地址到SI
	LEA SI,S1 
    ; 加载S2的地址到DI
	LEA DI,S2 
    ; 清除方向标志,确保字符串从低地址向高地址比较
	CLD 
    ; 重复比较字符串,直到找到不匹配的字符或完成比较
	REPE CMPSB 
    ; 如果找到不匹配的字符,则跳转到NO标签
	JNZ NO 
    ; 加载匹配成功的消息地址到DX
	LEA DX,SAME 
    ; 跳转到显示消息
	JMP DISPLAY
NO:
    ; 加载匹配失败的消息地址到DX
	LEA DX,DIFFERENT
DISPLAY:
    ; 设置打印字符串的功能号
	MOV AH,9 
    ; 调用中断21H来打印字符串
	INT 21H 
    ; 设置程序结束的功能号
	MOV AX,4C00H 
    ; 调用中断21H来结束程序
	INT 21H
CODE ENDS
	END START

2. 如何启动和退出EDIT程序

EDIT启动
在命令行中直接输入edit启动edit文本编辑器:
在这里插入图片描述
退出EDIT
点击File,出现exit,点击exit退出
在这里插入图片描述

3. 如何对源程序进行汇编及编辑

Step1:编辑源程序
方法一:在DosBox中编写源程序
(1) 打开DosBox
在这里插入图片描述
(2) 在命令行输入edit
在这里插入图片描述
(3) 在Edit中编译程序
a) 编辑程序
在这里插入图片描述
b) 保存程序
在这里插入图片描述
c) 再进行完上述对源程序的编辑之后,在保存asm文件的位置找到1.ASM
在这里插入图片描述

方法二:在记事本或者其他除DosBox的软件中编写源程序
(1) 编写
在这里插入图片描述
(2) 保存文件格式为ASM
在这里插入图片描述
Step2:编译
输入要编译的源程序文件名:masm 文件名.asm,按三次回车键enter
在这里插入图片描述

Step3:连接
输入link 文件名.obj; 按三次回车键enter
在这里插入图片描述
Step4:运行
输入文件名.exe
在这里插入图片描述

4. 如何启动和退出DEBUG程序。

启动debug程序:在命令行输入debug 程序名.exe,进入debug
退出debug程序:输入-q, 退出
在这里插入图片描述

5. 整理每个DEBUG命令使用的方法,实际示例及执行结果。

DEBUG基本指令
(1) R命令(Register) 显示和修改寄存器
输入r:查看所有寄存器的值
输入r 寄存器名称:修改寄存器的值
在这里插入图片描述

(2) D命令(Dump) 内存16进制显示
a) 输入d:可以查看内存中的内容,
在这里插入图片描述

右边是每个内存单元中的数据对应的可显示的ASCII码字符,如果没有对应的ASCII字符,就显示“.”
b) 连续输入d,可以查看连续内存中的内容
在这里插入图片描述

c) 输入d 段地址:偏移地址:查看特定位置的内存数据
d) 输入d 段地址:起始偏移地址 结尾偏移地址:查看特定位置和特定范围的内存数据
e) 输入d 偏移地址、 d 起始偏移地址 结尾偏移地址:会将DS的内容作为段地址
(3) E命令(Enter) 修改内存字节
a) 输入 e 段地址:偏移地址 数据串 向指定编号的内存当中进行数据的写入操作,使用d命令来对该内存当中写入的数据进行查看
在这里插入图片描述
b) 输入 e 段地址:偏移地址 后按Enter也可以修改特定位置的内存数据,数据之间用空格隔开
在这里插入图片描述
(4) U命令(Unassemble) 反汇编
将内存中的机器指令翻译为汇编指令来进行查看,输入 u u 段地址:偏移地址
由3部分组成
最左边一列:是指令的地址段地址:偏移地址
中间那一列:是指令对应的机器指令
最右边一列:是汇编指令
在这里插入图片描述
(5) A命令(Assemble) 逐行汇编
以汇编指令的格式在内存中写入一条机器指令
输入a、a 段地址:偏移地址在这里插入代码片可以从某位置开始写入汇编指令
在这里插入图片描述
(6) T命令(Trace) 跟踪执行
单步执行一条机器指令
在这里插入图片描述
(7) h指令(Hex)十六进制
计算两个十六进制数的和与差
在这里插入图片描述
运行结果的前一个数是计算出来的和,后一个数是计算出来的差。计算结果均用十六进制形式表示

6. 启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?

进入DOS,输入DEBUG xxx.exe,其中xxx为文件名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值