已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计实验指导书微机原理及汇编语言程序设计实验指导书计算机实验中心目 录实验一 DEBUG的使用142实验二 数制转换程序146实验三 数组排序程序147实验四 数据的输入与输出程序149实验五 子程序设计150实验六 宏调用程序设计151实验一 DEBUG的使用【实验目的】1学习使用DEBUG调试程序的各种命令。2掌握8088/8086指令系统-数据传送指令、算术指令。3掌握用DEBUG调试程序的方法。4掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。5掌握内存操作数及寻址方法。6掌握汇编语言伪操作:BYTE PTR,WORD PTR。7熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。8掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。【实验性质】验证性实验(学时数:2H)【实验内容】一、DEBUG 命令的使用1.敲 DEBUG 进入 DEBUG 环境,显示提示符 _ 。2.用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。3.用命令 E100 30 31 32 3F 将30H3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?4.用命令 F100 L0F A 将A的ASCII码填入内存,用D命令查看结果。5.用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。6.用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。7.用R命令将AX,BX内容改写为1234H及5678H。8.用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H(4)1284H,5678H(5)A758,347FH二、8088/8086常用指令练习1.传送指令1)用A命令在内存100H处键入下列内容:MOVAX,1234MOVBX,5678XCHGAX,BXMOVAH,34MOVAL,56MOVCX,75ABXCHGAX,CX2)用U命令检查键入的程序,特别注意左边的机器码。3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。2.加减法指令:1)用A命令在内存200H处键入下列内容:MOVAH,34MOVAL,2EADDAL,AHSUBAL,78MOVCX,1234MOVDX,5678ADDCX,DXSUBCX,AXSUBCX,CX2)用U命令检查键入的程序及对应的机器码。3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。思考题: 这次运行还是打入T,行不行?如何单步运行上述小程序?用R命令检查一下IP的内容。注意T命令与IP的关系。3.带进位加减法:1)用A命令在内存300H处键入下列内容,并用U命令检查:MOVAH,12MOVAL,89MOVCH,56MOVCL,98ADDAL,CLADCAH,CHMOVDH,A7MOVDL,58SUBDL,7FSBBDH,342)用T命令逐条运行这些指令,检查并记录有关寄存器及CF内容。3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。4.BCD码加减法1)内容:MOVAL,58ADDAL,25DAA2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。三、内存操作数及各种寻址方式使用: 1)用A命令在内存400H处键入下列内容,并用U命令检查:MOVAX,1234 MOV1000,AXMOVBX,1002MOVBYTE PTRBX,20MOVDL,39INCBXMOVBX,DLDECDLMOVSI,3MOVBX+SI,DLMOVBX+SI+1,DLMOVWORD PTRBX+SI+2,28462)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意:D命令显示结果中右边的ASCII字符及双字节数存放法。思考题: 有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。 四、DEBUG环境下汇编运行程序方法用A命令汇编程序,编程完成将DS:1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS:100A 内存单元中,用DEBUG调试运行该程序,并察看运行结果。内容: MOV CX,0AH MOV AL,0 MOV BX,1000LL: ADD AL,BX INC BX DEC CX JNZ LL MOV BX,AL INT 3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL用实际地址值代替。2)用U命令检查键入的程序及对应的机器码。3)用E1000 01 02 03 04 05 06 07 08 09 0A将1000H开始的前10个内存单元的内容修改为01,02,03,04,050A,用D命令查看修改结果。4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。5)用F2000 L0A 02 03 04 05 0B 将1000H开始的10 个内存单元的内容修改为02,03,04,050B。用D命令查看修改结果。6)用G=100 全速运行上述小程序,用D1000 100F 查看运行结果。思考题: 可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?五、两个多位十进制数相加要求:将下面程序在汇编平台下,完整地进行汇编、连接、运行,然后用DEBUG软件调入可执行文件到内存,用反汇编命令查看实际程序及数据区内容,用t命令逐条执行,以观察各寄存器及数据区内存的数据变化情况,然后使用p命令和g命令执行,以观察执行过程有何特点。将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回以DATA3为首的5个内存单元中(低位在前),并显示相加的结果。实验程序和结果如下:DATASEGMENTDATA1DB 33H,39H,31H,37H,34H ;存放被加数47193,ASCII码形式,低位在前DATA2DB 36H,35H,30H,38H,32H ;存放加数28056,ASCII码形式,低位在前DATA3 DB 5 DUP(?) ;留出5个存放结果的单元DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AXMOV CX,5 ;循环次数置5,5个位要相加5次MOV SI,0 ;SI放地址位移量,每个数的第一字节地址位移量为0CLC ;CF清0,防止第1个字节相加时ADC指令多加CF中可能的1NEXT:MOV AL,DATA1SI ;取被加数一个字节送AL,DATA1偏移地址SI为有效地址ADC AL,DATA2SI ;AL加数对应字节CF(低位相加时可能的进位)结果送ALAAA ;AL中两字节相加的和调整成非压缩的BCD码,进位在CF中MOV DATA3SI,AL ;结果送入DATA3对应字节单元中INC SI ;地址位移量加1指向高一位字节单元 LOOP NEXT ;5次未到,继续循环MOV SI,5 ;显示5个位,SI中的数既是循环次数又作地址位移量DISP:ADD DATA3SI-1,30H ;将结果从高位单元开始把非压缩的BCD码变成ASCII码 MOV DL,DATA3SI-1 ;将ASCII码送DL以满足2号功能调用的规定要求 MOV AH,2 ;功能号送AH INT 21H ;调用2号功能,显示一位数字 DEC SI ;次数减1 JNZ DISP ;5次未到,继续循环 MOV AH,4CH ;功能号送AH INT 21H ;调用4CH号功能,返回DOSCODEENDS END START运行结果:75249思考题:1.上述程序只显示了相加的结果,没有显示被加数和加数,如果在上述程序的基础上将显示格式改为471932805675249,则程序如何修改?2.上述程序没有考虑运算结果最高位有进位的情况,如果考虑可能产生的进位,则要显示完整的结果,程序如何修改?(提示:INC和LOOP指令均不影响CF)【报告要求】1.列出8086常用指令练习部分的逐条运行记录。2.列出DEBUG下调试运行小程序的运行步-运行结果。3.回答思考题。附:DEBUG 命令1.打 DEBUG 进入 DEBUG,显示提示苻 _ 。2.退出DEBUG命令:Q3.显示内存命令:D 起始地址 结束地址4.修改内存命令:E 起始地址,连续修改打空格键。打回车键退出E命令。5.检查寄存器命令:R标志位显示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6.修改寄存器命令:R 寄存器名7.小汇编命令:A 起始地址,不输入指令打回车键退出A命令。8.反汇编命令:U 起始地址 结束地址9.文件命名命令:N 盘号:文件名10.读文件命令:L 内存地址11.写文件命令:W 内存地址10.读扇区命令:L 内存地址 盘号(0-A:,1-B:) 扇区号 扇区数11.写扇区命令:W 内存地址 盘号 扇区号 扇区数12.运行命令:G=起始地址 结束(断点)地址13.单步命令:T=起始地址 运行指令数,进入子程序内部。14.单步命令:P=起始地址 运行指令数,不进入子程序内部。15.内存搬家命令:M 起始地址 结束地址 目的地址实验二 数制转换程序【实验目的】1掌握汇编语言程序结构。2掌握建立、汇编、链接、调试和运行汇编程序的过程。 3掌握DOS功能调用 INT 21H 02号功能字符显示输出方法。4掌握INT 21H 4C号功能返回系统的方法。【实验性质】验证性实验(学时数:2H)【实验内容】一、 完成一个十六位二进制数到十六进制数的转换操作程序设计。参考程序:;将二进制数一边转换成十六进制数一边显示(用2号功能调用)DATASEGMENTBUFADW1111001000110100B;F234HDATAENDSCODESEGMENTASSUME CS:CODE,DS:DATABEG:MOV AX,DATAMOV DS,AXMOV DX,BUFAMOV CH,4;循环控制十六进制数显示位数MOV CL,4ROTATE: ROL DX,CL;循环左移4位,将高位十六进制数移到低位 MOV BX,DX;保护移动后的数AND DX,0FH;屏蔽掉高位保留该低位数CMP DL,9JG LADD DL,30H;转换成ASCII码MOV AH,2;送显示INT 21HJMP NEXTL:ADD DL,37HMOV AH,2INT 21HNEXT: MOV DX,BXDEC CHJNZ ROTATEMOV AH,4CHINT 21HCODE ENDSEND START二、把上题改造成COM文件的编程格式,汇编、链接和运行调试该程序。参考程序:CODESEGMENTASSUME CS:CODEORG 100H BEG:JMP STARTBUFADW0001001000110100B;1234H(用户程序数据区)START:MOV DX,BUFAMOV CH,4;循环控制十六进制数显示位数MOV CL,4ROTATE: ROL DX,CL;循环左移4位,将高位十六进制数移到低位 MOV BX,DX;保护移动后的数AND DX,0FH;屏蔽掉高位保留该低位数CMP DL,9JG LADD DL,30H;转换成ASCII码MOV AH,2;送显示INT 21HJMP NEXTL:ADD DL,37HMOV AH,2INT 21HNEXT: DEC CHMOV DX,BXJNZ ROTATEMOV AH,4CHINT 21HCODE ENDSEND BEG三、参照上述程序完成一个十六位二进制数到十进制数的转换操作程序设计。四、加分题:完成从键盘输入一个任意十六位二进制数到十六进制数的转换操作程序设计。提示:在数据区定义19个字节的字符串区,用INT 21H 的10#功能,进行字符串输入,判断实际输入的字节数是否为16个,每个字节的内容是否为30H或31H,不是,则提示重新输入或退出,是,则把该区域的16个ASCII码30H、31H的字符从低位到高位(或相反顺序)转换成1010110101110111的形式,用上述程序进行转换输出。思考题:1)若在源程序中把INT 21H的H省去,会产生什么现象?2)把 INT 21H 4CH号功能改为 INT 20H,行不行?3)从键盘输入的二进制ASCII字符串,在转换成十六进制数据时,有哪几大步骤?【实验要求】1.列出自编程序的程序清单,并加适当注释。2.写出汇编,连接及调试程序时产生的错误,其原因及解决办法。3.总结EXE文件和COM文件的编程格式。4.回答思考题。实验三 数组排序程序【实验目的】1. 循环控制条件的设计。 2. 存储器操作数的寻址方式。3. 对内存的数据处理方法。【实验性质】验证性实验(学时数:3H)【实验内容】 1、在内存缓冲区存放10个无序整数,按照从小到大的顺序进行排序,用debug查看排序结果。参考程序:DATASEGMENTST_ADDW 23,78,45,99,128,64,32,200,1,0DATA ENDSPROGRAMSEGMENTMAIN PROC FARASSUME CS:PROGRAM,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,10DEC CXLOOP1: MOV DI,CXMOV BX,0LOOP2:MOV AX,ST_ADBXCMP AX,ST_ADBX+2JGE COTINUEXCHG AX,ST_ADBX+2MOV ST_ADBX,AXCOTINUE:ADD BX,2LOOP LOOP2MOV CX,DILOOP LOOP1RETMAINENDPPROGRAM ENDSEND START2、加分题:从键盘输入10个无序10进制整数,对这10个数进行排序,将排序后的结果送屏幕显示。3、加分题:从键盘输入一个10进制整数,插入前面已整序的10个数中,要求插入后的11个数也是整序好的,将插入后的结果送屏幕显示。【报告要求】1. 给出该程序的流程图。2. 给出调试通过的自编程序清单和调试记录3. 写出实验体会。实验四 数据的输入与输出程序【实验目的】1掌握键盘输入字符的方法和十六进制数字字符的ASCII码转换为二进制数的原理。2掌握子程序定义和调用的方法。3掌握循环移位指令的用法和无符号数比较大小的方法。【实验性质】验证性实验(学时数:2H)【实验内容】从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。要求输入的数字字符串以回车键结束。如果输入的数字超过4个,则以最后输入的4个为准。若按下的键不是十六进制数字字符,则显示出错信息。参考程序:【实验提示】从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要找出ASCII码与该数字对应的二进制数之间的关系。关系如下:十六进制数字字符字符对应的ASCII码数字对应的二进制数0 930H 39HASCII码 - 30HA F41H 46HASCII码 - 37Ha f61H 66HASCII码 - 57H【报告要求】1给出该问题的程序设计流程图。2给出该程序的全部代码,并加上注释。3总结实验体会。实验五 子程序设计【实验目的】 掌握一般子程序的调用和返回方法,掌握定义过程的伪指令的用法。【实验性质】设计性实验(学时数:3H)【实验内容】1、完成两个四位十进制数相加的程序设计,形式为:2345+7869=10214(1)要求所有中断调用全部采用子程序的形式完成。(2)要求考虑进位位。完善程序并调试通过。(3)仿照下述程序,完成八位十进制数相加的程序设计。要求考虑进位位。完善程序并调试通过。参考程序:DISPMACRO VARMOV AH,2MOV DL,VARINT 21HENDMDATASEGMENTSTR1DB PLEASE INPUT A NUMBER (EXP:2345)$STR2DB PLEASE INPUT ANOTHER NUMBER(EXP:7868)$STR3DB 0DH,0AH,$BUF1DB 10,?,11 DUP(?)BUF2DB 10,?,11 DUP(?)BUF3DB 4 DUP(?),$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATABEGIN:MOV AX,DATAMOV DS,AXMOV DI,OFFSET STR1CALL DISPL ;SHOW PLEASE INPUT NUMBER1:MOV DI,OFFSET BUF1CALL GETNUM ;GET NUMBER1 FROM KEYBOARDMOV DI,OFFSET STR3CALL DISPL ;CRLFMOV DI,OFFSET STR2CALL DISPL ;SHOW PLEASE INPUT NUMBER2:MOV DI,OFFSET BUF2CALL GETNUM ;GET NUMBER2 FROM KEYBOARDMOV DI,OFFSET STR3CALL DISPL ;CRLFXOR BX,BXMOV BL,BUF1+1MOV BUF1+2BX,$ ;BEHIND NUMBER1 ADD $MOV DI,OFFSET BUF1+2CALL DISPL ;SHOW NUMBER1DISP + ;SHOW +XOR BX,BXMOV BL,BUF2+1MOV BUF2+2BX,$ ;BEHIND NUMBER2 ADD $MOV DI,OFFSET BUF2+2CALL DISPL ;SHOW NUMBER2DISP = ;SHOW = LEA SI, BUF1+2LEA DI, BUF2+2CALL DAAD ;ADD NUMBERSMOV DI,OFFSET BUF3CALL DISPL ;SHOW RESULT MOV AH,4CH ;RETURN DOSINT 21HDAADPROC NEAR ;SUBPROCESS OF ADDMOV BX,4 N1:MOV AL,SI+BX-1ADC AL,DI+BX-1AAAADD AL,30HMOV BUF3BX-1,ALDEC BX JNZ N1RETDAADENDPDISPLPROC NEAR ;SUBPROCESS OF DISPLAYMOV AH,9MOV DX,DIINT 21HRETDISPLENDPGETNUM PROC NEAR ;SUBPROCESS OF GETNUMMOV AH,0AHMOV DX,DIINT 21HRETGETNUMENDPCODE ENDSEND BEGIN2、加分题:根据输入的运算符来实现+、-、*、/ 四则运算,并考虑进位。做除运算时,应考虑除数为0。【实验要求】1.设计一个子程序,完成将缓冲区中的两个四位十进制数据送屏幕显示功能。2.设计一个子程序,完成从键盘输入两个四位十进制数的加法操作程序设计。3.设计一个子程序,完成两个八位十进制数作的加法运算操作程序设计。4.设计一个子程序,完成两个四位十进制数作四则运算操作。运算要求从键盘输入。【报告要求】1.给出该程序设计的方案步骤。2.列出自编程序清单并加注释。3.写出心得体会。实验六 宏调用程序设计【实验目的】 1.熟悉宏定义的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业营销管理的11项原则
- 《材料加工检测技术》教学大纲
- 教案第一课神奇的货币
- 玉溪师范学院《田径》2023-2024学年第一学期期末试卷
- 经济贸易毕业论文:中国外贸竞争力探究
- 玉溪师范学院《普通话与教师口语》2021-2022学年第一学期期末试卷
- 会计从业资格考试财经法规教案
- 建筑公司规章制度范本
- 销售部门年终工作总结课件模板
- 东南亚运动户外电商行业市场洞察
- 2024年工程承包合同协议书模板
- 第五节 错觉课件
- 2024-2030年中国水煤浆行业发展规模及投资可行性分析报告
- 2024中国石油报社高校毕业生招聘6人管理单位遴选500模拟题附带答案详解
- 电玩城员工服务培训
- 高校实验室安全基础学习通超星期末考试答案章节答案2024年
- 国开2024年《中国法律史》平时作业1-3答案
- 自然资源调查监测技能竞赛理论考试题库大全-下(判断题)
- 李燕璇植树问题卡通版5
- 个人简历模版
- 油浸式变压器作业工艺流程图
评论
0/150
提交评论