子程序汇编实验学习和提高
实验四 汇编程序编写和提高

实验四汇编程序编写和提高
山东大学
1、编写一个汇编程序,先键盘输入的多个小写字母,回车后
用大写字母显示出来。
(1)程序流程图如下:
(2)程序如下:
(3)程序运行结果如下:
错误输入的情况:
2、将键盘上输入的十六进制数转换成十进制数,并在屏幕上
显示。
(1)程序流程图如下:
主流程图:
子程序datacate1流程图:
子程序datacate2流程图:
(2)程序如下:
(3)程序运行结果如下:
错误输入的情况:
3、利用中断调用,在屏幕上显示1—9之间随机数。
中断号86H
(1)程序流程图如下:
(2)程序如下:
(3)程序运行结果如下:
4、键盘输入10个学生的成绩,编写一个程序统计60-69分,
70-79分,80-89分,90-99分及100分的人数,分别存放在Score6,Score7,Score8,Score9和Score10单元中。
【输入10个学生的成绩如下】
65 98 78 82 88 95 72 62 90 100
(1)程序流程图如下:
(2)程序如下:
(3)程序运行结果如下:
其他情况:。
汇编语言实训课程学习总结掌握汇编语言编程与调试技巧的提升

汇编语言实训课程学习总结掌握汇编语言编程与调试技巧的提升汇编语言是计算机体系结构课程中的重要内容,通过学习汇编语言实训课程,我深刻体会到了汇编语言在计算机编程中的重要性。
在课程学习的过程中,我不仅掌握了汇编语言编程的基本知识,还提升了调试技巧和编程能力。
在本文中,我将对自己在汇编语言实训课程中的学习总结进行分享。
首先,我要强调汇编语言编程的重要性。
汇编语言是一种低级语言,与高级语言相比,汇编语言更贴近计算机硬件。
通过学习汇编语言,我能够更好地理解计算机的工作原理,深入了解计算机内部的结构和运行机制。
同时,汇编语言编程能够提高程序的执行效率,使程序更加高效。
在实际的学习过程中,我按照老师给出的教学大纲进行系统学习。
首先,我学习了汇编语言的基本语法和指令集。
汇编语言的语法相对简单,但是指令集非常庞大,掌握常用指令对于编程来说至关重要。
通过反复实践和编写简单的程序,我逐渐熟悉了常用的汇编指令,并能够将其灵活运用于实际的程序设计中。
其次,我注重实践环节,通过编写实际的汇编语言程序来巩固所学知识。
在实践中,我遇到了许多问题,但是通过不断的调试和思考,我逐渐提高了调试技巧。
例如,当程序出现错误时,我会先检查语法错误,然后利用调试工具逐步跟踪程序的执行过程,以找出错误所在。
在这个过程中,我学会了利用断点调试和寄存器观察来辅助调试,并能够快速定位和解决问题。
在实训课程的最后一部分,我们进行了一个大型的汇编语言项目,要求我们独立设计并实现一个功能完善的程序。
这个项目让我更深入地了解了汇编语言的应用,并提高了我的综合编程能力。
通过实际的项目开发,我学会了分析问题、设计算法、编写代码,并最终完成了一个能够正常运行的程序。
这对我个人的成长起到了重要的推动作用。
总结来说,通过学习汇编语言实训课程,我不仅掌握了汇编语言编程的基本知识,还提升了调试技巧和编程能力。
汇编语言作为一种低级语言,在计算机编程中具有重要的地位和作用,通过深入学习和实践,我相信我已经掌握了一定的汇编语言编程与调试技巧,能够将其应用于实际的软件开发中。
《汇编语言程序设计》学习总结与心得

《汇编语言程序设计》学习总结与心得其实说实话在学这门课之前自己对汇编语言一点都不了解,只知道它也是一种语言,而且是一门很少用的语言,可能很多人都是这么想的,或许在学这门课之前不少同学也有和我当初一样的思想,大概学学就好,反正以后很少能用到,毕竟现在高级语言这么发达,而且运用起来灵活易懂,像汇编这种低级语言又难又不易学。
或许老师是知道我们之前有这种想法,所以第一节课就跟我们讲解了一下了汇编语言在当今这种高速发展的社会的作用和地位,让我们能够正确的认识汇编语言的精华,正确对待这么课。
而且还在课堂了百度了汇编语言的招聘信息,或许这才是使我们正确对待汇编的最直接的原因,关系到我们以后的出路,或许我们学好了一门汇编,以后出去找工作的机会不就更广了吗?正是在这种动力的驱使下我才对汇编语言有了一个新的认识,而且决定要把它学好。
在后来的学习中我发现其实汇编不是很难学,其实学汇编就像学其他的高级语言一样,高级语言要求对语言非常了解。
在学汇编的过程中,我们最重要的就是要掌握汇编语言中的指令的一些基本用法。
当然要能够真正的了解其中的内涵,这样我们在实际的编程中也能够像运用高级语言一样灵活的变通。
汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。
比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。
前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。
到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。
以C语言为例,C语言不也是由一个一个的函数组成的吗?没想到想汇编这样的低级语言也可以这样。
在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。
尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。
子程序设计实验报告范文精简处理

子程序设计实验报告范文精简处理实验报告是对实验目的、流程、结果和结论等内容的详细描述和总结。
以下是一份精简处理的子程序设计实验报告范文,共计1245字。
#实验报告名称:子程序设计实验##一、实验目的1.熟悉子程序的定义和使用方法;2.掌握子程序设计的基本思路和技巧;3.实践并提高对程序模块化设计的理解和能力。
##二、实验设备和材料-计算机-C语言编程环境##三、实验方法与流程1.根据实验要求,在C语言编程环境中编写一个独立的子程序;2.使用该子程序计算并输出指定的结果;3.程序编写完成后,编译并运行该程序,观察结果是否符合要求。
##四、实验内容1. 设计一个名为`sum`的子程序,接受一个整型数组和数组长度作为参数,计算数组元素之和,并返回该和;2.编写主程序,使用该子程序求解一个整型数组的元素之和;3.输出求和结果,观察是否正确。
##五、实验结果与分析实验中,我们使用了一组测试数据进行验证。
首先,定义一个整型数组`arr`,其中包含5个元素:{1, 2, 3, 4, 5}。
然后,将该数组和数组长度传递给`sum`子程序进行求和操作。
经过运行,我们得到的结果是15,与我们预期的结果一致。
因此,可以判断子程序设计正确,并成功实现了数组元素之和的计算功能。
##六、实验总结通过本次实验,我们成功设计并实现了一个独立的子程序,在主程序中调用该子程序计算了一个整型数组的元素之和。
通过此次实验,我们进一步熟悉了子程序的定义和使用方法,掌握了子程序设计的基本思路和技巧,并提高了对程序模块化设计的理解和能力。
这对于今后的软件开发和编程工作具有重要意义。
##七、实验心得本次实验让我更加深入地理解了子程序设计的重要性和作用。
通过将功能模块化,我们可以方便地组织和管理程序代码,提高代码的复用性和可维护性。
在实际的软件开发中,子程序设计及其正确使用是非常关键的,能够大大提高开发效率和代码的可靠性。
因此,我会继续学习和掌握更多的子程序设计技巧,并应用于未来的编程工作中。
汇编语言程序设计实验小结

汇编语言程序设计实验小结本次汇编语言程序设计实验旨在通过实践,加深对汇编语言编程的理解和掌握,并通过编写和调试汇编程序,提升实际应用能力。
在本次实验中,我学到了许多关于汇编语言程序设计的知识和技巧,也遇到了一些挑战和问题。
以下是我对这次实验的小结。
在实验开始之前,我进行了充分的学习和准备。
通过阅读教材和参考资料,我了解了汇编语言的基本概念、指令集和编程规范。
同时,我还学习了调试工具的使用方法,以便在编写程序时能够进行实时调试,提高效率和准确性。
在实验过程中,我遇到了一些困难和挑战。
其中之一是理解和运用汇编语言的指令集。
由于汇编语言是一种低级语言,指令的数量和种类相对较多,需要深入了解每个指令的功能和使用方法。
为了解决这个问题,我通过查阅资料和请教老师,逐步掌握了常用指令的用法,并能够根据实际需求选择合适的指令进行编程。
另一个困难是调试程序时出现的错误。
由于汇编语言是一种底层语言,对程序员的要求较高,一旦出现错误,往往需要仔细检查每一步的操作和数据处理过程。
在实验中,我遇到了一些错误,例如指令书写错误、寄存器使用错误等。
为了解决这些问题,我采取了逐步调试的方法,通过观察变量的值、输出结果的正确性等来定位错误的位置,并逐步修改代码,最终成功解决了问题。
在实验过程中,我也发现了汇编语言编程的一些优点和特点。
首先,汇编语言可以直接访问底层硬件资源,使得程序的执行效率较高。
其次,汇编语言的灵活性较高,可以实现一些高级语言难以实现的功能。
例如,通过汇编语言编写的程序可以直接操作内存,实现对特定位置的数据读取和存储。
再次,汇编语言的指令集相对简单,易于学习和理解。
因此,掌握汇编语言编程对于深入理解计算机体系结构和底层工作原理非常有帮助。
通过本次实验,我不仅学到了汇编语言程序设计的知识和技巧,还培养了分析和解决问题的能力。
在以后的学习和工作中,我将继续学习和掌握汇编语言编程,将其应用于实际项目中,提高程序的性能和效率。
汇编实验报告--子程序设计实验

实验五子程序设计实验学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。
二、实验内容1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。
要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。
三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.第一个实验程序用子程序的近程调用实现。
由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。
实验过程中可以从堆栈的内容看到两个子程序的返回地址值。
由于是近调用,地址值只包括返回地址的段内偏移量。
在每个子程序的执行中,检查CS值是不变的。
2.预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。
五、主要实验步骤1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。
特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。
3.检查程序执行的结果是否正确。
六.实验结果:七.心得体会了解了把BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码源代码:.MODEL SMALL.336.STACK 200H.DA TAAS CV AL DB ‘12345’BINV AL DW ?.CODEMAIN PROCSTART:MOV AX,@DA TAMOV DS,AXLEA BX ASCV ALPUSH BXLEA BX,BINV ALPUSH BXCALL CONV ASCBINMOV AX,4C00HINT 21HMAIN ENDPCONV ASCBIN PROCPUSH BPMOV BP,SPADD SP AXPUSH AXPUSH BXPUSH CXPUSH SIPUSH DIMOV BX,0AHMOV SI,[BP+6]MOV DI,[BP+4]SUB DI,SIMOV [BP-2],DIMOV CX,[BP-2]ADD SI,[BP-2]DEC SIMOV WORDE PTR[BP-4],0001MOV DI,[BP+4]MOV WORD PTR[DI],0 NEXT:MOV AL,[SI]AND AX,000FHMUL WORD PTR[BP-4]ADD [DI],AXMOV AX,[BP-4]MUL BXMOV [BP-4],AXDEC SILOOP NEXTPOP DIPOP SIPOP CXPOP BXPOP AXMOV SP,BPPOP BPRET 0004CONV ASCBIN ENDPEND MAIN。
汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验)一、实验目的1、掌握主程序与子程序之间的调用关系及其调用方法。
2、掌握子程序调用过程中近程调用与远程调用的区别。
3、熟练掌握码型变换的程序。
二、实验内容1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。
要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。
数据可循环输入,遇‘00’结束。
三、实验准备1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。
2、熟悉键盘输入和字符显示的程序段的编制。
四、实验步骤1、编辑、汇编源程序,生成可执行文件。
2、执行程序,检查输入、输出结果,看是否正确。
如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。
3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。
五、实验报告要求1、分析近程调用和远程调用的主要区别。
用DEBUG命令观察执行过程有何不同。
2、分析实验结果及所遇到的问题的解决方法。
主程序流程图转换子程序TRAN流程图七、程序清单STA SEGMENT STACK ’STACK’DB 100 DUP(0)STA ENDSGSAG SEGMENT PARA ‘CODE’ASSUME CS:CSAG MAIN PROC FARSTRA T: PUSH DSSUB AX,AXPUSH AXREV: MOV AH,1INT 21HMOV BL,ALINT 21HMOV AH,ALMOV AL,BLCMP AX,3030HJE ENDTRANCALL NEAR PTR TRANCALL FAR PTR CONMOV AL,0DHCALL FAR PTR DISPMOV AL,0AHCALL FAR PTR DISPMOV AL,0AHCALL FAR PTR DISPJMP REVENDTRAN: RETMAIN ENDPTRAN PROC NEARAND AX,0F0FHMOV BL,ALMOV BL,ALMOV CL,3SHL AL,CLMOV CL,1SHL BL,CLADD AL,BLADD AL,AHRETTRAN ENDPCSAG ENDSCSBG SEGMENT PARA’CODE’ASSUME CS:CSBGCON PROC FARPUSH AXMOV CL,4SHR AL,CLADD AL,30HCMP AL,39HJBE CON2ADD AL,7CON2: PUSH AXMOV AL,0DHCALL FAR PTR DISPMOV AL,OAHCALL FAR PTR DISPPOP AXCALL FAR PTR DISPPOP AXAND AL,0FHADD AL,30HCMP AL,39HJBE CON1ADD AL,7CON1: CALL FAR PTR DISPRETCON EDNPDISP PROC FARPUSH BXMOV BX,0MOV AH,14INT 10HPOP BXRETDISP ENDPCSBG ENDSEND START。
实验三子程序汇编实验学习和提高

实验三子程序汇编实验学习和提高
山东大学
实验内容:
1、汇编实例:判断该年是否为闰年(学习并理解)
(1)画出程序的流程图:
主程序流程图:
子程序dadacate的流程图:
子程序ifyears的流程图:
(2)在masm for windows软件中实现程序:输入程序:
运行程序,依次输入2100,1960,2011,2000,得结果:
2、汇编实例学习和改进:两位数加法
(1)实现对输入的两个一位的变量进行加法的程序:(运用除法显示结果字符串)
运行结果如下:
(2)实现对输入的两个两位数字进行加法的程序:(运用了除法显示结果字符串)输入程序:
运行结果如下:
问题:起初写对输入的两个两位数字进行加法的程序时,没有设置显示“the sum:”即下图中的004行没有:
下图中的043、044、045三行没有:
运行结果如下:
发现结果覆盖了ple三个字符然后输出,为什么不是直接在所输入的第二个数字后显示呢?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三子程序汇编实验学习和提高汇编语言中的ASSUME伪指令(理解)ASSUME伪指令通知汇编程序(编译器)代码段、数据段、附加段以及堆栈段选择什么名字。
没有ASSUME伪指令时,汇编程序假设不分段,并自动把段超越前缀用于所有寻址存储器数据的伪指令。
ASSUME语句只能用于完整的段定义。
ASSUME不是汇编指令,仅仅是写给编译软件的。
是让编译器知道你的程序的各个段的名字,并不生成机器码。
ASSUME伪指令是指明变量与段寄存器的联系,比如assume ds:data,它是告诉编译器以后所有在data段中定义的变量寻址时,使用ds作为段地址,但是它不对程序作任何事(因为是伪指令),你必须自己对ds赋值。
所以,要让机器知道实际的段地址,还需要mov ax,data mov ds,ax,告诉CPU数据段的地址。
1、汇编实例:判断该年是否为闰年(学习并理解)主程序:将输入字符转化成年份数字的子程序判断是否是闰年的子程序写程序是从理解范例程序开始的,认真的学习上面的程序,在masm for windows软件中实现如下的效果,并通过注释,进一步理解汇编语言的写法规范,以及汇编中子程序的写法(call 和 ret指令,可以参考王爽书籍第十章),学习jmp跳转语句的使用,画出这个程序实现的流程图。
2、汇编实例学习和改进:两位数加法学习和改进程序 (我们常常通过不断的改造已有的程序,达到编程能力进步的目的)例如:求和3+5 程序我们发现这个程序是在程序内定义的数据,能否可以从键盘输入呢?于是:显然,我们不能停留在这个基础上,能否实现输入两个变量,然后相加呢?于是,我们就想起上面的实验:和我们学习利用这些写法,能否实现输入两个变量,然后完成加法呢?(自行完成)错误程序一:DATAS SEGMENTplus db '+$'equalto db '=$'DATAS ENDSSTACKS SEGMENTDB 128 DUP (?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV BL,0MOV AH,1INT 21HADD BL,ALLEA DX,PLUSMOV AH,9INT 21HMOV AH,1INT 21HADD BL,ALLEA DX,equaltoMOV AH,9INT 21HMOV AL,BLMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDSEND START(输出结果非正确结果)错误程序二:DATAS SEGMENTplus db '+$'equalto db '=$'DATAS ENDSSTACKS SEGMENTDB 128 DUP (?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV BL,0MOV AH,1INT 21HADD BL,ALLEA DX,PLUSMOV AH,9INT 21HMOV AH,1INT 21HADD BL,ALLEA DX,equaltoMOV AH,9INT 21HMOV AL,BLADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDSEND START“正确程序”:DATAS SEGMENTplus db '+$'equalto db '=$'DATAS ENDSSTACKS SEGMENTDB 128 DUP (?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV BL,0MOV AH,1INT 21HADD BL,ALLEA DX,PLUSMOV AH,9INT 21HMOV AH,1INT 21HADD BL,ALLEA DX,equaltoMOV AH,9INT 21HMOV AL,BLSUB AL,30HMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDSEND START现在这个程序有没有大的BUG呢?你输入两位数,看看行不行?怎么改呢?(自行完成)答:有很大的BUG,当结果是大于两位的数时,输出的字符不是对应的结果。
并且不能输入两位数。
错误程序一:ADD BL,ALMOV BH,0ADD BX,0AHSUB AL,30HMOV AH,1INT 21HSUB AL,30HMOV AH,0MOV BX,AXLEA DX,equaltoMOV AH,9INT 21HMOV CH,BLAND BL,0FHCMP BL,9HJNA NEXT0STCSUB BL,0AHJMP NEXT1 NEXT0:CLCNEXT1:MOV CL,4SHR CH,CLJC NEXT2JMP NEXT3 NEXT2:ADD CH,1H NEXT3:ADD BH,30HMOV AL,BHMOV DL,ALMOV AH,2INT 21HADD CH,30HMOV AL,CHMOV DL,ALMOV AH,2INT 21HADD BL,30HMOV AL,BLMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21H CODES ENDSEND START错误程序二:DATAS SEGMENTplus db '+$$'equalto db '=$$$'DATAS ENDSSTACKS SEGMENTDB 128 DUP (?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AH,1INT 21HSUB AL,30HMOV BL,0AHMUL BLMOV AH,0ADD CX,AXMOV AH,1INT 21HSUB AL,30HADD CX,AXLEA DX,PLUSMOV AH,9INT 21HMOV AH,1INT 21HSUB AL,30HMUL BLMOV AH,0ADD CX,AXMOV AH,1INT 21HSUB AL,30HMOV AH,0ADD CX,AXMOV BX,CXLEA DX,equaltoMOV AH,9INT 21HMOV CH,BLAND BL,0FHCMP BL,09HJNA NEXT0STCSUB BL,0AHJMP NEXT1 NEXT0:CLCNEXT1:MOV CL,4SHR CH,CLJC NEXT2JMP NEXT3 NEXT2:ADD CH,1H NEXT3:CMP CH,09HJNA NEXT4STCJMP NEXT5 NEXT4:CLCNEXT5:JC NEXT6JMP NEXT7 NEXT6:ADD BH,01H NEXT7:ADD BH,30HMOV AL,BHMOV DL,ALMOV AH,2INT 21HADD CH,30HMOV AL,CHMOV DL,ALMOV AH,2INT 21HADD BL,30HMOV AL,BLMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21H CODES ENDSEND START(没把十六进制转化为十进制显示)错误程序三:DATAS SEGMENTplus db '+$$'equalto db '=$$$'DATAS ENDSSTACKS SEGMENTDB 128 DUP (?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AH,1INT 21HSUB AL,30HMOV BL,0AHMUL BLMOV AH,0ADD CX,AXMOV AH,1 INT 21HSUB AL,30H MOV AH,0 ADD CX,AXLEA DX,PLUS MOV AH,9 INT 21HMOV AH,1 INT 21HSUB AL,30H MUL BLMOV AH,0 ADD CX,AX MOV AH,1 INT 21HSUB AL,30H MOV AH,0 ADD CX,AX MOV AX,CX MOV CL,64H DIV CLMOV BL,AL MOV AL,AH MOV AH,0H MOV CL,0AH DIV CLMOV CL,AL LEA DX,equalto MOV AH,9 INT 21HADD BL,30H MOV AL,BL MOV DL,AL MOV AH,2 INT 21HADD CL,30H MOV AL,CL MOV DL,ALMOV AH,2INT 21HADD AH,30HMOV AL,AHMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDSEND START……….正确程序:DATAS SEGMENTplus db '+$$'equalto db '=$$$'DATAS ENDSSTACKS SEGMENTDB 128 DUP (?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV DS,AXMOV AH,1INT 21HSUB AL,30HMOV BL,0AHMUL BLMOV AH,0ADD CX,AXMOV AH,1INT 21HSUB AL,30HMOV AH,0ADD CX,AXLEA DX,PLUSMOV AH,9INT 21HMOV AH,1INT 21HSUB AL,30HMUL BLMOV AH,0ADD CX,AXMOV AH,1INT 21HSUB AL,30HMOV AH,0ADD CX,AXADD CX,1H(编写其他程序验证发现此bug)MOV AX,CXSUB AH,1H (编写其他程序验证发现此bug)PUSH AXLEA DX,equaltoMOV AH,9INT 21HPOP AXMOV BX,AXDIV CLADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV AX,BXMOV CL,100DDIV CLMOV AL,AHMOV AH,0HMOV BX,AXMOV CL,0AHDIV CLADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV AX,BXMOV CL,0AHDIV CLADD AH,30HMOV DL,AHMOV AH,2INT 21HMOV AH,4CHINT 21H CODES ENDSEND START于是,我们惊讶地发现汇编编程水平随着这个简单问题的深入,好像有点小提高啦!Heart.asm 一个汇编小程序,大家在masm for windows软件中运行运行,看看有什么结果?总结:一个程序没有语法错误,但是执行的结果不是我们想要的,回头看程序却发现不了任何错误,这时候唯一能做的就是一段一段的验证,每一段的结果是否是我们所需,如果不是,做出相应改正,如果是继续下一段,这样下去,考虑周全一点,一定会得出正确结果。