汇编语言实验报告(共28页).doc
《汇编语言实验报告(共28页).doc》由会员分享,可在线阅读,更多相关《汇编语言实验报告(共28页).doc(28页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 合肥工业大学实验报告课 程:汇编语言程序设计专业班级:学 号:姓 名: 实验一 Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。2、掌握8086/8088的寻址方式及多字节数据的处理方法。二. 实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求:
2、本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。三. 实验过程和程序基础题:1、利用DEBUG程序中的“E”命令,将两个多字节数“H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。附加题:1.从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v
3、-(x*y+z-540)/x2.完成BX中1的个数的统计。3.用串操作指令将DS:0000开始20个字节初始化为:0CCH。并将这20个字节的内容复制到其后的20个字节里。四. 实验结果(包括必要的截图)基础题 1:基础题 2:附加题 1:附加题 2:附加题 3:五. 实验体会1. 在汇编语言中,变量的其实都是地址。2. 在Debug中,数值都是16进制的。3. 在读写内存中的数据时,必须指出数据类型是byte还是word。实验二 汇编语言程序设计(顺序、多分支、循环)一. 实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程
4、序的过程。二. 实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:计算表达式值(V(X*Y+Z-720)/X;将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。2、使用地址表实现如下功能:根据输入的数字17,分别显示相应的英文星期名,如果输入其他字符,则重新输入。3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。三. 实验过程和程序第一题:stacksegment stackdw 512 dup(?)stackendsdatasegmentX dw 021CHY dw 0001HZ dw 0FF
5、FFHV dw 0438HSUM1 dw 0HSUM2 dw 0Hdataendscodesegment assume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov ax, Ximul word ptr Ymov cx, dxmov bx, axmov ax, Zcwdadd bx, axadc cx, dxmov ax, 21CHcwdsub bx, axsbb cx, dxmov ax, Vcwdsub ax, bxsbb dx, cxidiv word ptr Xmov word ptr SUM1, axmov word pt
6、r SUM2, dxmov ah,4chint 21hcodeendsend start第二题:stacksegment stackdw 512 dup(?)stackendsdatasegmenttip db Input number(17, 0 for quit):, $msg1 db Monday,0DH, 0AH, $msg2 db Tuesday,0DH, 0AH, $msg3 db Wednesday,0DH, 0AH, $msg4 db Thursday,0DH, 0AH, $msg5 db Friday,0DH, 0AH, $msg6 db Saturday,0DH, 0AH,
7、 $msg7 db Sunday,0DH, 0AH, $table dw show1, show2, show3, show4, show5, show6, show7dataendscodesegment assume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axgetnum:; 打印提示信息mov dx, offset tipmov ah, 09Hint 21H; 用户输入数字mov ah, 01Hint 21Hmov bl, al; 换行保持美观mov ah, 02Hmov dl, 0DHint 21Hmov ah, 02hmov
8、dl, 0AHint 21H; 非法数值重新输入cmp bl, 0jb getnumcmp bl, 7ja getnum; 输入0直接退出cmp bl, 0je quitand bx, 000FHdec bxshl bx, 01Hjmp tablebx; 输出对应单词print:mov ah, 09Hint 21Hjmp getnumquit:mov ah,4chint 21hshow1:mov dx, offset msg1jmp printshow2:mov dx, offset msg2jmp printshow3:mov dx, offset msg3jmp printshow4:mo
9、v dx, offset msg4jmp printshow5:mov dx, offset msg5jmp printshow6:mov dx, offset msg6jmp printshow7:mov dx, offset msg7jmp printcodeendsend start第三题:stacksegment stackdw 512 dup(?)stackendsdata segmentstudent db 50 dup(2)table dw 10000, 1000, 100, 10, 1NewLine db 0DH, 0AH, $MaxStr db Max:$MinStr db
10、Min:$Average db Average:$data endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axcall calcAveragecall findMaxcall findMinmov ah, 4CHint 21HcalcAverage:lea si, studentmov cx, 50mov ax, 0PlusNext:add al, siadc ah, 0inc siloop PlusNextmov bl, 50div blmov bl, alxor bh, bhlea dx, Av
11、eragemov ah, 09Hint 21Hcall putnumlea dx, NewLinemov ah, 09Hint 21HretfindMax:lea si, studentmov cx, 50mov al, 0MaxNext:cmp al, sija MaxPassmov al, siMaxPass:inc siloop MaxNextmov bl, alxor bh, bhlea dx, MaxStrmov ah, 09Hint 21Hcall putnumlea dx, NewLinemov ah, 09Hint 21HretfindMin:lea si, studentmo
12、v cx, 50mov al, 0FFHMinNext:cmp al, sijb MinPassmov al, siMinPass:inc siloop MinNextmov bl, alxor bh, bhlea dx, MinStrmov ah, 09Hint 21Hcall putnumlea dx, NewLinemov ah, 09Hint 21Hretputnum:mov cx, 5lea di, tablenext:mov ax, bxmov dx, 0Hdivword ptrditest al, 0Hmov bx, dxadd al, 0mov dl, almov ah, 02
13、Hint 21Hadd di, 2loop nextretcode endsend start四. 实验结果(包括必要的截图)第一题:第二题:第三题:五. 实验体会1. 汇编中的分支、循环只能通过跳转实现。2. 地址表是实现多分支结构的常用方法。实验三 循环和子程序设计一. 实验目的1、掌握循环程序和子程序的设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。二. 实验内容1. 在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。设 计程序完成如下功能:根据用户输入的一个2位十进制数,作为查找对象,在该数组中查找,若找到则显示“Y”,
14、若没找到则显示“N” 。2. 从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有asm子串。如果有,输出Yes;否则,输出No)。3. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。(要求输入输出实现,且有提示)三. 实验过程和程序第一题:stack segment stackdw 512 dup(0)stack endsdata segmentScore db 20, 21, 22, 23, 24, 25, 26, 27, 28, 29db 30, 31, 32,
15、33, 34, 35, 36, 37, 38, 39db 40, 41, 42, 43, 44, 45, 46, 47, 48, 49db 50, 51, 52, 53, 54, 55, 56, 57, 58, 59db 60, 61, 62, 63, 64, 65, 66, 67, 68, 69db 70, 71, 72, 73, 74, 75, 76, 77, 78, 79db 80, 81, 82, 83, 84, 85, 86, 87, 88, 89db 90, 91, 92, 93, 94, 95, 96, 97, 98, 99db 100, 101, 102, 103, 104,
16、105, 106, 107, 108, 109db 110, 111, 112, 113, 114, 115, 116, 117, 118, 119NextLine db 0DH, 0AH, $Tip db Input a number:, $No db N, 0DH, 0AH, $Yes db Y, 0DH, 0AH, $InputBuf db 4, ?, 8 dup($)data endscode segmentassume cs:code, ds:data, ss:stackstart:mov ax, datamov ds, ax; 打印提示信息lea dx, Tipmov ah, 09
17、Hint 21H; 获取用户的输入,放在alsub sp, 2call GetNumpop ax; 扫描Scorelea bx, Scoremov cx, 100L:cmp al, bx; 若bx = al, 找到je Foundinc bxloop L; 循环没有中断,没找到,打印Nolea dx, Nojmp OutPutFound:lea dx, Yesjmp OutPutOutPut:mov ah, 09Hint 21HExit:mov ah, 4CHint 21H; 参数: 无; 返回值: 8位无符号数GetNum proc farpush axpush bxpush cxpush
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 报告 28
限制150内