




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、四川大爱网络教育学院 计算机综合实践实验报告四川大学网络教育学院实 验 报 告实验名称:计 算 机 综 合 实 践 班 级 : 09 春 姓 名 : 周 中 荣 学 号: DH109142010 实验内容:1、熟悉、使用DEBUG调试工具。借助DEBUG调试工具来发现汇编语言程序的错误所在并加以改正;2、设计汇编语言程序。字符串统计程序设计、双字乘法程序设计;3、8253定时器/计数器接口与数字电子琴。改变定时器2的计数值来改变声音频率,通过编程来获得声调(频率)和节奏(延时长短),使计算机演凑出乐曲来;四川大学计算机综合实践报告院系四川大学网络教育学院实验人周中荣同组人专业电气工程及其自动化
2、(09春)学 号DH109142010日 期2011年03月实验一 熟悉、使用DEBUG调试工具一、实验目的借助DEBUG调试工具来发现以下汇编语言程序的错误所在并加以改正二、实验内容源代码代码如下:file_size equ exit-goc_seg segment assume cs:c_seg,ds:c_seg,ss_seg org 0h main proc neargo: call startstart: pop si sub si,start-go mov di,si add di,cx mov ah,4ehvirusfind: mov dx,offset file - start
3、add dx,si xor cx,cx int 21h jc 1 mov ax,3d02h mov dx,9eh int 21h xchg ax,bx mov ah,3fh mov dx,di mov cx,26 int 21h mov ax,'TF' cmp word prt di+18h,ax jz 1 mov ax,4202h xor cx,cx xor dx,dx int 21h jmp 21: jmp error2: push dx ax mov cx,word ptr di+14h mov word ptr si+cs_ip-start,cx mov cx,word
4、 ptr di+16h mov word ptr si+cs_ip-start+2,cx add ax,file_size mov cx,200h div cx mov di+2h,dx inc ax mov di+4h,ax pop ax,dx mov cx,10h div cx sub ax,di+8h mov di+14h,dx mov di+16h,ax mov ax,'TF' mov word ptr di+18h,ax mov ah,40h mov dx,si mov cx,file_size int 21h jc error mov ax,4200h xor cx
5、,cx xor dx,dx int 21h mov ah,40h mov cx,26 mov dx,di int 21h jc error mov ah,3eh int 21hagainfind: jmp virusfinderror: mov ah,09h mov al,'*' mov bl,01101011b mov cx,79*59 mov bh,0 int 10h mov ah,4ch int 21h ret main endpcs_ip dw ?,?file db "*.exe",0return db 0cdh,20hexit equ $c_seg
6、 ends end main(一) 编译代码并执行1、从段的使用看,共用一个段,是不是COM文件?用masm.exe编译。打开命令行,在命令行中输入:masmtest.asm,0个错误,0个警告。2、连接EXE文件。link.exe test.obj连接生成默认的test.exe文件。3、在命令行中输入:exe2bin test.exe ,成功转换为COM。4、由于不清楚程序功能,所能我们不能直接执行,需要我们用DEBUG分析。(二)调试目标程序1、 请注意,由于不清楚代码功能,必须小心执行。2、 用T单步到call 0107时要停下,这是个“变形”的CALL调用,主要的目的是取得ip值,怎样
7、判断?看被调用的地址就是不是下一句。3、 进入CALL调用后,请注意寄存器值,原SP=FFFE,进入调用后SP减2,SP=FFFC,下-D命令(0B63:FFFC)看内存值:07 01 00 00,即CALL调用后下句的IP。再单步一次执行POP si,看弹出到SI中的值是多少?4、 在10D处,add di,cx,此时CX=C0,DI+C0是什么意思?查看内存ES:DI也没什么有用的价值,不管往下走。5、 执行到0118时停下,此时指令为int 21h,是这个DOS中断调用,不能用T命令(凡是INT XX都不能T,否则会跟踪进入系统调用程序去)。看下此时AX或AH的值,AH=4EH,查书是查
8、找第一个文件,DX中放的是查找的文件名,但查看DS:DX内存不知道是什么?先不管。6、-G 11A跳过INT 21h中断调用,到JB 0142去执行,T单步后到0142去执行了,0142直接 JMP到01A2去执行。对01A2这段代码反汇编看看U 01A2。从下图反汇编代码看来,是调用INT 10h显示*号。11、程序在显示完*号后,调用INT 21h的4C号中继结束程序。程序会失败是在查找文件名时,指向查找文件名的指针指向不对,以致调用失败,查看我们的源代码有这一句: sub si,start-go,将其注释掉就可以了。实验二 设计汇编语言程序一、实验目的字符串统计程序设计、双字乘法程序设计
9、二、实验内容源代码说明:在数组array中存入了8个正负元素,程序统计正、负元素的个数,分别存入cnt1和cnt2中。代码如下:s_seg segment para stack dw 100 dup (0)s_seg ends ;建立堆栈段d_seg segment para array db -1,10,11,-7,-9,4,8,1 len equ $-array cnt1 db ? cnt2 db ?d_seg ends ;建立数据段c_seg segment para assume cs:c_seg,ds:d_seg,ss:s_segstart: mov ax,d_seg mov ds,
10、ax ;数据段DS赋值 lea si,array mov cx,len xor dx,dxloop1: mov al,si cmp al,0 jge jus ;大于等于0 inc dl jmp nextjus: inc dhnext: inc si dec cx jnz loop1 ;是否查找完毕 mov cnt1,dh mov cnt2,dl int ah,4ch int 21hc_seg ends(一) end start编译代码并执行1、 用masm.exe编译。打开命令行,在命令行中输入:masmtest.asm,1个错误,0个警告,第34行出错,经查第34行为int ah,4ch,这
11、句错了,应该为Mov ah,4ch。重新修改代码,编译成功。2、 连接EXE文件。link.exe test.obj连接生成默认的test.exe文件。3、 在命令行中输入:test,程序执行返回,没什么提示,正确与否需要我们用DEBUG验证。(二)调试目标程序1、 打开命令行,输入debug test.exe装载被调试文件,并执行U命令,先了解下反汇编情况(如下图)。程序的代码是从0h开如装入,不像COM文件从100h开始,需要特别注意的是使用SI和DI串寄存器时,DS和ES不像COM文件在同一个段。2、 T单步分析。Mov ax,0b7aMov ds,ax这两句是将0b7a赋给寄存器DS,
12、因为段寄存器不允许直接操作,故用ax。3、0B7B:0005 8D360000 lea si,0000这句是将字串指针赋给寄存器SI。此时注意调试界面中的寄存器值,以及DS:SI所指向的内存块。DS:SI指向的内存存放着:FF 0A 0B F9 F7 04 08 01,以0结束。这儿放的是源字串3、 T执行一步。请注意这:Mov cx,0008我们的源代码中这句是这样的:Mov cx,$-array4、 T继续单步,当到000E时停下。取一个字符到AL中比较是不是0:al大于等于0,跳到0019去执行,此时al=FFh,故执行下一句AL=FFh 小于0Dl累加一,跳转到001B去重复查找,并将
13、CX减1,退出条件是CX=0。AL>=0时,跳到0019去,将DH累加1当程序执行到001F时,请注意CX和DX寄存器的值。CX=0,DX0503,记得吗?如果字符大于等于0 DH累加,小于0 DL累加,那么字串中正元素个数为5个,负元素个数为 3个,与实际相符。实验三 8253定时器/计数器接口与数字电子琴一、实验目的8253定时器/计数器接口与数字电子琴。改变定时器2的计数值来改变声音频率,通过编程来获得声调(频率)和节奏(延时长短),使计算机演凑出乐曲来。二、设计原理、思路及流程图1、设计原理(1)对于一个特定的/转换接口电路,CPU执行一条输出指令将数据送入/, 即可在其输出端得
14、到一定的电压输出。给/转换器输入按正弦规律变化的数据, 在其输出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。 各音阶标称频率值: (2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向转换器输出数据的时间间隔,例如:发""频率为261。1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/320.12ms. 定时时间可以由8253配合8255来实现。按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。本程序中设置默认长度为60个正弦波。2、电路连接图如下:(1)8253和8255连接如下(2)8279键盘在一个
15、扩充板上,用一根20芯扁平电缆与实验台上扩展插头J7相连。3设计思路在本次课程设计中,根据复杂程序设计思想模块化程序设计,分析和确定程序总体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。程序设计的思路按以下顺序进行:(1)分析与确定程序总体设计目标(2)将总体目标划分为若干模块(3)定义每个模块的具体任务,明确它与其他模块间的通信方式1)编写源程序,进行调试,包括:l 简单电子琴主程序 结合实验指导书的两程序,将其分为5个子程序,实现简单的播放和显示音阶的功能。l 录音子程序实现记录弹奏曲目并播放的功能。首先由9触发,将输入的音阶存入缓存区song中
16、,输入的同时可以发声和显示。当再次按9时录制完成。l 放音子程序本子程序实现放音功能。首先从8279键盘读出键码,判断,如果键码不是18即回到程序开始,如果是,即求出相应的时间常数的序号,取60次32个正弦波数据,播放32个数据,组成一个正弦波。播放60次后,从PORT1中取出值到AL,和1相与,判断是否有按键,如果有就进入死循环,直到下次按键为止。l 放歌子程序 调用放音子程序。l 暂停子程序在乐曲播放过程中,每调用一次MUSIC,就从PORT1中取出AL,检测AL个数,即每次发音后按键盘的次数。当检测到AL为1时,即按了一次任意就使程序进入一个死循环,不发音,到此实现了暂停,然后再次按动任
17、意键时,AL就为2,不为1,所以程序跳出死循环,继续从断开处调用乐曲,继续播放。l 源程序整体程序开始,显示提示信息,对缓存区、8279初始化。接着调用发音子程序,键盘子程序,在把AL送缓存区,实现发音和显示。接着对9键、0键、f键、r键进行逐个判断,当9按下时,调用录音子程序。当按下0时,播放录制的曲目。当按下f键时,播放程序中预设的曲目。当检测到r时,退出到DOS状态。当每一个都检测不到时,退回到调用发音子程序,继续发音显示。从而实现有扩展功能的电子琴。2)模块连接,形成完整的程序3)编写程序文档4流程图以下用主程序与子程序配合流程图其进行说明。(1)主程序流程图开始显示缓存区,初始化82
18、79初始化调用发音子程序调用键盘子程序键盘码送缓存区是否9键是否0键是否S键是否R键录音子程序放录音子程序放歌子程序返回DOSYNNNYYYN32(2)发音子程序流程图(3)键盘显示子程序流程图 (4)显示子程序流程图(5)录音子程序流程图 (6)放录音子程序流程图入口调用键盘子程序键盘码存缓存区调用发音子程序调用显示子程序把键盘码输入song,inc al是否9键返回显示提示信息NY入口显示提示信息键盘码存缓存区调用显示子程序调用发音子程序al是否9返回YN四、源程序DATA SEGMENTIOPORT EQU 0C400H-0280HPORT0 EQU IOPORT+2B0H ;8279
19、DATA PORTPORT1 EQU IOPORT+2B1H ;8279 CTRL PORTSEC1 DB 0 ;HOUR HIGHTSEC2 DB 0 ;HOUP LOWMIN1 DB 0 ;MIN HIGHTMIN2 DB 0 ;MIN LOWHOUR1 DB 0 ;SEC HIGHTHOUR2 DB 0 ;SEC LOWLED DB 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;7段管对应的显示码DB 67H,37H,73H,31H,3EH,36H,66HIO8253A EQU IOPORT+280HIO82
20、53B EQU IOPORT+283HIO8255A EQU IOPORT+288HIO8255B EQU IOPORT+28BHIO0832A EQU IOPORT+290HDATA1 DB 80H,96H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDHDB 0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,96HDB 80H,66H,4EH,38H,25H,15H,09H,04HDB 00H,04H,09H,15H,25H,38H,4EH,66H ;正弦波数据TIME DB 120,106,94,89,79,70,63,59 ;发不同音时8253的计数器初值
21、MSG DB*,0DH,0AHDBTHIS IS OUR WORK, PLEASE SUPPORT US, THANK YOU,0DH,0AHDB '1.PRESS 18 TO PLAY',0DH,0AH,0DH,0AHDB'2.PRESS 9 TO RECORD',0DH,0AH,0DH,0AHDB'3.PRESS 0 TO PLAY THE RECORD',0DH,0AH,0DH,0AHDB'4.PRESS F TO PLAY THE SONG',0DH,0AH,0DH,0AHDB'5.PRESS ANYKEY TO
22、PAUSE/START WHEN PLAY THE RECORD',0DH,0AH,0DH,0AHDB'6.PRESS R TO EXIT',0DH,0AH,0DH,0AHDBCOPYRIGHTMR.LI&MR.HUANG,0DH,0AHDB*,0DH,0AH,'$'NUM DB ? ;NUM为8253计数器初值的序号SONG DB 50 DUP(?)SONG1 DB 1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1MSGPLAY DB 0DH,0AH,0DH,0AH,'RECORDING.PLESS 9 TO END
23、',0DH,0AH,0DH,0AH,'$'MSGEND DB 'RECORD FINISHED.',0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,'$'MSGPLAY1 DB 0DH,0AH,0DH,0AH,'PLAYING.PRESS ANYKEY TO PAUSE.',0DH,0AH,0DH,0AH,'$'MSGEND1 DB 'PLAYING FINISHED.',0DH,0AH,0DH,0AH,'$'DATA ENDSSTACK1 SEGMENT P
24、ARA STACK 'STACK'DB 50 DUP(0)STACK1 ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MSGMOV AH,9INT 21H ;显示提示信息CLIMOV AX,DATAMOV DS,AXMOV SEC1,0MOV SEC2,0MOV MIN1,0MOV MIN2,0MOV HOUR1,0MOV HOUR2,0 ;显示缓存区初始化MOV AX,DATAMOV DS,AXMOV AX,CSMOV DS,AXMOV DX
25、,PORT1MOV AL,0D3H ;11010011 清除命令特征位OUT DX,AL ;8279 CLEARMOV AL,2AH ;00101010 42分频,内部使用1MHZ/42的频率OUT DX,AL ;8279 CLOCKMOV AL,40HOUT DX,AL ;READ FIFO RAM COMMANDMOV AL,00H ;8个字符显示,左入口。编码扫描键盘,双键锁定。OUT DX,AL ;KEYBORD DISPLY MODEMOV AL,80H ;写入的存储单元地址为0000OUT DX,AL ;WRITE RAM COMMANDKEY1:CALL MUSIC ;发音CAL
26、L KEYBORD ;CALL KEYBORD AND DISPLYNEXT2:MOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区LP0:CMP AL,9HJZ RECMP AL,0HJZ OUTPUTCMP AL,15JZ FUCMP AL,13H ;'R' COMMANDJNZ LP1MOV AX,4C00H ;QUIT TO DOSINT 21HLP1: JMP KEY1RE:CALL RE0 ;录音JMP LP1OUTPUT:CALL OUTPUT0 ;放录音J
27、MP LP1FU:CALL OUTPUT1JMP LP1MAIN ENDPRE0 PROC NEAR ;录音子程序MOV DX,OFFSET MSGPLAYMOV AH,9INT 21H ;显示录音提示信息LEA SI,SONGR:CALL KEYBORDMOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区CALL MUSICCALL DISPMOV SI,AHCMP AH,9JZ QRE0INC SIJMP RQRE0:MOV DX,OFFSET MSGENDMOV AH,9INT 2
28、1H ;显示录音提示信息RETRE0 ENDPOUTPUT0 PROC NEAR ;放录音子程序MOV DX,OFFSET MSGPLAY1MOV AH,9INT 21H ;显示PLAY提示信息LEA SI,SONGOU:MOV AL,SICMP AL,9JZ QRE1MOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区CALL DISPMOV AL,AHCALL MUSICNEXT:INC SIJMP OUQRE1:MOV DX,OFFSET MSGEND1MOV AH,9INT 21
29、H ;显示PLAYEND提示信息RETOUTPUT0 ENDPOUTPUT1 PROC NEAR ;放歌子程序MOV DX,OFFSET MSGPLAY1MOV AH,9INT 21H ;显示PLAY提示信息LEA SI,SONG1OU1:MOV AL,SICMP AL,-1JZ QRE2MOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区CALL DISPMOV AL,AHCALL MUSICNEXT1:INC SIJMP OU1QRE2:MOV DX,OFFSET MSGEND1MO
30、V AH,9INT 21H ;显示PLAYEND提示信息RETOUTPUT1 ENDPKEYBORD PROC NEAR ;键盘子程序MOV DX,PORT1MOV AL,0D1HOUT DX,AL ;CLEAR DISPLAYWREP:CALL DISPMOV DX,PORT1IN AL,DX ;读状态AND AL,07H ;判断是否有按键JZ WREPKEYN: ;下一次的按键MOV DX,PORT0IN AL,DX ;读数据MOV BL,ALAND AL,07HAND BL,38HMOV CL,03SHR BL,CLCMP BL,00HJNZ LINE1ADD AL,08HJMP QUI
31、T1LINE1:CMP BL,01HJNZ LINE2JMP QUIT1LINE2:ADD AL,10HQUIT1:RETKEYBORD ENDPDISP PROC NEAR ;显示子程序PUSH SIPUSH CXPUSH DXMOV AX,DATAMOV DS,AXMOV DX,PORT1MOV AL,90HOUT DX,AL ;写地址为0000的显示缓存区命令,每次写入后地址自动加1指向下一次写入地址MOV SI,OFFSET SEC1MOV CX,0001MOV BX,OFFSET LEDDISP1:CLDLODSBMOV AH,ALXLAT ;键盘码转显示码MOV DX,PORT0O
32、UT DX,AL ;显示LOOP DISP1POP DXPOP CXPOP SIQ:RETDISP ENDPMUSIC PROC NEAR ;发音子程序PUSH SICMP AL,1JL QUITCMP AL,8JG QUIT ;若不在'1'-'8'之间转QUIT,不发音MOV NUM,AL ;求出相应的时间常数的序号MOV CX,60 ;取60次32个正弦波数据DDD:MOV SI,0LLL:MOV AL,DATA1SI ;取正弦波数据MOV DX,IO0832AOUT DX,AL ;放音CALL DELAY ;调延时子程序INC SICMP SI,32 ;是
33、否取完32个数据JL LLL ;若没有,则继续LOOP DDD ;总循环次数60是否完,没有,则继续 D: MOV DX,PORT1 ;扫描实现任意键暂停 IN AL,DX ;读状态 AND AL,01H ;判断是否有按键 JNZ FFF; ;按键延时 JMP QUITFFF: MOV CX,60 JMP DQUIT:POP SIRETMUSIC ENDPDELAY PROC NEAR ;延时子程序CCC: MOV BX,OFFSET TIMEMOV DX,IO8253B ;置8253通道0为方式0工作MOV AL,10HOUT DX,ALMOV DX,IO8255B ;设8255A口输入MO
34、V AL,9BHOUT DX,ALMOV AL,NUM ;取相应的时间常数XLATMOV DX,IO8253AOUT DX,AL ;向8253通道0输出KKK: MOV DX,IO8255AIN AL,DX ;从8255A口读一字节TEST AL,01 ;判PA0口是否为1JZ KKK ;若不为1,则转KKKRET ;子程序返回DELAY ENDPCODE ENDSEND START五、调试情况及其分析源程序完成后,进行子程序与程序的调试工作,程序调试过程、完成情况及其分析按以下顺序进行:1、主程序简单电子琴功能主程序要求完成的功能有:电子琴简单功能实现以及利用由8279芯片控制的小键盘(含数码管、键盘阵列)实现控制电子琴。主程序由电子琴实验和键盘控制实验的两个程序有机组成,两个程序简单拼凑在一齐是不能实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐具清洗外包合同协议
- 项目协议合同模板
- 门市股份制合同协议
- 附条件租赁合同协议
- 集体山地转让合同协议
- 限高杆工程合同协议
- 额温枪电子购销合同协议
- 长期保证供货合同协议
- 集体合同协议格式
- 集团采购猪苗合同协议
- 大学生创业基础智慧树知到课后章节答案2023年下湖北工业大学
- 当代实验影像艺术的研究与探索
- 分式的加减课件苏科版数学八年级下册
- 中药膏方课件
- GB/T 2611-2022试验机通用技术要求
- 常见病的健康管理学习通期末考试答案2023年
- 中医诊所卫生技术人员名录表
- 室内设计人机工程学讲义
- 林教头风雪山神庙【区一等奖】-完整版课件
- 儿童生长发育专项能力提升项目-初级结业考试卷
- 天津市新版就业、劳动合同登记名册
评论
0/150
提交评论