《2022年2022年计算机组成原理汇编字符串比较试 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机组成原理汇编字符串比较试 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验 6 汇编字符串比较试验一、实验目的1 了解汇编程序编写的格式2 熟悉汇编程序的编译、链接、运行的过程3 学会使用汇编语言的dos 中断、字符串输入输出,以及对串的一些操作二、试验原理1.当 dos 中断为 21h 时,为 dos 系统功能调用。此时,如果 AH 寄存器内的值为0AH,则由用户从键盘输入串到缓冲区。输入的数据将保存在DS段。DX为缓冲区的首址,(DS:DX)=缓冲区最大字符数,(DS:DX+1)=实际输入的字符数,(DS:DX+2)=串的实际首地址。2.80X86 计算机,REPE指令为字符串比较指令,执行的操作为:如(Count Reg)=0 或 ZF=0(即某次比较的结
2、果两个操作数不等)时退出,否则往下执行。(Count Reg)(Count Reg)-1 执行其后的串指令 重复 3.80X86 计算机,CLD(clear direction flag)指令使 DF=0,在执行串处理指令时,可使地址自动增量。三、试验步骤1.在数据段定义两个字符串String1,String2 2.定义两个结果显示字符串mess1 mess2 3.保留 cpu 现场,将ds ax 数据保存4.将 datas 赋给 ds,codes 赋给 cs,stacks赋给 ss 5.将 String1 的首地址赋给si,String2 的首地址赋给di 6.设置 flag 位为 0,对两
3、个字符串进行比较7.对结果进行判断,并调用dos 中断,输出显示不同的结果(mess1 or mess2)四、实验结果与分析实验代码如下:datas segment;数据段string1 db This is the String1.string2 db This is the String2.mess1 db Match!,13,10,$mess2 db Not Match!,13,10,$datas ends stacks segment;堆栈段stacks ends codes segments assume cs:codes,ds:datas,ss:stacks 名师资料总结-精品资料
4、欢迎下载-名师精心整理-第 1 页,共 4 页 -main proc far start:push ds;保护当前cpu 数据sub ax,ax push ax mov ax,datas;将 datas 赋给数据段mov ds,ax move es,ax lea si,string1;将 string1 的偏移地址给si lea di,string2;将 string2 的偏移地址给di cld;设置 flag 位为 0 串处理操作时地址会自动增量mov cx,20;将字符串长度赋值给cx 对比较次数记数repz cmpsb;串比较jz match;串相同lea dx,mess2;串不同jmp
5、 short disp match:lea dx,mess1 disp:mov ah,09;字符串输出int 21h;调用 dos 中断ret main endp codes ends end start 由键盘输入字符串的比较代码如下:datas segment;数据段string1 db 100,?,100 dup(?)string2 db 100,?,100 dup(?)mess1 db Match!,13,10,$mess2 db Not Match!,13,10,$mess3 db 13,10,$doscall equ 21h display equ 09h key_in equ 0
6、Ah datas ends stacks segment;堆栈段stacks ends 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 4 页 -codes segments assume cs:codes,ds:datas,ss:stacks main proc far start:push ds;预处理保留现场sub ax,ax push ax mov ax,datas;将 datas 赋给数据段mov ds,ax move es,ax lea dx,string1;输入 string1 mov ah,key_in int doscall sub ch,ch mov cl,s
7、tring1+1;将 string1 的长度保存在cl 中add dx,2;将 string1 的串起始地址放入dx 然后存入si mov si,dx lea dx,mess3;打印换行mov ah,display int doscall lea dx,string2;输入 string2 mov ah,key_in int doscall sub ch,ch add dx,2;将 string2 的串起始地址放入dx 然后存入si mov di,dx cmp cl,string2+1;比较两个字符串长度je compare lea dx,mess2;不相等jmp short disp cld
8、;将 df 置零执行串处理时使地址自增compare:repz cmpsb;比较串jz match;相等跳转lea dx,mess2 jmp short disp ;不相等跳转match:lea dx,mess1 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 4 页 -disp:;打印结果mov ah,display int doscall ret main endp codes ends end start 五、感想与总结通过这次汇编实验,初步学会了怎么样用汇编语言来编程,懂得了如何获得键盘输入数据以及使用dos 中断来输出,同时也感受到对于字符串的操作还不是很熟练,需要加强,同时对于系统的标志位的用途也还不是很熟悉。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 4 页 -