




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验一 汇编语言编程基础一上机目的:了解并逐步熟悉汇编语言的编辑方法及特点.复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。掌握汇编语言的编辑、汇编及连接的过程。了解并逐步掌握运用DEBUG进行调试汇编语言程序。二实验内容:学习汇编语言程序的上机步骤1. 编辑EDIT.COM 2用汇编程序MASM.Exe对源程序.ASM文件汇编,生成目标文件.OBJ 3.连接LINK.EXE 4.运行和调试DEBUG.exe熟悉、使用DEBUG调试工具运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。运用MASMEXE文件进行汇
2、编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。运用LINK.EXE文件进行连接,形成*.EXE文件。仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。运用DEBUG。EXE文件进行调试,使用单步执行命令T两次,观察寄存器中内容的变化,使用察看存储器数据段命令D,观察存储器数据段内数值。再使用连续执行命令G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。3 正确的程序清单data segmenta db 9,6,8,7,5 b db 5c db 5 dup (0) ;5之后有空格n equ 5 data endscod
3、e segment assume cs:code,ds:data,es:data ;是逗号不是分号 最后不应有标点start: mov ax,data ;start后面应该有冒号 mov ds,ax mov es,ax cld lea si,a lea di,c ;lea不是leb mov cx,n mov ah,0lp1: lodsb aad div b stosb loop lp1 mov cx,n lea di,c lp2: mov dl,di add dl,30h ;加30对应正确的ASCII码 mov ah,2 int 21h inc di ;地址应该递增而不是递减 loop lp2
4、 mov ah,4ch int 21h code ends ;没有冒号end start程序框图如下实验结果如下 实验2.1 简单程序设计 一实验目的理解各种指令的功能。进一步学习程序的调试。2 实验内容练习1. 实验题目:编程计算下列表达式:A=90,B=-70,C=5,Y均为有符号数,计算Y=2×(A+B)+(A×C)÷5原程序DATA SEGMENTA DB 90D,-70D,90D,5DB DB 2C DB 5D DB 10DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV D
5、S,AX MOV SI,OFFSET A MOV BL,SI ;90D进BL INC SI ADD BL,SI ;-70D加入BL XOR AX,AX ;AX清零 MOV AL,BL ;结果存入AL MUL B ;AL乘2 MOV BL,AL ;结果存到BL INC SI MOV AL,SI INC SI MUL BYTE PTRSI ;90D乘5D DIV C ;AL除以5 ADD BL,AL ;两个结果相加,结果存BL MOV AL,BL ;转移到AL DIV D ;除以10 MOV CL,AH ;余数存CL DIV D ;再除以10 MOV DL,AL ;商转移到DL准备输出到屏幕 AD
6、D DL,30H ;调整ACSII码 MOV BL,AH ;余数存到BL MOV AH,2 ;输出百位 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 ;输出十位 INT 21H MOV DL,CL ADD DL,30H MOV AH,2 ;输出个位 INT 21HCODE ENDSEND START输出计算结果130练习3.编制程序,从键盘输入最多5个数,求他们的和,存入SUM。data segmenta db 5 dup (?)b db 10data ends code segmentassume cs:code,ds:datastart: mov ax,dat
7、a mov ds,ax mov cx,5 lea si,a xor dl,dl lop1: xor ax,ax mov ah,01 ;从键盘输入数字 int 21h add dl,al sub dl,30h ;ASCII码转换为实际数值 loop lop1 ;循环5次输入五个一位数 add dl,30h ;转换为ASCII码准备输出 cmp dl,3Ah ;比较和是否大于9 jae l1 ;大于进入l1 jmp l2 ;不大于进入l2l1: mov al,dl xor ah,ah sub al,30h div byte ptr b ;与练习一同理,除以10,商是十位,余数是个位 mov dl,
8、al add dl,30h mov bl,ah mov ah,2 int 21h mov dl,bl add dl,30hl2: mov ah,2 ;直接向屏幕输出结果 int 21hcode endsend start 输入11111输出连加计算结果5输入23456输出连加计算结果20实验2.2 汇编语言程序设计 - 循环结构程序一实验内容练习1用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。提示:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。对于5(N)个元素,整个排序通
9、过4遍(=N-1)邻元素排序完成。每一遍的排序由若干次邻元素的排序组成。4遍排序中,邻元素的排序依次为4,3,2,1遍。完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DEC CX)排序遍数本遍排序前第一次排序后第二次排序后第三次排序后第四次排序后1300,250,280,240,260250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,3002250,280,240,260,300250,280,240,
10、260,300250,240,280,260,300250,240,260,280,3003250,240,260,280,300250,240,260,280,300240,250,260,280,3004240,250,260,280,300240,250,260,280,300二程序清单DATA SEGMENT A DW 300,250,280,240,260B DW 5 DUP (?)D DB 10DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX XOR AX,AX XOR BX,BX MOV
11、CX,5 LEA SI,ALOP33: MOV AX,SI ;LOP33内的循环是将A内的5个数输出到屏幕上,与实验2.1练 习一中程序同理 DIV D ;将三个数通过除法取出转换为ASCII码然后输出 MOV BH,AH DIV D MOV DL,AL ADD DL,30H MOV BL,AH MOV AH,2 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 INT 21H MOV DL,BH ADD DL,30H MOV AH,2 INT 21H MOV DL,20H MOV AH,2 INT 21H INC SI INC SI LOOP LOP33 MOV D
12、X,5 ;外循环5次 MOV CX,5LOPP: LEA SI,A DEC DX MOV CX,DX LOP: MOV AX,SI ;取第一个数 MOV BX,SI+2 ;取第二个数 CMP AX,BX JAE LOP1 ;第一个数大于第二个数则进入LOP1 JMP LOP2 ;不大于则挑过LOP1进入LOP2 LOP1: MOV SI+2,AX ;LOP1用于两数互换位置 MOV SI,BX LOP2: INC SI INC SI CMP DX,0 ;如果外循环了5次则进入LOP4 JZ LOP4 LOOP LOP ;内循环 LOOP LOPP ;外循环LOP4: MOV CX,5 LEA
13、SI,ALOP3: MOV AX,SI ;LOP3中的循环是将排序过后的五个三位数输出,与实验2.1练 习一中程序同理 DIV D MOV BH,AH DIV D MOV DL,AL ADD DL,30H MOV BL,AH MOV AH,2 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 INT 21H MOV DL,BH ADD DL,30H MOV AH,2 INT 21H MOV DL,20H MOV AH,2 INT 21H INC SI INC SI LOOP LOP3 MOV AH,4CH INT 21HCODE ENDS END START 第三次实
14、验 8253定时器/计数器与接口实验 -乐曲程序一实验目的: 学习8253计数器2输出方波信号用以驱动扬声器发声的原理,通过程序设置计数器2的输出波形的频率和延续时间,控制扬声器的音调和发生长短。二.实验内容:1.设计程序让微机演奏一段两只老虎的乐曲。2.思考如何让PC机演奏一遍,两遍以及数遍这段两只老虎的乐曲,并修改程序实现。3 程序清单stack segment stackdw 100 dup(?)stack endsdata segmentmusic dw 2 dup(262,294,330,262)dw 2 dup(330,349,392)dw 2 dup(392,440,392,34
15、9,330,262)dw 2 dup(294,196,262),0time dw 10 dup(250*50),500*50,250*50,250*50,500*50dw 2 dup(120*50,120*50,120*50,120*50,250*50,250*50)dw 2 dup(250*50,250*50,500*50)nequ 32data endscode segmentassume cs:code;ds:datastart:mov ax,datamov ds,axmov al,0b6h ;控制字写入控制器out 43h,allea di,music ;分别取music和time地址
16、送入DI,SIlea si,timemov cx,n ;循环32次将乐曲的32个音符完成lp:mov bx,di ;读出频率add di,2 ;指向下一个频率mov dx,12h ;将脉冲频率存入AX,DXmov ax,34dchdiv bx ;算出计数值out 42h,al mov al,ah out 42h,al ;计数值给到计数器2in al,61h or al,3out 61h,al ;开扬声器 mov dx,si ;将时长存入DXadd si,2 mov bx,cxdel1: mov cx,064h ;延时del2: loop del2 dec dx ;循环中继续延时 jnz del
17、1mov cx,bxin al,61hand al,0fchout 61h,al ;关扬声器loop lp ;回到lp准备发出下一个音符mov ah,4chint 21hcode endsend start4 实验结果扬声器发出两只老虎的音乐反汇编和单步运行 实验1心得体会将源程序打入记事本中,存为asm文件,用masm汇编以后报5个错。通过行数检查发现一些格式错误和指令错误,这些错误都不难发现。错误都在正确程序中标注出。改正过之后程序正常运行,但最终结果错误,说明还有逻辑错误。在了解了程序流程图,掌握了解决问题的逻辑顺序后开始读程序,并用debug里面的T命令一步一步看程序执行的结果,发现l
18、p2循环中dl在第一次循环中输出正确后之后均是错误输出。注意到之前有lea di,c语句将DI地址恢复,于是发现DEC DI错误,应该是递增而不是递减。这样修改之后程序仍未得到正确的结果。发现结果对应ASCII码输出,于是将DL加30H,最终输出正确结果。实验2.1心得体会在练习1中,通过汇编发现MUL不能用立即数。练习1中的计算编程比较简单,只是要求输出在屏幕上的话,就需要将十六进制的结果转化为十进制然后一位一位输出出来。本程序使用将十六进制结果除以十得到的商和余数转化为ASCII码后输出。三位数使用了两次除法,将两次除法的商和最后的余数输出,得到正确结果。练习3中我将基础的五个一位数加法,
19、和的上线为9的程序改进到能够正确输出两位数和。一开始和的上线为9是因为虽然程序能够计算出正确结果,但输出时转变为ASCII码,只能正确输出十进制一位,超过一位的会输出其他字符。经过改进的程序能够输出一位数或两位数的和。这是因为程序中首先使用了CMP判断是否和是小于10的数,是则跳到程序最后进行输出,不是则运用除十输出商和余数的方法在屏幕上输出正确的结果。汇编语言比高级语言实现相同功能编写的代码要长得多。根据程序员的习惯,实现同一个目标能用不同的语句,比如取地址可以用LEA也可以用OFFSET。刚开始编程时主要是模仿,渐渐的就有了自己喜好语句和逻辑。实验2.2心得体会编程时首先实现了冒泡和输出结果,输出结果参考了实验2.1练习一中的输出方式,并稍加修改使得5个数之间有空格隔开。冒泡法在学习C语言时了解过,所以逻辑清晰,编程时知道在何时循环。但逻辑正确不能保证程序能够正确运行,在运行程序时发现并不能正确输出,而是卡住了(可能是进入了死
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产开发风险管理计划设计
- 医疗保健领域的区块链金融服务创新探索与实践案例分析
- 软件开发中的DevOps实践-全面剖析
- 小学数学在线学习计划
- 汽车共享平台技术创新与产业链协同发展分析
- 医疗供应链的数字化管理创新
- 七年级历史文化交流活动方案
- 零售企业数字化供应链协同与产业链整合研究报告
- 2025年五年级班主任体育活动计划
- 城市轨道交通智慧运维系统建设2025:智能化运维与安全风险防范创新与实践研究报告
- 行车验收表公司和安装单位
- 社区居民家庭教育指导需求调查问卷
- 防灾减灾知识问答试题
- 《发育生物学》课件第八章 胚轴的特化与体轴的建立
- 哈工大环境工程毕业设计
- 儿科感染性疾病试题
- 毕业设计---宅楼设计(剪力墙结构)
- 固定管板式换热器设计说明书
- 钻孔注水试验计算EXCEL表格
- 50T吊车性能表
- 《职业病危害告知卡》
评论
0/150
提交评论