IBMPC汇编语言程序设计实验报告.docx
- 文档编号:5813117
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:22
- 大小:1,002.48KB
IBMPC汇编语言程序设计实验报告.docx
《IBMPC汇编语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《IBMPC汇编语言程序设计实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
IBMPC汇编语言程序设计实验报告
中南大学
IBM-PC汇编语言程序设计
实验报告
学生姓名
学院
专业班级
完成时间
IBM-PC汇编语言程序设计
汇编语言实验一
1.实验目的与要求
【实验目的】
学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,熟悉DEBUG调试程序和DOS功能表的查看,为后续实验打下坚实基础。
【实验要求】
通过实验掌握下列知识:
1、8086指令:
MOV,ADD,ADC,SUB,SBB,DAA,XCHG
2、DEBUG命令:
A,D,E,F,H,R,T,U。
3、ASCII码及用16进制数表示二进制码的方法。
4、8086寄存器:
AX,BX,CX,DX,F,IP。
2.实验内容与实现原理
DEBUG命令:
1、打DEBUG进入DEBUG,显示提示苻'_'。
2、退出DEBUG命令:
Q
3、显示内存命令:
D起始地址结束地址
4、修改内存命令:
E起始地址,连续修改打空格键。
打回车键退出E命令。
5、检查寄存器命令:
R
6、修改寄存器命令:
R寄存器名
7、小汇编命令:
A起始地址,不输入指令打回车键退出A命令。
8、反汇编命令:
U起始地址结束地址
9、文件命名命令:
N盘号:
文件名
10、读文件命令:
L内存地址
11、写文件命令:
W内存地址
12、读扇区命令:
L内存地址盘号(0--A:
1--B:
)扇区号扇区数
13、写扇区命令:
W内存地址盘号扇区号扇区数
14、运行命令:
G=起始地址结束(断点)地址
15、单步命令:
T=起始地址运行指令数,进入子程序内部。
16、单步命令:
P=起始地址运行指令数,不进入子程序内部。
17、内存搬家命令:
M起始地址结束地址目的地址
3.实验具体设计实现及结果
实验结果如下,输入debug指令后截图:
4.源代码
'HelloWorld'程序:
DATASSEGMENT
STRINGDB13,10,'HelloWorld!
',13,10,'$'
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,STRING
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
汇编语言实验二
1.实验目的与要求
【实验目的】
(1)掌握循环程序的设计方法;
(2)掌握汇编语言源程序的编辑、汇编、连接及调试过程;
(3)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性;
(4)学会针对不同的问题,选用不同的组织循环的方法。
【实验要求】
掌握循环程序的过程和汇编实现原理,进一步熟练掌握DEBUG操作指令以及汇编语言源程序的编辑、汇编、连接及调试过程。
2.实验内容与实现原理
掌握循环排序算法的思想:
1、二进制到十六进制转换程序;
2、起泡排序算法的程序实现;
3、查找匹配字符串。
注:
第1个必须做,2、3选做一个
3.实验具体设计实现及结果
4.源代码
二进制转十六进制:
PROGNAMSEGMENT
MAINPROCFAR
ASSUMECS:
PROGNAM,DS:
DATAS,SS:
STACKS
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVCH,4
MOVBX,0101010011101001B
ROTATE:
MOVCL,4
ROLBX,CL
MOVAL,BL
ANDAL,0FH
ADDAL,30H
CMPAL,3AH
JLPRINTIT
ADDAL,7H
PRINTIT:
MOVDL,AL
MOVAH,2
INT21H
DECCH
JNZROTATE
RET
MAINENDP
PROGNAMENDS
END
冒泡排序:
DSEGSEGMENT
SCOREDB11H,02H,15H,32H,5H,6H,7H,8H,9H,10H,90DUP(05H)
MAXDB?
MINDB?
DSEGENDS
CSEGSEGMENT
ASSUMEDS:
DSEG,CS:
CSEG
START:
MOVAX,DSEG
MOVDS,AX
LEABX,SCORE;取数组的首地址
MOVCX,100;控制循环次数
XORSI,SI;将SI清零
XORDI,DI;将DI清零
L1:
MOVAH,[BX+SI];用基变址寻址取操作数,L1为外循环,(SI)为循环变量,
;相当于i
L2:
MOVAL,[BX+DI];L2为内循环,(DI)为循环变量,相当于j
CMPAH,AL
JAEL3
MOVDH,AH;AH MOVAH,AL MOVAL,DH MOV[BX+DI],AL;将交换后的数存入存储器 MOV[BX+SI],AH;这两步很重要 L3: INCDI;AH>=AL,不需交换,(AH)直接和后一个数比较,相当于j++ CMPDI,100;判断内层循环是否结束 JBL2;没结束,继续循环 ;内层循环结束了 INCSI;外层变量SI加一,相当于i++ MOVDI,SI;相当于j=i LOOPL1 ;通过寄存器实现两个存储器数据间的交换 MOVAH,BYTEPTR[BX];基址寻址 MOVAL,BYTEPTR[BX+99] MOVMAX,AH MOVMIN,AL MOVAH,4CH;返回操作系统 INT21H CSEGENDS ENDSTART 汇编语言实验三求Fibonacci递归数 1.实验目的与要求 【实验目的】 掌握子程序的设计方法,熟悉递归程序的设计 【实验要求】 掌握递归程序的调用、返回及入口、出口的传递方法 2.实验内容与实现原理 程序接受由用户键入的数N,根据给定的N值,计算Fibonacci数。 Fibonacci数的公式如下: Fib (1)=1;当n=1 Fib (2)=1;当n=2 Fib(n)=Fib(n-1)+Fib(n-2) 3.实验具体设计实现及结果 4.源代码 DATASSEGMENT STR1DB'Pleaseinputanumber(1-50): N=','$' STR2DB13,10,'FIB(N)=','$' WRONGSTRDB13,10,13,10,'Anumberbetween1and50please! ',13,10,13,10,'$' INPUTBUFFERDB3,? 3DUP(? ) NDW? ;输入N值 RESULT1HDW0 RESULT1LDW0 RESULT2HDW0;结果的高16位 RESULT2LDW0;结果的低16位 C10DW10 OUTPUTBUFFERDB11DUP('0') DATASENDS CODESSEGMENT ASSUMECS: CODES,DS: DATAS START: MOVAX,DATAS MOVDS,AX CALLINPUT CALLFIB CALLOUTPUT JMPQUIT ;*********************************************************************** INPUTPROC JMPT1 WRONG: LEADX,WRONGSTR MOVAH,9 INT21H T1: LEADX,STR1 MOVAH,9 INT21H LEADX,INPUTBUFFER MOVAH,10 INT21H MOVAX,0 MOVCL,INPUTBUFFER+1 MOVCH,0 LEABX,INPUTBUFFER+2 T2: MULC10 MOVDL,[BX] CMPDL,'0' JBWRONG CMPDL,'9' JAWRONG ANDDL,0FH ADDAL,DL ADCAH,0 INCBX LOOPT2 CMPAX,0032H JAWRONG CMPAX,1 JBWRONG MOVN,AX RET INPUTENDP ;************************************************************ FIBPROC CMPN,1 JZL1 CMPN,2 JZL2 DECN CALLFIB MOVAX,RESULT2L MOVDX,RESULT2H MOVCX,RESULT1L ADDRESULT2L,CX MOVCX,RESULT1H ADCRESULT2H,CX MOVRESULT1L,AX MOVRESULT1H,DX JMPEXIT L1: MOVRESULT1L,1 MOVRESULT2L,1 JMPEXIT L2: MOVRESULT2L,1 DECN CALLFIB EXIT: RET FIBENDP ;************************************************************* OUTPUTPROC MOVAX,RESULT2L LEASI,OUTPUTBUFFER MOVCX,5 R1: MOVDX,0;低位加入OUTPUTBUFFER DIVC10 INCSI ADD[SI],DL LOOPR1 ;************************* MOVAX,RESULT2H LEASI,OUTPUTBUFFER MOVCX,5 R2: MOVDX,0 DIVC10 INCSI PUSHCX;高位加入OUTPUTBUFFER CMPDX,0 JENOADD MOVCX,DX ADDN: CALLADD65536 LOOPADDN NOADD: POPCX LOOPR2 ;********************** LEADX,STR2 MOVAH,9 INT21H LEASI,OUTPUTBUFFER MOVBX,10 R3: CMPBYTEPTR[SI+BX],'0' JAPRINT DECBX;显示十进制结果 JMPR3 PRINT: MOVDL,[SI+BX] MOVAH,2 INT21H DECBX CMPBX,1 JAEPRINT RET OUTPUTENDP ;************************************************************ ADD65536PROC;高位算法 ADDBYTEPTR[SI],6 MOVDL,0 CMPBYTEPTR[SI],3AH JBA1 SUBBYTEPTR[SI],10 MOVDL,1 A1: ADDBYTEPTR[SI+1],3 ADDBYTEPTR[SI+1],DL MOVDL,0 CMPBYTEPTR[SI+1],3AH JBA2 SUBBYTEPTR[SI+1],10 MOVDL,1 A2: ADDBYTEPTR[SI+2],5 ADDBYTEPTR[SI+2],DL MOVDL,0 CMPBYTEPTR[SI+2],3AH JBA3 SUBBYTEPTR[SI+2],10 MOVDL,1 A3: ADDBYTEPTR[SI+3],5 ADDBYTEPTR[SI+3],DL MOVDL,0 CMPBYTEPTR[SI+3],3AH JBA4 SUBBYTEPTR[SI+3],10 MOVDL,1 A4: ADDBYTEPTR[SI+4],6 ADDBYTEPTR[SI+4],DL MOVDL,0 CMPBYTEPTR[SI+4],3AH JBA0 SUBBYTEPTR[SI+4],10 MOVDL,1 A5: ADDBYTEPTR[SI+5],DL MOVDL,0 CMPBYTEPTR[SI+5],3AH JBA0 SUBBYTEPTR[SI+5],10 MOVDL,1 A6: ADDBYTEPTR[SI+6],DL MOVDL,0 CMPBYTEPTR[SI+6],3AH JBA0 SUBBYTEPTR[SI+6],10 MOVDL,1 A7: ADDBYTEPTR[SI+7],DL MOVDL,0 CMPBYTEPTR[SI+7],3AH JBA0 SUBBYTEPTR[SI+7],10 MOVDL,1 A8: ADDBYTEPTR[SI+8],DL MOVDL,0 CMPBYTEPTR[SI+8],3AH JBA0 SUBBYTEPTR[SI+8],10 MOVDL,1 A9: ADDBYTEPTR[SI+9],DL A0: RET ADD65536ENDP ;********************** QUIT: MOVAH,4CH INT21H CODESENDS ENDSTART 汇编语言实验四分类统计字符个数 1.实验目的与要求 【实验目的】 掌握分支程序设计的原理与方法,重点掌握各种程序中形成和判断条件而产生的程序段的设计方法和技巧。 【实验要求】 掌握分支程序的调用及基本子程序的编写,判断程序运行的顺序。 2.实验内容与实现原理 程序接受用户输入一行字符,并按照字符串中字符所属的类型分类,将结果输出(例如: aaabb1234&中,字母5,数字4,其他字符1)。 3.实验具体设计实现及结果 4.源代码 DATASSEGMENT maxlendb80 actlendb? Stringdb80dup(? ) str1db'pleaseinputaString(<80): $' str2db0ah,0dh,'Numberofchars: $' str3db0ah,0dh,'Numberofdigits: $' str4db0ah,0dh,'Numberofothers: $' Quitdb0ah,0dh,0ah,0dh,'Pressanykeysquit! $' chardw? digitdw? otherdw? DATASENDS CODESSEGMENT ASSUMECS: CODES,DS: DATAS START: PUSHDS xorAX,AX pushAx MOVAX,DATAS MOVDS,AX leaDX,str1 movAH,9 int21h leaDX,maxlen movAH,0aH int21H leaSI,String movchar,0 movdigit,0 movother,0 COMPARE: movAL,[SI] cmpal,0dh jzexit CMPAL,30H JCOTHER1 CMPAL,3aH JCNUMBER CMPAL,41H JCOTHER1 CMPAL,5BH JCLETTER CMPAL,61H JCOTHER1 CMPAL,7BH JCLETTER OTHER1: INCother JMPINCADDR NUMBER: INCdigit JMPINCADDR LETTER: INCchar INCADDR: INCSI JMPCOMPARE exit: leaDX,str3 movAH,9 int21h movSI,10 movAX,digit callPrintNumber leaDX,str2 movAH,9 int21h movAX,char callPrintNumber leaDX,str4 movAH,9 int21h movAX,other XORDX,DX callPrintNumber leaDX,Quit movAH,9 int21h movah,1 int21H movax,4C00H int21H PrintNumberprocnear XORDX,DX XORSI,SI movSI,10 divSI movBX,DX cmpAX,0 JLnext3 movDX,AX ADDDX,30H movah,2 int21H next3: movDX,BX ADDDL,30H movah,2 int21H ret PrintNumberendp CODESENDS ENDSTART 总结 通过这次实验,更加了解了汇编语言的内容。 学习了汇编编译环境的使用、循环与分支程序设计、递归和数组等等问题。 对汇编语言的思想有了更加深刻的理解。 在实验中,曾遇到不少困难。 但是通过老师与同学们的帮助都一一解决。 这个汇编语言实验对我来说有些困难,因为习惯了高级语言编程,c语言、c++、java等语言对我来说更加方便。 但是学会了汇编语言也是好处多多,虽然并没有完全展现出来,但我相信将来这些知识都是对我人生有所助益的。 缺点在于程序有些冗余,说明我还需提高代码的编写能力,这将是我近期努力的方向。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IBMPC 汇编语言 程序设计 实验 报告