实验二 比较两个字符串的大小
一、实验目的
1、从键盘上输入两个字符串,比较两个字符串的大小; 2、如果第一个字符串比第二个字符串大,则显示1; 3、如果两个字符串相等,则显示0;
4、如果第一个字符串比第二个字符串小,则显示-1。
二、实验环境
该试验包括的硬件和软件条件如下: 1、硬件环境
(1)Intel i5 3317U (2)内存4G 2、软件环境
(1)Window XP Professor (2)MASM6.11开发软件
三、实验步骤
1、画出实现上述功能的汇编语言程序流程图。 2、写出实现上述功能的汇编语言程序。
3、编译、连接编写的汇编语言程序,并运行生成的可执行文件,描述其执行情况。
4、对上述程序进行调试,比较反汇编后的程序和源程序的区别。 5、描述反编译后的程序在执行之前数据段的内容以及调试过程中各寄存器的变化情况和执行结束后数据段的内容。
四、实验结果及其分析
1.程序流程图
第 9 页
开 始 提示输入第一个字符串 输入第一个字符串 提示输入第二个字符串 输入第二个字符串 将string1的长度存到bl中 然后和string2的长度比较 保证di为较短长度的字符串 JB REPZ CMPSB JZ RESULT “-1” RESULT “0” JA RESULT “1” EXIT
第 10 页
2.程序代码
data segment
msg1 DB \string1 DB 100,0,100 dup(?)
msg2 DB 0ah,0dh,\msg4 DB 0ah,0dh,\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
第 11 页
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,msg4 mov ah,09h int 21h
lea dx,result mov ah,09h int 21h jmp exit
mat2: mov result,'1-' lea dx,msg4 mov ah,09h int 21h
lea dx,result mov ah,09h int 21h jmp exit
mat3: mov result,'0' lea dx,msg4 mov ah,09h int 21h
lea dx,result mov ah,09h int 21h jmp exit
exit: mov ah,4ch int 21h code ends end start
第 12 页
四、运行结果及其分析
提示输入第一个字符串:输入第一个字符串“asd” 提示输入第二个字符串:输入第二个字符串“qwe” 显示结果result“-1”:
调试程序:
在操作前,可以看到数据段内容为:
在初始化数据之后,寄存器:
此时寄存器:
第 13 页