汇编实验报告_第1页
汇编实验报告_第2页
汇编实验报告_第3页
汇编实验报告_第4页
汇编实验报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。2学会使用EDIT、MASM、LINK、DEBUG等软件工具。 3熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。二、熟悉汇编语言程序调试环境1汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。设定源程序的文件名为ABC。DATASEGMENT BUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUF D

2、ATAENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:PUSH DS XOR AX,AX PUSH AXMOV AX,DATA MOV DS,AX MOV BX,OFFSET BUF MOV CX,CN DEC CX MOV AL,BX INC BX LP: CMP AL,BX JBE NEXT MOV AL,BX NEXT:INC BX DEC CX JNZ LP MOV AH,4CH INT 21H CODEENDS END START 键入以下命令:C:EDIT ABC.ASM此时屏幕的显示状态如图1所示。图1 用EDIT编辑ABC.ASM程序窗

3、口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。2将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。(3)若程序中使用了宏指令,则汇编程序将展开宏指令。源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。图2 MASM宏汇编程序工作窗口汇编过程的错误分警告错误(Warning Errors)和严重错误(Severe Errors)两种。其中警告错误是指汇编程

4、序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。3用连接程序生成可执行程序文件经汇编以后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE)。连接过程如图3所示。图3 LINK连接程序工作窗口上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。连接以后

5、,便可以产生可执行程序文件(.EXE文件)。4程序的执行当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。如:C:ABC 本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行的结果。实验二(2)分支及循环程序设计一、实验目的及要求熟练掌握转移指令,掌握分支程序设计的原理和方法 , 重点掌握各种分支程序中形成条件和判断条件的方法和技巧。掌握循环程序设计的方法(单重循环结构和两重循环结构),正确分配与使用寄存器,根据实际问题选择控制循环的方法(循环次数已知和循环次数未知)。二、实验内容 编写下列程序并调试通过。1.通过键盘输入一个小写字母,找出对应的前导字母和后续字

6、母,再按顺序显示这三个字母。2.编写一个程序,要求比较数组ARRAY中的三个16位补码,并根据比较结果在终端上显示如下信息:1) 如果三个数都不相等,显示0;2) 如果三个数都两个相等,显示1;3) 如果三个数都相当,显示2。3.编写一个程序,要求通过键盘接收一个个位数N,然后显示N个字母$。4.从键盘上输入一个8位二进制数,在显示器上显示其相应的十六进制数。(教材P170 习题5)5.要求从键盘上接收一个4位十六进制数,然后再显示器上显示其对应的16位二进制数。6.用15行*16列的表格形式显示ASCII码为10H-FFH的所有字符。三、实验设计方案说明实验1流程图:实验完整代码:DATAS

7、 SEGMENT ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段START: MOV AX,DATAS MOV DS,AX ;初始化数据段的段地址 MOV CL,3L: MOV AH,01H ;输入一个小写字母,常用DOS功能调用,入口参数为AH INT 21H CMP AL,61H;对输入进行判断,确保输入的字符为az JB L CMP AL,7AH JA L MOV BL,

8、AL MOV DL,0DH;回车 MOV AH,02H ;常用DOS功能调用,入口参数为AH INT 21H MOV DL,0AH;换行 MOV AH,02H INT 21H SUB BL,01H;按顺序输出三个字母 CMP BL,61H ;判断前导字母是否合法 JNB L1ADD BL,1AHMOV DL,BLMOV AH,02HINT 21HSUB BL,19HJMP L2L1:MOV DL,BL ;输出录入字母的前导字母MOV AH,02HINT 21HINC BLL2:MOV DL,BL ;输出录入字母本身MOV AH,02HINT 21HINC BLCMP BL,7AH ;判断后续字

9、母是否合法JNA L3SUB BL,1AHL3:MOV DL,BL ;输出录入字母的后续字母MOV AH,02H ;常用DOS功能调用,入口参数为AHINT 21H MOV AH,4CH INT 21HCODES ENDS END START实验2实验流程图:实验完整代码:DATA SEGMENT ARRAY DW 1,2,3 ;为数组中的三个元素各分配一个字的存储空间并初始化DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段START: MOV AX,DATAMOV DS,AX;初始化数据段的段地址M

10、OV AX,ARRAYMOV BX,ARRAY+2MOV CX,ARRAY+4 CMP AX,BX; JE L CMP BX,CX JE L1 CMP AX,CX JE L1 MOV DL,30H JMP EXITL: CMP BX,CX JNE L1 MOV DL,32H JMP EXIT L1: MOV DL,31HEXIT: MOV AH,02HINT 21H MOV AH,4CH INT 21H CODE ENDS END START实验3流程图:实验完整代码:DATAS SEGMENT ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STA

11、CKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段START: MOV AX,DATAS MOV DS,AX ;初始化数据段的段地址L: MOV AH,01H;输入一位数字 INT 21H CMP AL,30H;对输入进行判断 JB L CMP AL,39H JA L MOV CL,AL MOV DL,0DH;回车 MOV AH,02H INT 21H MOV DL,0AH;换行 MOV AH,02H INT 21H SUB CL,30H JZ L2L1: MOV DL,24H

12、;输出相应个数的$MOV AH,02HINT 21HSUB CL,01HJNZ L1L2:MOV AH,4CH INT 21HCODES ENDS END START实验4流程图:实验完整代码:DATAS SEGMENT ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV BL,0 MOV CL,8L:SHL BL,1;输入8位二进制数,并保存在BL中MOV AH,01H

13、 INT 21H CMP AL,30H JZ L1OR BL,1 L1: DEC CLJNZ LMOV DL,0DH;回车MOV AH,02HINT 21HMOV DL,0AH;换行MOV AH,02HINT 21HMOV DH,0MOV CX,0204HL2:SHL BL,1 ;输出2位十六进制数JC L3SHL DH,1JMP L4L3: SHL DH,1ADD DH,1L4:DEC CLJNZ L2 ADD DH,30HCMP DH,39HJBE L5ADD DH,07HL5:MOV DL,DHMOV AH,02HINT 21HMOV DH,0MOV CL,4DEC CHJNZ L2 M

14、OV AH,4CH INT 21HCODES ENDS END START实验5实验完整代码:DATAS SEGMENT ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV BX,0 MOV CX,0404HL1: MOV AH,01H;输入4位十六进制数INT 21HSUB AL,30HCMP AL,0AHJB L2SUB AL,07HL2: SHL BX,CLOR B

15、L,ALDEC CHJNZ L1MOV DL,0DH;回车MOV AH,02HINT 21HMOV DL,0AH;换行MOV AH,02HINT 21HMOV CX,16L3: SHL BX,1;输出16位二进制数 JC L4 MOV DL,30H MOV AH,02HINT 21HDEC CXJNZ L3JMP EXITL4: MOV DL,31HMOV AH,02HINT 21HDEC CXJNZ L3EXIT:MOV AH,4CH INT 21HCODES ENDS END START实验6实验完整代码: DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGM

16、ENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVDL,10HMOVCX,0FHL1:MOVBX,10HL2:MOVAH,02HINT21HINCDLPUSHDXMOVDL,MOVAH,02HINT21HPOPDXDECBXCMPBX,00HJNZL2PUSHDXMOVDL,0DHMOVAH,02HINT21HMOVDL,0AHMOVAH,02HINT21HPOPDXDECCXCMPCX,00HJNZL1MOVAH,4CHINT21HCODESENDSE

17、NDSTART四、测试及评估 实验1运行结果 实验2运行结果 实验3运行结果 实验4运行结果 实验5运行结果 实验6运行结果五、设计心得这次试验过程中出现的问题很多,最开始是对过程的不熟悉以及第一次使用这个asm软件导致编译运行老是出错,最后是代码上的错误。所以通过这次试验不仅让我懂得对汇编操作的基本过程熟悉了,更多的是对整个编写代码的流程熟悉了。中间总是出现错误时感觉不知道该怎么办了,但是觉得这种代码也并不是很难,应该可以实现,所以通过请教同学、翻阅资料、经过不断地改动之后最终让正确的实验结果出现。所以这次试验还让我对做实验增加了耐心,因而这次收获很多。实验二 子程序设计一、实验目的及要求理

18、解CALL和RET指令,以及子程序的调用与返回过程;掌握子程序的结构,及相关的设计方法;能合理地分解程序功能,有效地支持功能的重用。二、实验内容编写下列程序并调试通过。从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最后显示这三类字符的计数结果(采用子程序BINIDEC)(子程序BINIDEC 输入:16位二进制数 输出:十进制数, 功能:将16位二进制数转换成十进制数 )三、实验设计方案说明实验完整代码:DATASSEGMENTALPHADBThetotalofalphais:,$NUMBERDBThetotalofnumberis:,$OTHERDBThetotal

19、ofotheris:,$BUFDB7DUP(0),$CRLFDB0DH,0AH,$DATASENDSCODESSEGMENTMAINPROCFARASSUMECS:CODES,DS:DATASSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATASMOVDS,AXMOVBX,0MOVSI,0MOVDI,0INPUT:MOVAH,01HINT21HCMPAL,0DHJEDISPCMPAL,30HJAEL1OTHERS:INCDIJMPSHORTINPUTL1:CMPAL,39HJAL2INCSIJMPSHORTINPUTL2:CMPAL,41HJAEL3JMPSHORTOTHE

20、RSL3:CMPAL,5AHJAL4INCBXJMPSHORTINPUTL4:CMPAL,61HJAEL5JMPSHORTOTHERSL5:CMPAL,7AHJASHORTOTHERSINCBXJMPSHORTINPUTDISP:LEADX,CRLFMOVAH,09HINT21HLEADX,ALPHACALLDISPLAYLEADX,NUMBERMOVBX,SICALLDISPLAYLEADX,OTHERMOVBX,DICALLDISPLAYRETMAINENDPDISPLAYPROCNEARMOVAH,09HINT21HCALLBINIDECLEADX,CRLFMOVAH,09HINT21H

21、RETDISPLAYENDPBINIDECPROCNEARPUSHAXPUSHSIPUSHDXMOVAX,BXMOVCX,10LEASI,BUF+6EXCHANGE:MOVDX,0DIVCXADDDL,30HMOVSI,DLDECSIORAX,AXJNZEXCHANGELEADX,BUFMOVAH,09HINT21HPOPDXPOPSIPOPAXRETBINIDECENDPCODESENDSENDMAIN四、测试及评估五、设计心得通过本次实验,我对子程序结构的设计方法有了一定的认识,子程序相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相

22、同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序的形式,一边需要时可以调用它。实验三(1) 熟悉接口技术实验环境一、学习和熟悉实验平台相关资料:附件1 TD-PITE用户手册。二、完成下列实验内容 对实验平台提供的时钟脉冲信号(1 MHZ)进行分频,分频后产生的脉冲信号(1HZ)输出到一个发光二极管上(发光二极管的点亮、熄灭交替进行)。1) 画出硬件线路图。在TD-PITE实验平台上,计数器0的GATE0已连接+5V,计数器2用于支持串行通讯(用户不能使用)。XD0:XD7XA1XA2IOY0*IOW*IOR*CLK系 统 总 线D0:D7A0A1CS*WR*RD*CLK0GATE

23、0OUT0CLK1GATE1OUT1+5V+5V接发光二极管或示波器Intel 8253/8254IOY0* 地址范围:0600H 063FH*实验平台上每个I/O端口地址均为偶数。2)写出初始化程序。CODE SEGMENT ASSUME CS:CODESTART: MOV DX, 0606H MOV AL, 36H ; 计数器0工作方式控制字 OUT DX, AL MOV DX, 0600H MOV AX, 1000 ; 计数器0计数初值 OUT DX, AL MOV AL, AH OUT DX, ALMOV DX, 0606H MOV AL, 76H ; 计数器1工作方式控制字 OUT

24、DX, AL MOV DX, 0602H MOV AX, 1000 ; 计数器1计数初值 OUT DX, AL MOV AL, AH OUT DX, AL AA: JMP AA CODE ENDS END START 2) 在实验平台上连线,调试,演示。实验三(2) 定时计数器的应用一、实验基本内容及要求 1. 在上述实验方案中,采用8254计数器0控制声音频率,采用软件延时的方法控制声音的节拍(声音长度)。2. 修改上述实验方案,采用8254计数器1控制声音节拍。画出实验方案的硬件连接图,并设计相关的控制程序;在实验平台上调试通过。二、实验设计方案说明流程图:实验参考例程(SOUND.ASM

25、)IOY0EQU06C0HMY8254_COUNT0EQUIOY0+00H;8254计数器0端口地址MY8254_COUNT1EQUIOY0+02H;8254计数器1端口地址MY8254_COUNT2EQUIOY0+04H;8254计数器2端口地址MY8254_MODEEQUIOY0+06H;8254控制寄存器端口地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENTFREQ_LISTDW371,495,495,495,624,556,495,556,624;频率表DW495,495,624,742,833,833,833,742,624DW6

26、24,495,556,495,556,624,495,416,416,371DW495,833,742,624,624,495,556,495,556,833DW742,624,624,742,833,990,742,624,624,495DW556,495,556,624,495,416,416,371,495,0TIME_LISTDB4,6,2,4,4,6,2,4,4;时间表DB6,2,4,4,12,1,3,6,2DB4,4,6,2,4,4,6,2,4,4DB12,4,6,2,4,4,6,2,4,4DB6,2,4,4,12,4,6,2,4,4DB6,2,4,4,6,2,4,4,12DATA

27、ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,MY8254_MODE;初始化8254工作方式MOVAL,36H;定时器0、方式3OUTDX,ALBEGIN:MOVSI,OFFSETFREQ_LIST;装入频率表起始地址MOVDI,OFFSETTIME_LIST;装入时间表起始地址PLAY:MOVDX,0FH;输入时钟为1MHz,1M=0F4240HMOVAX,4240HDIVWORDPTRSI;取出频率值计算计数初值,0F4240H/输出频率MOVDX,MY8254_COUNT0OUTDX,AL;装入计数初值

28、MOVAL,AHOUTDX,ALMOVDL,DI;取出演奏相对时间,调用延时子程序CALLDALLYADDSI,2INCDICMPWORDPTRSI,0;判断是否到曲末?JEBEGINJMPPLAYDALLYPROC;延时子程序D0:MOVCX,0010HD1:MOVAX,0F00HD2:DECAXJNZD2LOOPD1DECDLJNZD0RETDALLYENDPCODEENDSENDSTART实验四(1) 并行接口的应用 一、实验内容及要求见附件2 80X86微机原理及接口技术实验教程 (P83-87)二、实验设计方案说明实验程序清单 SSTACK SEGMENT STACK DW 32 D

29、UP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV DX, 0646H MOV AL, 90H OUT DX, AL AA1: MOV DX, 0640H IN AL, DX CALL DELAY MOV DX, 0642H OUT DX, AL JMP AA1 DELAY: PUSH CX MOV CX, 0F00H AA2: PUSH AX POP AX LOOP AA2 POP CX RET CODE ENDS END START 实验程序清单 SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK

30、ENDS CODE SEGMENT ASSUME CS:CODE START: MOV DX, 0646H MOV AL, 80H OUT DX, AL MOV BX, 8001H AA1: MOV DX, 0640H MOV AL, BH OUT DX, AL ROR BH, 1 MOV DX, 0642H MOV AL, BL OUT DX, AL 实验四(2) D/A转换器的应用一、实验内容及要求 见附件2 80X86微机原理及接口技术实验教程 (P104-107)1.实验接线如下图所示,按图接线。2.编写实验程序,经编译、链接无误后装入系统。3.单击按钮,运行实验程序,用示波器测量DA

31、的输出,观察实验现象。4.用示波器观察波形的方法:单击虚拟仪器菜单中的按钮或直接单击工具栏的按钮,在新弹出的示波器界面上单击按钮运行示波器,观测实验波形。5.自行编写实验程序,产生三角波形,使用示波器观察输出,验证程序功能。6. 产生方波程序见(DA2.ASM),锯齿波见(DA1.ASM)二、实验设计方案说明 产生方波的代码:SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV AX, 00H ; 产生方波 MOV DX, 600H AA1: MOV AL, 00H OUT DX, AL CALL DELAY MOV AL, 7FH OUT DX, AL CALL DELAY JMP AA1 DELAY: PUSH CX MOV CX,500H AA2: PUSH AX POP AX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论