开始取第一个字符串首地址送SI取第二个字符串首地址送DISI、DI中对应字符是否相同NSI、DI加1NY字符串是否比较完毕(CX是否等于0)送N至AL中Y送Y至AL中结束 【程序源代码】 DATA SEGMENT STRING1 DB 'weiji1','$' ;共比较的两个字符串 STRING2 DB 'weiji2','$' DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX MOV ES,AX
LEA SI,STRING1;取字符串1首地址 LEA DI,STRING2;取字符串2首地址 MOV CX,5
REPZ CMPSB STRING1,STRING2;比较字符串中的每个字符 JNZ LABNE MOV AL,'Y' JMP EXIT
LABNE: MOV AL,'N'
EXIT: MOV DL,AL ;显示结果 MOV AH,02H INT 21H MOV AH,4CH INT 21H
CODE ENDS
8
END START
【程序运行结果】
(1)当两个字符串为:‘weiji1’和‘weiji2’时(即两字符串不相同时)
(2)当两个字符串为:‘weiji1’和‘weiji1’时(即两字符串相同时)
9
四、实验总结 【实验中遇到的问题】
首次进行上机操作,对汇编语言程序的编写、汇编、连接、执行的过程开始很不熟悉,用了大量时间去了解一些基本的操作,运用汇编直接在程序中显示结果要调用子功能号查阅了相关书籍并完成了程序的编写。
【实验收获与心得】
实验一的内容总体来说比较简单,我学会了利用Turbo Debugger调试汇编程序。 熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇编、连接、执行的过程,并利用Turbo Debugger调试汇编程序。熟悉8086指令系统的数据传送指令,掌握寻址方式。熟悉8086指令系统的算术运算指令。掌握循环结构汇编语言程序的编制。
10
实验2 汇编语言程序设计
一、实验目的
1.练习编写较复杂汇编语言程序时程序框图的绘制。 2.子程序定义与调用,参数传递的方法。
3.了解宏指令的定义与调用,并与子程序定义与调用进行比较。 4 .掌握利用软件中断实现DOS系统调用的方法。
二、实验任务
1.教材4章,196页第8题,设n=10。
提示:编写一个判断某数是否质数的子程序,主程序调用该子程序,对顺序递增的
自然数进行是否质数的判断,若是则存放在质数缓冲区中,直到找到10个质数, 程序结束。判断一个数N是否是质数的一种算法是:将N顺序与2~N-1的数相除, 若每次除法的余数均不等于0,则该数是质数。
注意:8086的除法支持双字除以字,字除以字节,本题中可以选择字除以字节。 正确结果为:02,03,05,07,0B,0D,11,13,17,1D(十六进制数)
2.调试教材P160~165例4.14的程序(设N=3),跟踪IP变化,观察堆栈的变化, 理解子程序递归调用中程序执行的流程,以及帧信息的组成。(注意BP的变化)。 3.编写一个通用多字节数相加的宏定义,并调用它实现多字节数的加法,注意观察汇 编时宏调用被展开的情况。(提示:用MASM命令汇编时,加选项-L,在生成 .OBJ 文件时,同时生成 . LST文件,观察 .LST列表文件可以看到宏展开的情况) 4.编写程序:屏幕显示“Password:”,随后从键盘读入字符串,并比较这个字符串 与程序内部设定的字符串。若二者相同则显示“Hello!”,否则显示“Sorry!”, 注意:要求键盘输入字符不能直接回显在显示器上,而要用*号代替。
三、实验内容
实验2.1:教材4章,196页第8题,设n=10。
提示:编写一个判断某数是否质数的子程序,主程序调用该子程序,对顺序递增
的自然数进行是否质数的判断,若是则存放在质数缓冲区中,直到找到10个质数,
程序结束。判断一个数N是否是质数的一种算法是:将N顺序与2~N-1的数相除, 若每次除法的余数均不等于0,则该数是质数。
注意:8086的除法支持双字除以字,字除以字节,本题中可以选择字除以字节。 正确结果为:02,03,05,07,0B,0D,11,13,17,1D(十六进制数)
【实验原理】
找出前十个质数,质数只能被1和其自身整除,但考虑到如果从2开始一个一个的 除的算法效率太低,很多已经是合数的作为除数是浪费的,故该算法用每一个数除以已 经判断出来的质数(均小于该数),如果不能整除则说明该数是质数,能整除说明该数 不是质数,继续进行下一个判断。 【程序框图】
11
相关推荐: