汇编程序编写和提高.doc

汇编程序编写和提高.doc

ID:54699738

大小:129.15 KB

页数:20页

时间:2020-04-20

汇编程序编写和提高.doc_第1页
汇编程序编写和提高.doc_第2页
汇编程序编写和提高.doc_第3页
汇编程序编写和提高.doc_第4页
汇编程序编写和提高.doc_第5页
资源描述:

《汇编程序编写和提高.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第四次实验汇编程序编写和提高1、编写一个程序,实现复制字符串的功能,并将复制的字符串正序倒序显示出来。流程图:程序如下:DATASSEGMENTstring_adb'thefutureisbeautiful';要操作的字符串countequ$-offsetstring_a;把字符串的长度存入countdata1db'thezhengxuis:','$';输出正序是data2db'thefanxuis:','$';输出反序是DATASENDSSTACKSSEGMENTstring_bdb100dup(?);建栈段存放复制的字符串STA

2、CKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;把datas的段地址分别给DS,ESmoves,axleasi,string_a;取string_a的偏移地址给sileadi,string_b;取string_b的偏移地址给dimovcx,count;把字符串长度给cx,决定循环的次数Cld;DF置零,使DI,SI自增repmovsb;把string_a里的字符串复制到string_b,循环次数为;CXmovcx,count;

3、把count赋给CX,决定输出正序循环次数leadx,data1;输出data1里的字符movah,09int21hxordi,di;DI置零output1:movdl,[string_b+di];把string_b偏移地址给DLmovah,02hint21h;输出数据段string_b里的一个字符incdi;DI自增,指向下一个字节loopoutput1;循环输出movcx,count;CX重新获值leadx,data2;把data2的偏移地址赋给DXmovah,09int21h;输出提反序输出的提示字符output2:decdi

4、;上一次循环DI指向要输出字符串的下一个字节,先自减,;使他指向最后一个字符movdl,[string_b+di]movah,02int21h;输出反序的字符串loopoutput2MOVAH,4CHINT21H;结束dosCODESENDSENDSTART;程序结束运行结果:过程中有几次语法错误,比如直接MOVDI,STRING_B,提示错误,不能直接把数据段的偏移地址赋给DI,应该用LEA。百度得知:LEA为硬指令,在程序执行阶段得出偏移地址,offset是伪指令,在编译阶段得出偏移地址。论速度的话,offset比LEA快得多,

5、但是,灵活性和复杂度,offset远不如LEA。1、利用中断调用,在屏幕上显示1-9中的随机数,中断号为86H流程图:Random子程序是上网百度的,加以调用刚开始运行是这样的结果发生除法溢出错误,检查后发现是AND写成了ADD改正后原子程序如下:运行结果:结果很匪夷所思......是D;检查了一下,发现....我写错了,明明子程序中都把随机数放在BL里保存,而我写的output子程序里,是把AH的值赋给DL,AH的值在POPAX已经改变......最后改正后,随机数出炉了,先看程序:DATASSEGMENTDATASENDSSTA

6、CKSSEGMENTSTACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmovax,0moves,ax;段偏移地址指向0000movbx,86h*4;把中断号86H的地址赋给BXmovax,offsetrandommoves:wordptr[bx],ax;把中断子程序的偏移地址存入;ES:[BX]movax,segrandom;取中断子程序的段基地址moves:wordptr[bx+2],ax;把段基地址存入ES:[BX+2]

7、int86h;调用中断向量表的86号即RANDOM子程序calloutput;调用output子程序MOVAH,4CHINT21H;结束randomprocPUSHCXPUSHDXPUSHAX;寄存器保护STI;开中断,后面要调用int1ahMOVAH,0INT1AH;读取时钟滴答计数MOVAX,DX;把随机数存入AXandax,15MOVDL,10DIVDL;除以10,获得1-9的随机数MOVBL,AH;把随机数存入AHPOPAXPOPDXPOPCX;恢复寄存器的值IRETrandomENDP;子程序返回outputprocnea

8、raddbl,'0'movdl,blmovah,02hint21hRet;很简单的输出子程序outputendpCODESENDSENDSTART运行结果因为是随机的,所以就不一一运行了结束!1、键盘输入10个学生的成绩,编写一个程序

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。