ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:196.11KB ,
资源ID:24789919      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24789919.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(四川大学微机原理实验报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

四川大学微机原理实验报告.docx

1、四川大学微机原理实验报告微机原理试验汇报学 院: 专业班级: 姓 名 学 号 试验一 汇编语言编程基础1.3汇编语言程序上机操作和调试训练一功效说明 利用8086汇编语言, 编辑多字节非压缩型BCD数除法简单程序, 文件名取为*.ASM。利用MASMEXE文件进行汇编, 修改程序中多种语法错误, 直至正确, 形成*.OBJ文件。利用LINK.EXE文件进行连接, 形成*.EXE文件。仔细阅读和体会DEBUG调试方法, 掌握多种命令使用方法。利用DEBUG。EXE文件进行调试, 使用单步实施命令T两次, 观察寄存器中内容改变, 使用察看存放器数据段命令D, 观察存放器数据段内数值。再使用连续实施

2、命令G, 实施程序, 检验结果是否正确, 若不正确可使用DEBUG设置断点, 单步实施等功效发觉错误所在并加以更正。二程序步骤图 设置被除数、 商地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、 存商 N 被除数各位已除完? Y 显示运算结果 结束 三程序代码修改后程序代码以下: DATA SEGMENT A DB 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,A

3、X CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,CLP2: MOV DL,DI ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21HCODE ENDSEND START四试验感想和收获经过这次试验, 我对微机原理上级试验环境有了初步认识, 能够较为熟练地对汇编语言进行编译, 汇编及连接, 同时也学会了用DEBUG调试程序, 收获很大。在这次试验中我也碰到了部分困难。在刚开始我发觉自己无法

4、打开MASM.EXE, 计算机提醒是因为版本不兼容。我这才想起来我操作系统是64位, 和该软件版本不兼容。不过我并没有放弃, 经过我探索以后, 我发觉用DOSBOX这个程序能够处理我电脑运行不了该程序问题。在处理了第一个难题后, 我开始着手更正试验1.3中语法错误和逻辑错误, 不过不管我怎么修改却一直都无法经过编译, 而且基础上每句话都有编译错误。依据我多年编程经验来看, 这应该是汉字输入法在搞鬼, 以后我耐心地把程序重新输了一遍, 果然经过了编译, 而且以后连接也进行很顺利。在用DEBUG调试时发认为出结果也很正确。尽管这次试验内容非常简单, 仅仅是教会我们部分基础操作, 但我却显著感觉到了

5、汇编语言和C语言等高级语言所不一样地方。越是底层, 基础东西就越不人性化, 用C语言一行代码就能试验功效在汇编语言中可能要花上数十行。看来汇编语言学习不是几周就能速成, 必需要有终年累月积淀才能掌握。 试验二 设计汇编语言程序一功效说明练习1. 试验题目: 编程计算下列表示式: A=90, B=-70, C=5, Y均为有符号数, 计算Y=2(A+B)+(AC)5要编写部分稍微复杂程序, 我们会碰到一段程序被反复实施, 这么, 我们会用到LOOP指令。使用该指令时, 需在CX中装入循环次数。练习2.码转换程序设计编制程序, 把十进制数15786转化成二进制数。提醒: 15786=1101010

6、10+510+710+810+6, 循环CX=5练习3.编制程序, 从键盘输入最多5个数, 求她们和, 存入SUM。练习4.用“冒泡“法对一组数300, 250, 280, 240, 260, 按从小到大次序排列。提醒: 用冒泡方法对一组数据元素排序, 它基础方法是: 将相邻两个元素经过比较进行排序, 经过数次, 多遍邻元素排序, 实现整个一组数排序。对于5(N)个元素, 整个排序经过4遍(=N-1)邻元素排序完成。每一遍排序由若干次邻元素排序组成。4遍排序中, 邻元素排序依次为4, 3, 2, 1遍。完成第一遍排序后, 最大数沉底, 已经抵达它应占据位置, 不需要参与下一遍排序。外循环次数为

7、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, 260, 300250, 240, 280, 260, 300250, 240, 260, 280, 3003250, 240, 260, 280, 3

8、00250, 240, 260, 280, 300240, 250, 260, 280, 3004240, 250, 260, 280, 300240, 250, 260, 280, 300试验要求: 1.编制程序, 从键盘输入300, 250, 280, 240, 260这五个数, 并思索怎样输入任意五个数, 五个数能够有一位数, 二位数, 三位数, 四位数, 五位数, 混合输入比较大小; 2.对这组数用冒泡法进行排序, 并输出原始数据及排序后数据, 两两数据之间用空格分隔; 3.利用DEBUG调试工具, 用D0命令, 查看排序前后, 内存数据改变, 以及会用调试命令查看程序运算中寄存器中值

9、; 4.去掉最大和最小两个值, 求出其它值平均值, 并输出最大值, 最小值和平均值; 5.用压栈PUSH和出栈POP指令“优异后出”特点, 设计算法将平均值按位逐一输出(即输出263); 6.用移位指令将平均值以二进制串形式输出。7.设计程序要有模块化思想, 用子程序实现不一样功效; 全部数据输出前要用字符串输出指令, 进行输出提醒(如: zui da zhi shi : 300等), 全部数据结果能清楚地显示在电脑屏幕上。二程序步骤图三程序代码练习一: DATA SEGMENTA DB 90B DB -70C DB 5Y DW ? DATA ENDSCODE SEGMENTASSUME CS

10、:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BL,A MOV CL,B ADD BL,CL ; A+B MOV AL,02H IMUL BL ;2*(A+B) MOV BX,AX MOV AL,A MOV CL,C IMUL CL ;A*C IDIV CL ;A*C/5 ADD AX,BX MOV Y,AX MOV AH,4CH INT 21HCODE ENDS END START练习二: DATA SEGMENTA DW 15786DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,

11、DATA MOV DS,AX MOV BX,A MOV CX,16LEFT: TEST BX,8000H JNZ L1 ; 当首位为1, 实施L1 MOV DL,0 ; 输出0 MOV AH,02H INT 21HSHL: SHL BX,1 LOOP LEFT MOV AX,4CH INT 21HL1: MOV DL,1 ; 输出1 MOV AH,02H INT 21H JMP SHLCODE ENDS END START运行结果: 练习三: DATA SEGMENTSUM DW ? HEHE DB ? ,? ,? ,? ,? DATA ENDSCODE SEGMENTASSUME CS:CO

12、DE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,HEHE MOV BL,0 MOV CX,5LOOP1: MOV AH,01H INT 21H SUB AL,30H MOV SI,AL INC SI LOOP LOOP1 MOV CX,5 MOV AX,0 SUB SI,5LOOP2: ADD AL,SI AAA INC SI LOOP LOOP2 MOV BX,AX MOV SUM,AX MOV DL,BH ADD DL,30H MOV AH,2 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 INT 21H MOV A

13、H,4CH INT 21HCODE ENDS END START运行结果: 冒泡排序法程序: DATAS SEGMENTSHURU DB QING SHU RU 5 GE SHU JU,13,10,$SHU1 DB 4,? ,3 DUP(? )SHU2 DB 4,? ,3 DUP(? )SHU3 DB 4,? ,3 DUP(? )SHU4 DB 4,? ,3 DUP(? )SHU5 DB 4,? ,3 DUP(? )AVER DB 3 DUP(? )SHUCHU DB PAI XU HOU DE SHU JU SHUN XU SHI,:,$MAX DB ZUI DA ZHI SHI,:,$MI

14、N DB ZUI XIAO ZHI SHI,:,$AVERAGE DB PING JUN ZHI SHI,:,$CHUSHU DB 100,10HE DW ? STR1 DB 16 DUP(30H)STR2 DB PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU,:,$DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA DX,SHURU;显示QING SHU RU 5 GE SHU JU: MOV AH,9 INT 21H MOV

15、CX,5;输入五个数字 MOV SI,0INPUT: LEA DX,SHU1+SI;输入要排序原始数据 MOV AH,10 INT 21H MOV DL,10;输入后换行 MOV AH,2 INT 21H ADD SI,5;指针加5, 指向下一个变量 LOOP INPUT CLD MOV CX,4;设定排序外循环次数A: MOV BP,0 PUSH CX;外循环次数入栈PX: PUSH CX MOV CX,3 LEA SI,SHU1+BP+2;逐位比较两个数大小 LEA DI,SHU1+BP+7 REPZ CMPSB JB B;假如小于直接比较下一个数, 不然两个数对换位置 MOV CX,3J

16、h: MOV AL,SHU1BP+2 XCHG AL,SHU1BP+7;将两个字节对换位置, 循环3次即完成这两个数交换 XCHG AL,SHU1BP+2 INC BP LOOP Jh SUB BP,3B: ADD BP,5;指向后面两个数字 POP CX LOOP PX POP CX;外循环次数出栈 LOOP A LEA DX,SHUCHU;输出字符串PAI XU HOU DE SHU JU SHUN XU SHI: MOV AH,9 INT 21H MOV CX,5 MOV SI,2OUTPUT:PUSH CX;计数器入栈实现循环嵌套 MOV CX,3L: MOV AL,SHU1+SI;输

17、出排序后5个数字 MOV DL,AL MOV AH,2 INT 21H INC SI LOOP L MOV DL,2CH MOV AH,2 INT 21H ADD SI,2 POP CX;计数器出栈 LOOP OUTPUT MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,MAX;输出字符串ZUI DA ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV SI,2 D: MOV DL,SHU5+SI;输出最大值 MOV AH,2 INT 21H INC SI LOOP D MOV DL,10;换

18、行 MOV AH,2INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,MIN;输出字符串ZUI XIAO ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV SI,2 E: MOV DL,SHU1+SI;输出最小值 MOV AH,2 INT 21H INC SI LOOP E MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,AVERAGE;输出字符串PING JUN ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV BX,10;除

19、数10 MOV SI,2 AD: MOV DX,0 MOV AH,0 PUSH CX MOV CX,3 ZH: MOV AL,SHU2+SI;将十进制数转换为二进制数, 为后面求平均值做准备 SUB AL,30H PUSH AX MOV AX,DX MUL BX MOV DX,AX POP AX ADD DX,AX INC SI LOOP ZH;实施3次完成3个十进制数转换 ADD SI,2 POP CX ADD HE,DX;将DX数放在HE中 LOOP AD;循环后得到三个十进制数转换为二进制数以后相加和 MOV DX,HE; MOV AX,DX XOR DX,DX MOV BX,3 DIV

20、 BX;除3取平均值,结果将商放在AX中, 余数放在DX中 MOV BX,AX;给BX赋值平均数, 然后将BX中表示十进制数转换为对应字符串 DIV CHUSHU;除100取最高位 ADD AL,30H;转换为ASCII码 MOV AVER,AL MOV AL,AH XOR AH,AH DIV CHUSHU+1;除10取十位 ADD AL,30H ADD AH,30H;余数就是个位 MOV AVER+1,AL MOV AVER+2,AH MOV CX,3 MOV SI,0 F: MOV DL,AVER+SI;输出平均值 MOV AH,2 INT 21H INC SI LOOP F MOV DL

21、,10 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,STR2 ;输出字符串PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU: MOV AH,9INT 21H MOV CX,16 MOV SI,0 G: RCL BX,1;将平均数转换为二进制串 JNC H ADD STR1+SI,1;假如不为0就将其加1变成1ASCII码值 H: MOV DL,STR1+SI;将二进制串逐一输出 MOV AH,2 INT 21H INC SI LOOP G MOV AH,4CH INT 21HCODES ENDS END

22、 START运行结果: 四试验感想和收获 此次试验相较于第一次难度增大了很多, 本人花了大约12个小时才做完。第一个练习很简单, 从编译到连接都是一次经过, 在用DEBUG调试发觉结果却实正确。不过在做第二个练习时我碰到了困难, 完全没有思绪。当初不知道怎么对一位一位数据进行操作, 在看书过程中无意中发觉了循环指令, 我才意识到用SHL指令能够实现这个功效。第三个联络关键考查我们对中止指令了解程度, 我实现地是一位数加法, 不过以后老师发给了我们她自己编版本, 我感慨道编程真是一门大学问, 要考虑到多种多样功效, 人机互动, 可能犯错地方。这都是需要大量实践积累才行。在编写冒泡排序法这个程序时

23、我碰到了很多困难。起初在编写一段循环指令时, 未把寄存器CX入宅, 所以影响了其她部分循环次数, 造成结果犯错。所以以后编程时一定要把有用信息入宅, 预防被其她指令所改变。在输出字符时, 必需记得把要输出字符值转变成ASCI码, 我期初输出数字时就忘记了这一步造成出了很多差错。同时在将二进制数转变成BCD吗输出时能够经过除10来实现,将得到商继续除10, 而得到余数就是个位值, 同理, 再次除10得到余数就是10位。所以经过合适此处出发能够将二进制数转变为BCD码。经过亲身实践这次试验, 对汇编语言编程有了初步认识, 也体会到了编程整个过程。从读题, 设计程序框架到写代码, 步步承接, 同时将

24、课堂上所学知识利用起来, 在加深了解同时也发觉了自己很多不懂地方, 于是经过自己查资料, 问老师最终将程序一步步地调试正确得出期望结果, 那种自豪和满足感油然而生。 第三次试验 8253定时器/计数器与接口试验 乐曲程序 一功效说明计算机是怎样产生音乐和声响呢?原来在计算机中有一个可编程时间间隔定时器8253, 它能依据程序提供计数值和工作模式, 产生多种形状和多种频率计数/定时脉冲, 提供给系统各个部件使用。它还能够产生不一样频率脉冲作为扬声器声源。在8253定时器内部有3个独立工作计数器: Counter0, Counter1, Countre2, 每个计数器都分配有一个端口地址,分别是4

25、0H, 41H, 42H。8253内部还有一个公用控制寄存器, 端口地址为43H, 端口地址输入到8253CS, A1, A0端, 分别对三个计数器和控制器寻址。对8253编程时, 先要设定控制字, 以选择计数器, 确定工作模式和计数值格式, 每个计数器由三个引脚与外部联络, CLK为时钟输入端, GATA为门控制信号输入端, OUT为计数/定时信号输入端。每个计数器是以倒计数方法计数, 也就是说, 从计数初值开始逐次减1, 直到减为0为止。端口地址与计数器关系: 40H选中计数器0: 作为定时器为系统日时钟提供计时基准41H选中计数器1: 作为定时器使用42H选中计数器2: 用来控制扬声器发

26、声43H公用控制器: 分别对三个寄存器和控制器寻址那么, 怎样触动扬声器发出声音呢?原来PC机主音箱上装有一只小喇叭, 由定时器8253和并行接口芯片8255(可编程外围接口芯片)控制其发声, 8255包含三个8位寄存器, 两个用于输入功效, 一个用于输出功效。输入寄存器分配I/O端口地址为60H和62H, 输出寄存器分配I/O端口地址为61H。8253定时器计数器2连接到扬声器, 其电路以下: 8253 DRIVER 1.9318MHZ CLK 喇叭 OUT2 8255 PB0 GATE2 PB1 装入计数器2计数初值为533H(1.19318MHz/896Hz=1331=533H),这么,

27、 得到控制字为10110110B=0B6H, 即选中计数器2, 读/写, 工作方法三(方波发声器), 二进制。计数器2初始化程序为: MOV AL,0B6H OUT 43H,AL 1)计算计数值程序段: MOV DI, 给定频率 MOV DX, 12HMOV AX, 34DCHDIV DIAX中即为计数值。2)打开扬声器发声, 8255PB0, PBI送出高电平: IN AL , 61HOR AL , 3OUT 61H , AL3)关闭扬声器, 停止发声: IN AL , 61HAND AL , 0FCHOUT 61H, AL 两只老虎音频表定义在数据段中, 以下: STACK SEGMENT

28、 DW 100 DUP(? )STACK ENDSDATA SEGMENTMUSIC DW 2 DUP(262,294,330,262) ; 频率表,1231;1231 DW 2 DUP(330,349,392) ;345;345; DW 2 DUP(392,440,392,349,330,262) ;565431;565431 dw 2 dup(294,196,262),0 ;251;251,0表示结束 TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 ;节拍表 DW 2 DUP(120*50,120*50,120*50,120*50,25

29、0*50,250*50) DW 2 DUP(250*50,250*50,500*50)N EQU 32 ;32个音符DATA ENDS二试验目: 学习8253计数器2输出方波信号用以驱动扬声器发声原理, 经过程序设置计数器2输出波形频率和延续时间, 控制扬声器音调和发生长短。三.试验内容: 1.设计程序让微机演奏一段两只老虎乐曲。2.思索怎样让PC机演奏一遍, 两遍以及数遍这段两只老虎乐曲, 并修改程序实现。四.试验汇报: 整理出运行正确源程序清单(加以汉字注释), 并给出具体程序步骤图。三程序代码DATAS SEGMENTBG DB 0AH,0DH,”TWO TIGER:$” FREQ DW 2 DUP(262,294,330,262) DW 2 DUP(330,349,392) DW 2 DUP(392,440,392,349,330,262) DW 2 DUP(294,196,262),0 ; 频率表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1