1、成绩评定教师签名嘉应学院 计算机学院实验报告课程名称: 汇编语言程序设计开课学期: 2017-2018学年第 1学期班 级:指导老师:实验题目: 循环程序设计学 号:姓 名:1、实验目的:通过实验,理解汇编程序编译和链接的过程,掌握程序设计的基本方法,理解循环程序设计的结构。2实验内容1.汇编语言程序上机过程:课本 P147,例 4.302.循环程序设计:课本 P162,例 5.13、实验过程描述(一) 程序编译与链接例 4.30请把 40个字母 a的字符串从缓冲区传送到目的缓冲区,建立汇编源程序 147.asm。(1)程序源代码data segment ;define data segmen
2、tsource_buffer db 40 dup(a)data endsextra segment ;define extra segment dest_buffer db 40 dup(?)extra endscode segment ;define code segmentmain proc far ;main part of programassume cs:code,ds:data,es:extrastart:;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in axpush ax ;s
3、ave it on stack;set DS register to current data segmentmov ax,data ;data segment addrmov da,ax ;into DS register;set ES register to current extra segmentmov ax,extra ;extra segment addrmov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,source_buffer ;put offset addr of source ;buffer i
4、n SI lea di,dest_buffer ;put offset addr of dest;buffer in dicld ;set DF flag to forwardmov cx,40 ;put count in cxrep movsb ;move entire stringret ;return to DOSmain endp ;end of main part of programcode ends ;end of code segmentend start ;end of assembly(2)用 MASM程序产生 obj文件查看文件目录(3)用 MASM打开汇编源程序发现一处
5、语法错误,改正源代码后可以看到已经生产 obj文件(4)用 LINK程序产生 EXE文件(5)程序的执行运行程序并调试 EXE文件,目标字符在缓冲区间传送,结果无法直接在屏幕上显示出来,通过 debug调试内存单元可以查看(二)循环程序设计例 5.1 试编制一个程序把 BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。(1)分析题意1.循环体中应该包括从二进制到所显示字符的 ASCLL之间转换。2.采用循环移位的方式把所显示的 4二进制数移到最后面,再想办法把最后 4位二进制数转换成 16进制数。3.由于数值 0到 9的 ASCLL为 30到 39H,而字幕 A上 30H后还需要做一次
6、判断,如果为字符 A到 F,则还需要加上 7才能显示出正确的十六进制数。(2)程序框图(3)程序源代码program segmentmain proc farassume cs:programstart:push dssub ax,axpush axmov ch,4rotate: mov cl,4rol bx,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7hprintit:mov dl,almov ah,2int 21hdec chjnz rotateretmain endpprogram endsend start (4)编译和链接(5)调试程序(6)运行程序四、实验小结通过本实验,我了学会了如何通过编译和链接完成汇编语言程序的建立过程,如何调试源程序的的语法错误。理解了循环程序的结构,学会了程序的基本思想和方法。