[教学]汇编语言比较两个字符串的大小
实验二 比较两个字符串的大小
一、实验要求
从键盘上输入两个字符串,比较两个字符串的大小。如果第一个字符串比第二个字符串大,则显示1;如果两个字符串相等,则显示0;如果第一个字符串比第二个字符串小,则显示-1
(1)画出实现上述功能的汇编语言程序流程图
(2)写出实现上述功能的汇编语言程序
(3)编译,连接编写的汇编语言程序,并运行生成的可执行文件,描述其执行情况
(4)对上述程序进行调试
(5)描述反编译后的程序在执行前的数据段的
何在调试过程中各寄存器的变化。
(6)写出实现上述要求的实验报告
二、实验环境
该试验包括的硬件和软件条件如下:
1、硬件环境
,1,联想AMD双核台式电脑
,2,内存1G
2、软件环境
Windows XP
三、实验步骤
1.程序流程图
开 始
提示输入第一个字符串
输入第一个字符串
提示输入第二个字符串
输入第二个字符串
将string1的长度存到bl中
然后和string2的长度比较
保证di为较短长度的字符串
JB JA
REPZ CMPSB
JZ
RESULT “-1” RESULT “1” RESULT “0”
EXIT
2.程序代码
data segment
msg1 DB "Please input a string:",'$'
string1 DB 100,0,100 dup(?) msg2 DB "Please input another string:",'$'
string2 DB 100,0,100 dup(?) msg3 db 0ah,0dh
result DW ?,'$'
Data ends
Stack segment para stack
db 20h dup(0) Stack ends
code segment
Assume Cs:code,Ss:stack,ds:Data
Start: mov ax,data
mov ds,ax
mov es,ax
lea dx,msg1
mov ah,09h
int 21h
lea dx,string1
mov ah,0ah
int 21h
xor bx,bx
mov bl,string1+1
lea dx,msg3
mov ah,09h
int 21h
lea dx,msg2
mov ah,09h
int 21h
lea dx,string2
mov ah,0ah
int 21h
lea dx,msg3
mov ah,09h
int 21h
cmp bl,string2+1
ja lop1
jb lop2
jmp lop3
lop1: mov cl,string2+1
jmp lop3
lop2: mov cl,string1+1
jmp lop3
lop3: mov cl,bl
cld
lea di,string2+2
lea si,string1+2
repz cmpsb
ja mat1
jb mat2
jz mat3 mat1: mov result,'1'
lea dx,result
mov ah,09h
int 21h
jmp exit mat2: mov result,'1-'
lea dx,result
mov ah,09h
int 21h
jmp exit mat3: mov result,'0'
lea dx,result
mov ah,09h
int 21h
jmp exit
exit: mov ah,4ch
int 21h
code ends
end start
3.运行结果
图2-01所示汇编程序 屏幕出现欢迎信息,提示输入第一个字符串
图2-02提示输入第一个字符串
输入第一个字符串“abcde”,提示驶入第二个字符串“efg”
图2-03提示输入第二个字符串
显示结果resule“-1”
图2-04显示运行结果
4.调试程序
点击build---debug program即可进入调试窗口。如图2-05所示
图2-05所示调试程序
在操作前,可以看到数据段内容为:
图2-06所示数据段
在初始化数据之后,寄存器如图2-07所示:
图 2-07
此时寄存器如图 2-08所示:
图2-08
继续向后执行,输入第一个“abcde”字符串后,数据段如下所示:
图 2-09
此时寄存器如图2-10所示:
程序继续向后运行,输入第二个“efg”后,程序继续向后运行,当到“CMP”
时,可以看到此时寄存器的数据段:
图2-11
此时寄存器状态如图2-12所示:
在程序运行到最后是,寄存器状态为:
由此寄存器中的cx由最初的5变成了4,即判断了字符串大小。
四、结论
通过本次实验,我学会了如何利用已经学会的语言命令来实现一些简单的程序,如何使用”CMPSB”来两个字符串比较大小的方法,同时通过对应实验
中的例题,同时也对汇编的上机编程有了更深入的了解。