在内存地址为BUFF开始的单元定义了100个字节。编一个程序要求完成填充100个字节自1开始的自然数。并将累加和的结果存于X单元;统计出素数个数和素数的累加和,分别存于Y和Z单元。在屏幕上以二进制形式显示素数个数。 二、实验思路
方法一:在将数存入内存过程中判断是否为素数,并求和以及素数个数,然后在屏幕上以二进制形式显示素数个数。此方法比较复杂,寄存器运用复杂,不易编写。
方法二:先将数存入内存,在判断是否为素数,并求和以及统计素数个数,然后在屏幕上以二进制形式显示素数个数。此方法较为简单,容易理解,层次分明,程序相对较为好编。 本次课程设计采用方法二。 三、编写框架。
本框架为素数判断的具体过程。
将1~100存入内存,此时DI=198,CX=0 取被除数 除数加一
四、编写程序 相除 非0 判断余数 为0 判断商 非0 指针、次数减一 求和 非0 为0 素数个数加一 素数求和 判断CX 为0 DATA SEGMENT BUFF DW 100 DUP(?) XDD ? YDB ? z DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,100 LEA DI,BUFF MOV BP,0 MOV AX,1 MOV BL,1 MOV BH,0 MOV DX,0 L1:MOV [DI],AX INC DI INC DI INC AX DEC CX JNZL1 DEC DI DEC DI MOV CX,99 L2:MOV AX,[DI] INC BL DIV BL CMP AH,0 JNZL2 DEC AL JZL3
JMP L4 L3:INC BH ADD DX,[DI] L4:MOV BL,1 ADD BP,[DI] DEC DI DEC DI DEC CX JNZL2
MOV 200[DI],BH
MOV 204[DI],DX MOV 205[DI],BP MOV CX,8 NEXT: SHL BH,1 JCONE MOV DL, 30H JMP PRINT ONE: MOV DL,31H PRINT:MOV AH,2 INT 21H DEC CX JNZNEXT MOV AH,4CH INT 21H CODE ENDS ENDSTART
五、调试过程
1、 打开计算机,点击开始—运行,输入CMD,回车,即可进入debug系统。 2、 输入CD C:\\huibian,回车。用于修改路径。
3、 输入DIR回车,查看当前文件夹下的目录文件。输入EDIT,进入蓝屏编写程序,保存文件命名为L1.ASM,输入完上述程序后,点击保存,再点击file-Exit,退出程序,回到DOS系统。
4、 输入MASM L1.ASM,回车,再连续三次回车,查看程序是否出现错误。 若出现severe errors,则需要修改程序,输入EDIT L1.ASM,回车,若没有错误,就输入DIR查看是否生成OBJ文件,若出现123.OBJ,则说明生成了目标文件。
5、 输入LINK 123.OBJ回车,再连续三次回车,此时生成链接。
6、 输入DIR,回车,查看是否生成EXE文件。
7、输入DEBUG 123.EXE,回车,由DOS回到debug系统。
8、 输入U进行反汇编,再输入U继续反汇编,查看数据段的地址,为13B1。输入G,连续运行命令。再输入D 13B1:0,回车,查看结果。
10、输入Q,退出debug系统。调试结束。 六、过程中遇到的问题。
1、定义数据时与取到寄存器进行除法运算的数据位数不符。 解决方法;一步一步往里面代数。 2、素数判断过程复杂,循环过程混乱。 解决方法:画出框架图。 七、收获。
本次课程设计中了解了汇编语言程序和DOS操作系统及其应用,编程过程中熟练掌握各种指令、一定的编写技巧和调试过程。克服种种困难,调试成功,获得了极大的成就感和乐趣。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务