哪家网站专门做折扣销售,企业网络营销项目,网站建设案例完整代码,外贸英语学习网站一、实验目的
1#xff0e;掌握分支程序的设计方法。 2#xff0e;熟悉在PC机上建立、汇编、链接、调试和运行8086汇编程序的过程。
二、实验内容
1#xff0e;比较两个字符串STRING1和STRING2所含的字符是否相同#xff0c;若相同则显示‘Match’#xff0c;否则显示‘…一、实验目的
1掌握分支程序的设计方法。 2熟悉在PC机上建立、汇编、链接、调试和运行8086汇编程序的过程。
二、实验内容
1比较两个字符串STRING1和STRING2所含的字符是否相同若相同则显示‘Match’否则显示‘No Match’。 2修改程序显示所比较字符的个数。
三、程序清单
DATAREA SEGMENT ; 数据段
STRING1 DB Move the cursor backward.
STRING2 DB Move the cursor backward.MESS1 DB Match.,13,10,$
MESS2 DB No match.,13,10,$
DATAREA ENDS
PROGNAM SEGMENT ; 代码段
MAIN PROC FARASSUME CS:PROGNAM,DS:DATAREA,ES:DATAREA
START: PUSH DSSUB AX,AXPUSH AXMOV AX,DATAREAMOV DS,AX ; DS指向数据段MOV ES,AX ; ES指向数据段LEA SI,STRING1 ; 源数据寄存器LEA DI,STRING2 ; 目的数据寄存器CLD ; DF0向高地址增加MOV CX,STRING2-STRING1 ; 字符串STRING1的长度REPZ CMPSB ; 当CX!0并且ZF1时 重复执行后边的指令,每执行一次CX的值减1 ;CMPSB 指令比较 SI 指向的内存操作数与 DI 指向的内存操作数,按字节比较JZ MATCH ; 比较完ZF1则 匹配否则 不匹配LEA DX,MESS2JMP DISP
MATCH: LEA DX,MESS1
DISP: MOV AH,09HINT 21HRET
MAIN ENDP
PROGNAM ENDSEND START四、实验过程
1用编辑器建立源文件D101-1.ASM 2用汇编程序MASM.EXE对源文件进行汇编产生目标文件再用连接程序LINK产生可执行文件 3使用调试工具DEBUG进行程序调试 先用U命令反汇编以便了解指令地址。显示结果如下∶ 将断点设置在程序的主要部分运行前。 用G命令将程序运行到寄存器初始化后暂停查看当前数据段中的值如下 用R命令查看当前各个寄存器中的值如下 用E命令将数据区的字符串backward修改为forward.如下
五、实验结果分析
1程序执行结果 通过E命令修改STRING2为“Move the cursor forward.”后再运行程序得到结果为“No match.”即两个字符串内容不相同如下。但使用L命令重新加载程序结果还是“Match.”这正说明了DEBUG调试期间所修改的数据段或代码段的内容只是修改内存中的内容而磁盘文件并未改变。 重新进入编辑器通过编辑代码修改字符串的内容使它们互不相同如下 然后重新汇编、连接、执行。其运行结果应为: No match! 2分析总结 首先实验指导书上所给的程序缺少2行代码需要自己进行补齐才可以实现本实验的目的和该程序的功能这两行代码分别是JZ MATCH和JMP DISP。其中第一句代码的功能是在CX寄存器递减到值为0时如果此时源操作地址和目的操作地址中的字节相同那么说明两个字符串是相同的则跳转到匹配标号否则不跳转执行第二句JMP指令。
其次该实验的核心所在是指令REPZ CMPSB只要把该条指令的执行过程搞明白了那么整个实验原理基本就没什么问题了该条指令中REPZ其含义为当CX!0并且ZF1时则重复执行后面紧接着的指令即CMPSB,每执行一次CX的值减1而CMPSB指令的含义为按字节比较比较SI指向的内存操作数与DI指向的内存操作数也就是对两个操作数进行相减的操作显然该操作影响标志位因此其后面一般跟随跳转指令在该程序中为JZ MATCH。