汇编介绍 - 图文
更新时间:2023-10-21 02:31:01 阅读量: 综合文库 文档下载
- 汇编语言推荐度:
- 相关推荐
《微机原理与汇编语言》课程配套实验讲义
微机原理与汇编语言实验
曾祥伦 编写 赵华君 审校
重庆文理学院物理与信息工程系
电子技术教研室印制
《微机原理与汇编语言》实验讲义 前言
前 言
“微机原理与汇编语言”课程是电子信息类各专业(如电子工程、信息工程、通信工程、自动控制、工业自动化、微电子学)的专业技术基础课。本课程的任务是使学生获得微型计算机工作原理及汇编语言程序设计方面的基本理论、基本方法和基本技能,培养学生分析问题及解决实际问题的能力。通过本课程的学习,使学生为学习电信、电力和自动控制等方面的后续课程,以及今后从事电子、电信和自动控制等方面的实际工作打好基础。
本课程是电子信息类各专业的专业基础课“微机原理与汇编语言”的配套实验课程。由于“微机原理与汇编语言”是一门实践性很强的课程,因此,微机原理与汇编语言实验教学是一个十分重要的实践性教学环节。本实验课程的目的在于巩固和扩充课堂讲授的基础理论和基本知识,培养学生科学实验的基本技能和严谨的工作作风。通过实验使学生掌握计算机软、硬件设计和调试方法,并在此基础上提高学生在计算机应用方面的能力。
本实验讲义是根据“微机原理与汇编语言”课程的教学需要编写的,共有9个实验。其目的是使学生熟悉8086指令系统和掌握汇编语言程序设计的方法,并能利用DEBUG调试软件来调试汇编程序,为学生从事计算机研究与应用打下一个坚实的基础。一般说来,汇编语言是唯一能够充分利用计算机硬件特性的语言。对微处理器和微机系统的硬件组成知识的掌握以适应汇编语言的应用为基准,对程序和软件知识的掌握以能用汇编语言编程为基准,对汇编语言的掌握可以作为对本课程知识掌握一个标志。本实验讲义主要是以汇编语言的程序设计、调试为主,加强了设计性实验和习题,实验内容可根据实际教学要求选做,实验的任务和要求可以根据教学的需要和学生的情况进行调整。
本实验讲义所开设的实验均可用IBM-PC/XT以上型号的微机来完成。
为能更好地完成本实验,达到实验教学的目的,要求实验者每次实验前认真预习实验内容,掌握实验的基本原理,熟悉实验的基本步骤,认真书写预习实验报告。在预习实验报告中应编写好相关的实验程序,实验时把实验结果或数据认真记录在预习实验报告里。实验结束时经指导老师检查实验结果正确无误,并整理好实验仪器和桌椅,指导老师在预习实验报告上签字后方可离开实验室。未经签字的实验记录将视为无效,本次实验将视为未完成而不予登记成绩。实验课后按照实验报告的规范要求认真书写实验报告,重点是对实验程序的编辑、调试、运行及故障排除等方面的心得作出自己的评述。完成后的实验报告按照先实验报告、后预习报告的顺序装订成册,待下次实验时呈交给指导教师。
本实验讲义是在本课程实验教师多年使用自编讲义,并参考相关资料的基础上经多次修
《微机原理与汇编语言》实验讲义 前言
改与完善而形成的。由于编者水平有限,讲义中难免有错误和不妥之处,敬请同行和同学们提出宝贵的意见和建议。
编者 2006年10月于重庆文理学院
《微机原理与汇编语言》实验讲义 目录
目录
实验一 汇编语言上机环境及基本操作 ??????????1 实验二 DEBUG调试程序的应用 ????????????8 实验三 寻址方式与基本指令实验????????????13 实验四 字符及字符串输入输出与顺序程序设计实验????16 实验五 分支程序设计实验???????????????20 实验六 代码转换???????????????????25 实验七 循环程序设计实验???????????????27 实验八 宏指令及子程序设计实验????????????33 实验九 演奏乐曲实验 ????????????????37 附录1 DEBUG常用命令 ???????????????42 附录2 汇编程序出错信息一览表????????????49 附录3 未来汇编简介?????????????????54 参考文献???????????????????????58
《微机原理与汇编语言》实验讲义 实验一 汇编语言上机环境及基本操作
实验一 汇编语言上机环境及基本操作
一、实验目的
1.了解汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。 2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.掌握在计算机上建立、汇编、连接、调试及运行程序的方法。 二、实验预习要求
1、阅读本实验讲义,了解EDIT、MASM、LINK、DEBUG等软件工具的基本功能和使用方法。 2、明确本实验的内容、步骤和方法,写出预习报告。
三、实验内容及步骤:
1.汇编语言源程序的建立
本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。设定源程序的文件名为ABC。
DATA SEGMENT
BUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUF DATA ENDS
STACK SEGMENT STACK ’STACK’ STA TOP STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS XOR AX,AX PUSH AX MOV AX,DATA
MOV DS,AX MOV BX,OFFSET BUF MOV CX,CN DEC CX MOV AL,[BX] INC BX
- 1 -
DB 10 DUP(?) EQU $-STA
《微机原理与汇编语言》实验讲义 实验一 汇编语言上机环境及基本操作
LP: CMP AL,[BX] JBE NEXT MOV AL,[BX] NEXT: INC BX DEC CX JNZ LP MOV AH,4CH INT 21H CODE ENDS END START 键入以下命令: C:\\>EDIT ABC.ASM
此时屏幕的显示状态如图1.1所示。
图1.1 用EDIT编辑ABC.ASM程序窗口
程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2. 将源程序文件汇编成目标程序文件
一般情况下,MASM汇编程序的主要功能有以下3点:
- 2 -
《微机原理与汇编语言》实验讲义 实验一 汇编语言上机环境及基本操作
(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。 (3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图1.2所示。
图1.2 MASM宏汇编程序工作窗口
汇编过程的错误分警告错误(Warning Errors)和严重错误(Severe Errors)两种。其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。
3.用连接程序生成可执行程序文件
经汇编以后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE)。
连接过程如图1.3所示。
- 3 -
《微机原理与汇编语言》实验讲义 实验一 汇编语言上机环境及基本操作
图1.3 LINK连接程序工作窗口
上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。连接以后,便可以产生可执行程序文件(.EXE文件)。
4.程序的执行
当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。 如:C:\\>ABC
本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行的结果。 我们可以采用调试程序DEBUG来进行检查,相关内容请参见实验二。 四、实例分析
下面通过一个汇编语言源程序的实际例子,来了解汇编语言源程序的建立、汇编、连接、运行的完整过程。给出的程序是从键盘输入10个字符,然后以与键入相反的顺序将10个字符输出到显示屏幕上。设定源程序名为STR.ASM。
1.用EDIT建立汇编语言源程序
在DOS状态下,调用EDIT编辑程序建立文件名为STR.ASM的汇编源程序,如图1.4所示。
- 4 -
《微机原理与汇编语言》实验讲义 实验一 汇编语言上机环境及基本操作
图1.4 用EDIT建立汇编语言源程序
2.用MASM汇编生成目标文件
源程序文件建立完毕后,调用宏汇编程序MASM对STR.ASM进行汇编,如图1.5所示。
图1.5 用MASM汇编生成目标文件
- 5 -
《微机原理与汇编语言》实验讲义 实验一 汇编语言上机环境及基本操作
3.用LINK进行连接生成可执行文件
汇编完毕,程序正确,则可调用LINK进行连接,以生成可执行文件STR.EXE,连接过程如图1.6所示。
图1.6 用LINK连接生成可执行文件
4.程序的运行
在DOS状态下,直接键入可执行的程序文件名STR,然后从键盘输入“0123456789”10个数字,输入回车键后,计算机将10个数字倒序排列输出,即“9876543210”。再次键入可执行的程序文件名STR,从键盘输入“abcdefghIj”10个字符,输入回车键后,计算机将10个字符倒序排列输出,即“jihgfedcba”。 运行过程及其结果如图1.7所示。
- 6 -
《微机原理与汇编语言》实验讲义 实验一 汇编语言上机环境及基本操作
图1.7 程序的运行状态及结果
五、实验设备
微型计算机 一台 六、实验报告要求
1、简要说明汇编语言程序设计的步骤,每一步使用什么工具软件,生成什么类型的文件。 2、写出实验小结,内容包括实验心得(收获)、实验中遇到的问题及解决办法、不足之处和今后应注意的问题
- 7 -
《微机原理与汇编语言》实验讲义 实验二 DEBUG调试程序的应用
实验二 DEBUG调试程序的应用
一、实验目的
1、了解DEBUG调试程序常用命令的基本格式、主要功能和使用方法。 2、熟悉进入或退出DEBUG调试程序运行界面的步骤。
3、掌握用DEBUG调试程序进行程序编辑、调试、运行、结果检查的基本方法。 4、进一步汇编语言上机环境及基本操作
二、实验预习要求
1、阅读本实验讲义和附录1,了解DEBUG调试程序常用命令的基本格式、主要功能和使用
方法。
2、明确本实验的内容、步骤和方法,写出预习报告。
三、实验内容及步骤:
1、启动DEBUG程序 (1). 直接启动
如DEBUG.COM在C盘的根目录下,启动的方法是: C:\\>DEBUG _
这时屏幕上会出现“_”提示符,等待键入DEBUG命令。 (2). 启动DEBUG程序的同时装入被调试文件
命令格式如下:
C:\\>DEBUG [d:][PATH]filename[.EXT]
[d:][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。
例如:BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下: C:\\>DEBUG A:\\BCDSUN.EXE↙
DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。
- 8 -
《微机原理与汇编语言》实验讲义 实验二 DEBUG调试程序的应用
2、在DEBUG环境下建立和汇编程序
在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。
(1)。在在显示器上输出一个单字符
比如,在DEBUG下运行如下程序:
MOV DL,33H ;字符3的ASCII码送DL MOV AH,2 ;使用DOS的2号功能调用 INT 21H ;进入功能调用,输出‘3’ INT 20H ;BIOS中断服务,程序正常结束。 该程序运行结果是在显示器上输出一个字符‘3’。其中涉及DOS和BIOS功能调用。因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输出。
DOS功能调用就是为诸如此类的目的设置的。DOS功能调用要求在进入“INT 21H”调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。也就是说INT 21H的2号功能调用是输出DL寄存器中的字符。“INT 20H”是BIOS中断服务,这一软中断用来正常结束程序。“INT 20H”也可改为“INT 3”,表示程序执行到此暂停。
运行步骤: ①.进入DEBUG界面
设C盘上有DEBUG.COM程序,进入DOS环境后键人DEBUG后回车,即 C:\\>DEBUG
随后屏幕显示: _
“_”号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。现在用A命令输入程序如下: ②.输入程序并汇编
_A 100
169C:0100 MOV DL,33 169C:0102 MOV AH,2 169C:0104 INT 2l 169C:0106 INT 20 169C:0108
- 9 -
;回车结束程序的输入
;DEBUG默认16进制数
《微机原理与汇编语言》实验讲义 实验二 DEBUG调试程序的应用
至此程序已输入完毕,并汇编成机器指令。现在用G命令运行程序如下: ③.运行程序
_G=0100
3
Program terminated normally
如果现在想分析一下该程序的指令,可以用反汇编命令U作如下操作: ④.反汇编
_U 100,108
169C:0100 B233 MOV DL,33 169C:0102 B402 MOV AH,02 169C:0104 CD21 INT 21 169C:0106 CD20 INT 20 169C:0108
⑤.将机器指令程序送到起始地址为200H的若干单元
_E 0200 B2,33,B4,02,CD,21,CD,20
⑥.执行机器指令程序
_G=0200 3
Program terminated normally
(2). 在内存DS:1200H 开始的存储单元中建立一个大写字母区。
①.手工编写程序,实现在内存DS:1200H 开始的存储单元中建立一个大写字母区。
MOV MOV
CX,1AH
;循环次数(1AH=26) ;传送数据区首地址 ;大写字母A的ASCII码 ;LP为循环返回的符号地址
;断点软中断作程序暂停指令用,便于程序调
BX,1200H
MOV AL,41H MOV INC INC LOOP INT
[BX],AL AL BX LP 3
LP:
试
②.进入DEBUG,用A命令输入程序并汇编。
- 10 -
《微机原理与汇编语言》实验讲义 实验二 DEBUG调试程序的应用 —A 100
20D0:0100 MOV 20D0:0103 MOV
CX,1A BX,1200
;DEBUG默认16进制数
20D0:0106 MOV AL,41 20D0:0108 MOV 20D0:010A INC 20D0:010C INC 20D0:010D LOOP 20D0:010F INT 20D0:0110
[BX],AL AL BX 0108 3
;回车结束程序的输入
;LP用偏移地址0108代替
;由此处可知符号地址LP的偏移地址为0108
③.用D命令先查看存储单元的原值 —D1200
20D0:1200 00 00 00 00 00 00 00 00 —00 00 00 00 00 00 00 00 ???????? 20D0:1210 00 00 00 00 00 00 00 00 —00 00 00 00 00 00 00 00 ????????
????
④.用G命令运行程序 —G=0100
回车后,屏幕上出现当前所有寄存器和标志位的值,并出现DEBUG的提示符。
⑤.再检查有关存储单元的内容
20D0:1200 41 42 43 44 45 46 47 48—49 4A 4B 4C 4D 4E 4F 50 ABCDEFGHIJKLMNOP 20D0:1200 51 52 53 54 55 56 57 58—59 5A 00 00 00 00 00 00 QRSTUVWXYZ???
????
可以看到,在DS:1200开始的存储单元已建立了大写字母区。
3、练习R、U、E、T等命令。 4、退出DEBUG
在DEBUG命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS操作系统。
四、实验思考题与习题
1、在实验内容(1)中,如何改变程序,在显示器上输出一个英文单词,如“WELCOME”? 2、编写程序,在DS:1000开始的存储单元区建立一个0~~99的数据区,并在DEBUG
界面下编辑、调试、运行,检查其结果。
- 11 -
《微机原理与汇编语言》实验讲义 附录1 DEBUG常用命令
- 42 -
《微机原理与汇编语言》实验讲义 附录1 DEBUG常用命令
- 43 -
《微机原理与汇编语言》实验讲义 附录1 DEBUG常用命令
- 44 -
《微机原理与汇编语言》实验讲义 附录1 DEBUG常用命令
- 45 -
《微机原理与汇编语言》实验讲义 附录1 DEBUG常用命令
- 46 -
《微机原理与汇编语言》实验讲义 实验四 字符及字符串输入输出与顺序程序设计实验
名。
MOV AH,09H INT 21H
③.非压缩型BCD码加法调整指令的使用。
设从键盘输入的数值已存放在寄存器AL,BL中,可用下列程序完成数据相加和调整操作:
XOR AH,AH ADD AL,BL AAA
;执行该指令后,AH中为和的十位数,AL中为和的个位数
请读者考虑,为什么要使用指令“XOR AH,AH”,能否不用? ④.计算结果的显示。
执行完AAA指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,并依次调用功能号为2 的DOS功能调用来显示字符。具体指令代码如下:
PUSH AX MOV DL,AH ADD DL,30H MOV AH,02H INT 21H POP AX MOV DL,AL ADD DL,30H MOV AH,02H INT 21H 2、 源程序框架
DATA SEGMENT
INFOR1 DB ?Please Input the First Data(<10):$?
INFOR2 DB OAH,0DH,?Please Input the Second Data(<10):$? INFOR3 DB 0AH,0DH,?The Result is:$?
;0DH和0AH分别为非显示符回车和换行的ASCII码值,美圆符号”$”为字符串 ;的结束标志,不能省略。 DATA ENDS CODE SEGMENT
- 17 -
《微机原理与汇编语言》实验讲义 实验四 字符及字符串输入输出与顺序程序设计实验
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
显示提示信息INPOR1并从键盘接收一个字符的指令序列 SUB AL,30H SUB AL,30H MOV BL, AL
显示提示信息INFOR2并从键盘接收一个字符的指令序列 SUB AL,30H
PUSH AX
显示提示信息INFOR3的指令序列 POP AX PUSH AX
显示十位及个位上数字的指令序列 MOV AH,4CH INT 21H
CODE ENDS
END START
3、 程序调试
源程序编写完成后,先静态检查,无误后,对源程序进行汇编和连接,生成执行文件。运行该程序,分析运行结果是否正确。若结果不正确,对其修改、调试,直至正确为止。 四、实验习题
1、设a、b、c、d为四个压缩型BCD码,它们被存放在内dbcd开始的4个存储单元中。计算a+b+c+d,并将结果在屏幕上显示出来。程序编写完成并运行正确后,打开源程序,改变a、b、c、d的内容,然后重新进行汇编、连接并运行程序,检查程序运行结果与手工计算结果是否相符。
求和并调整指令序列 - 18 -
《微机原理与汇编语言》实验讲义 实验四 字符及字符串输入输出与顺序程序设计实验
下面给出几组实验数据:
①.a=11,b=23,c=25,d=31 ②.a=10,b=20,c=30,d=40
③.a=45,b=45,c=45,d=45 ④.a=88,b=99,c=77,d=66
(注意压缩型BCD码的表示方法:十进制数38表示成压缩型BCD码时应写成38H。) 2、从键盘输入两个一位十进制数,计算这两个数之积,并将其结果在屏幕上显示出来。 3、从键盘输入0~9中任意一个自然数,将其立方值在屏幕上显示(使用查表法实现)出来。
五、实验设备
微型计算机 一台 六、实验报告要求
1、补全“实验内容”中源程序框架内未写出的程序段,并说明在调试该程序过程中遇到了哪些问题,是如何处理的。
2、从“实验习题”中任选一道题目,画出流程图,编写源程序,并说明在调试过程中遇到了哪些问题,是如何处理的。
3、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题等。
- 19 -
《微机原理与汇编语言》实验讲义 实验五 分支程序设计实验
实验五 分支程序设计实验
一、实验目的
1、掌握分支程序的设计方法。 2、掌握宏定义及宏调用的基本方法。
3、了解小写字母和大写字母的ASCII码表示及其转换方法,了解数字及其他字符的ASCII码表示方法。
4、进一步掌握调试工具的使用方法。 二、实验预习要求
1、复习比较指令、条件转移指令的用法 2、复习宏定义及宏调用的基本方法
3、根据“10.3.3实验内容中”给出的流程图和程序框架编写源程序,以便上机调试。 4、程序框架中显示提示信息的指令序列用宏调用实现。
5、从“10.3.4实验习题”中任选一道题目,编写源程序,以便上机调试。 三、实验内容及步骤
从键盘输入一字符,判断该字母是小写字母、大写字母、数字或是其他字符。若输入为小写字母,则显示“You Input a Lowercase Letter!”;若输入是大写字母,则显示“You Input a Uppercase Letter!”。若输入为数字,则显示“you Input a Digit!”若输入为数字,则显示“You Input other Letter!”。
1、编程指导
数字0-9的ASSCII码为30H-39H;大写字母的ASSII码为41H-5AH,小写字母的ASCII码为61H-7AH。本题目将字符分为小写字母、大写字母、数字及其他字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。字符串显示使用的功能号为09H的DOS功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。
2、流程图及程序框架 ①.流程图(如图10.1所示)。
- 20 -
《微机原理与汇编语言》实验讲义 实验五 分支程序设计实验
图5.1 流程图
?、程序框架
DATA SEGMENT
输入的是小写字母,显示有关信息 N 输入的是大写字母,显示有关信息 输入的是数据,显示有关信息 Y 开始 显示提示信息”Please Press Any Key to Input aLetter”及功能号为1的接收键盘输入单个字符的指令序列. Y AL<?0?? N AL≤?9?? N Y AL<?A?? N Y AL≤?Z?? N Y AL<?a?? N Y AL≤?z?? 输入的是其他字符,显示信息 结束 INFOR1 DB 0AH,0DH,“Please Press any Key to Input a Letter:$”
- 21 -
《微机原理与汇编语言》实验讲义 实验五 分支程序设计实验
INFOR2 DB 0AH ,0DH ,“You Input a Lowercase Letter! $” INFOR3 DB 0AH ,0DH,“You Input a Uppercase Letter !$” INFOR4 DB 0AH,0DH,“You Input a Digit! $” INFOR5 DB 0AH,0DH,“You Input Other Letter! $”
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
显示信息“Please Press any Key toInput a Letter”的指令序列以以及接收从键盘输入一个字符的指令序列 CMP AL,?0? JB
OTHER
MOV DS,AX
CMP AL,?9? JBE
DIGIT
CMP AL,?A? JB
OTHER
CMP AL,?Z? JBE
UPPER
CMP AL,?a? JB CMP JBE
LOWER:
显示“You Input a Lower Letter!”的指令序列
JMP PEND ;注意执行完一个分支后应使程序跳出
UPPER:
显示“You Inptut a Uppercase Letter!”的指令序列
OTHER AL,?z? LOWER
JMP PEND
- 22 -
《微机原理与汇编语言》实验讲义 实验五 分支程序设计实验
JMP PEND
DIGIT:
显示“You Input a Digit !”的指令序列 JMP PEND OTHER:
PEND: MOV AH,4CH
INT
21H
CODE ENDS
END START
四、实验习题
1.在屏幕上显示信息“Are You Really Want to Exit?”,然后从键盘输入一个字符。若输入“Y”或“y”,则显示“Thank You for Your Using!”后程序结束;若输入“N”或“n”,则显示“Let‘s Continue!”后程序结束;若输入其他字符,则显示“You Press an Error Key!”后程序结束(要求尽量使用宏指令以便使源程序更加简洁)。
2. 在屏幕上显示如下信息:
1、??????????????Panda 2、??????????????Cat 3、??????????????Rabbit 4、??????????????Pig 5、??????????????EXIT (please choose 1 ,2,3,4 or 5)
若输入1,则显示“I Like Pande ”后程序结束;若输入2,则显示“I Like Cat”后程序结束;若输入3,则显示“I Like Rabbit”后程序结束;若输入4,则显示“I Don‘t Like Pig”后程序结束;若输入5,则程序直接结束;若输入其他字符,则显示“You Press an Error Key !”后程序结束(要求尽量使用宏指令以便使源程序更加简洁)。 五、实验设备
微型计算机 一台 六、实验报告要求
1、补全“实验内容”中源程序框架内示写出的程序代码,并说明在调试该程序过程中遇
显示“You Input Other Letter!”的指令序列 - 23 -
《微机原理与汇编语言》实验讲义 实验五 分支程序设计实验 到了哪些问题,是如何处理的。
2、从“实验习题”中任选一道题目,画出流程图,编写源程序,并说明了在调试过程中遇到了哪些问题,是如何处理的。
3、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题等。
- 24 -
《微机原理与汇编语言》实验讲义 实验六 代码转换
实验六 代码转换
一、实验目的
1、掌握ASCII码转换为BCD码和BCD码转换成二进制数的方法。 2、进一步掌握建立与运行汇编语言源程序的操作方法。 二、实验预习要求
1、 仔细阅读实验指导书。
2、 按题目要求,参考流程图,在实验前编写好源程序。 三、实验内容及原理
1、实验内容
?.将十进制数字(0-9)的ASCII码30H-39H转换为组合的BCD码,其在内存中的存放形式为:01H、23H、45H、67H、89H。
?.将BCD码表示的数8765H转换成用二进制表示的数据。
2、实验原理
?.通常在微计算机中,从键盘少输入的十进制的每一位数码(即0-9)都是以他的ASCII码表示的,要向CRT输出的十进制数的每一位也是用ASCII码表示。而计算机中的十进制,是以BCD码形式存放,或是将其转换成二进制数存放。因此,在进行十进制数运算之前,首先要ASCII码转换为BCD码,这时只要将一个字节ASCII码的高四位清零即可。如果要以组合的BCD码形式表示,即一个字节存放两个数字的BCD码,则要将两个字节BCD码中高位字节数字左移四位,再与低位字节组合在一起就可以了。ASCII码转换为BCD码的参考流程图如图6.1所示。
?.在进行较复杂的十进制运输时,就要将BCD码转换位二进制数。若将两个存储单元存放的4个数字的BCD码转换成二进制数,常用的一种方法是
((千位数*10+百位数)*10+十位数)*10+个位数
就可以得到转换结果。 BCD码转换为二进制数的参考流程图如图6.2。 四、实验习题与思考题
1、十进制数字在计算机中常用BCD码表示,试问如何将其转换成ASCII码? 2、若十进制数用组合的BCD码表示,又如何将其转换成相应的ASCII码? 五、实验设备
微型计算机 一台 六、实验报告要求
- 25 -
《微机原理与汇编语言》实验讲义 实验六 代码转换
1、记录、整理经过运行而且证明是正确的源程序,并加上注释。 2、整理正确的运行结果。
3、回答思考题.
开始 初始化: 设两个地址指针 设循环次数计数器 取两字节数据 和0F0F相“与” 高位字左移4位 合并成组合BCD码 修改指针 N 是否结束? Y 结束 图6.1 ASCII转换为BCD码的 程序流程图 开始 取数 分离千,百,十个位数 千位数→AX AX*10→AX (AX+百位数)→AX AX*10→AX (AX+十位数)→AX AX*10→AX (AX+个位数)→AX 存结果 结束 图6.2 BCD码转换为二进制数的 程序流程图
- 26 -
《微机原理与汇编语言》实验讲义 实验七 循环程序设计实验
实验七 循环程序设计实验
一、实验目的
1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 二、实验预习要求
1、复习比较指令、条件转移指令和循环指令。 2、复习循环程序的结构、循环控制方法等知识。
3、读懂“实验内容”中给出的将十进制数转换成二进制数以及将二进制数转换成十进制数的程序。
4、根据“实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 5、从“实验习题”中任选项一道题目,编写源程序,以便上机调试。 三、实验内容及步骤
计算1+2+3?+n=?,其中n通过键盘输入,累加和小于216。要求在屏幕上提供如下信息: Please input a number(1~361) ;出现此信息后通过键盘输入一个1~511的无符号整
;数,使累加和小于一个16位无符号二进制数所能表 ;示的范围。
1+2+?n=sum ;其中n为用户输入的数,sun为所求累加和。 程序运行时如输入222,回车后屏幕显示则如图7.1所示。
- 27 -
《微机原理与汇编语言》实验讲义 实验七 循环程序设计实验
图7.1 累加和程序运行结果显示
1、 编程指导
①.键盘输入的十进制数,如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环次数进行控制,是本程序首先要解决的问题。将键盘输入的十进制数转换为二进制数的程序清单如下:
DATA
SEGMENT
INF1 DB ?Pease Input a Number(0-65535):$? IBUF DB 7,0,6 DUP(?)
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET INF1 MOV AH,09H INT 21H
MOV DX,OFFSET IBUF MOV AH,OAH INT 21H
MOV CL,IBUF+1 MOV CH=0
MOV SI,OFFSET IBUF+2 MOV AX,0 AGAIN:MOV DX,10 MUL DX
AND BYTE PTR[SI],0FH ADD AL,[SI] ADC AH,0 INC SI LOOP AGAIN MOV AH,4CH
;指向输入的第一个字符(最高位) ;开始将十进制数转换为二进制数 ;(0*10+a4)*10+…)*10+a0 ;十进制数的位数送CX ;键入一个十进制数(<512)
- 28 -
《微机原理与汇编语言》实验讲义 实验七 循环程序设计实验 INT 21H
CODE ENDS END START
本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。
②.累加结果为一个16位的二进制数,为了显示结果,必须把它们转换为十进制数。将二进制数转换成为十进制数的的程序清单如下: DATA SEGMENT
OBUF DB 6 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX
MOV BX,OFFSET OBUF+5 MOV BYTE PTR[BX],?$? MOV CX,10
LOOP1: MOV DX,0
DIV CX ADD DL,30H DEC BX MOV [BX],DL OR AX,AX JNZ LOOP1 MOV DX,BX MOV AH,09H INT 21H MOV AH,4CH INT 21H
CODE ENDS END START
本程序功能:将存储在AX寄存器中的二进制数转换为十制数并显示。
- 29 -
;做(DX):(AX)/10运算 ;被除数高16位清0
;将DL中的1位十进制数转换为ASCII码。
;判断商是否为0,不为0继续。
;显示转换得到的十进制数。
《微机原理与汇编语言》实验讲义 实验七 循环程序设计实验
2、流程图及程序框架 ①.流程图(如图7.2所示)。
结束 累加和(在AX中)转换为十进制并显示 CX—1=0? ADD AX,BX INC BX 累加循环次数送CX (MOV CX,AX); AX清零(AX中存放累加和); BX送1(BX存放每次循环累加的数,每次循环一次,BX值加1) 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中 开始 图7.2 计算累加和及结果显示程序流程图
②、程序框架: DATA SEGMENT
INF1 DB “Please Input a Number(0-65535):$” IBUF DB 7,0,6 DUP(?) OBUF DB 6 DUP(?)
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
- 30 -
《微机原理与汇编语言》实验讲义 实验七 循环程序设计实验
START: MOV AX,DATA
MOV DS,AX
MOV CX,AX MOV AX,0 MOV BX,1
LOOP2: ADD AX,BX
INC BX LOOP LOOP2
将AX中存放的二进制数转换为十进制数并显示 的指示序列 CODE ENDS
END START
四、实验习题
1、 从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和累加和。显示格式为:
1+2+?n=sum
其中,n为累加个数,sum为累加和。
2、从键盘输入6个加数N1、N2、N3、N4、N5和N6(均为1~4位的无符号十进制整数),求和并将计算结果在屏幕上显示出来。
3、 键盘输入一个无符号十进制整数(小于65536),将其转换为二进制数,统计该二进 制数所包含1的个数并将统计结果在屏幕上显示出来。
4、 从键盘输入N个无符号十进制数(小于256),将其转换成二进制数后存放在字节变 量BUF存储区中,对这N个数进行由大到小排序,排序后将其仍存储在BUF中,最后将排序后的结果在屏幕上显示出来。
5、编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。 五、实验设备
- 31 -
接收从键盘输入的十进制数,并将其转换为二进制数(存AX寄存器)的指令序列
《微机原理与汇编语言》实验讲义 实验七 循环程序设计实验
微型计算机 一台 六、实验报告要求
1、补全“实验内容”中源程序框架内未写出的程序代码,并说明在调试该程序过程中遇到了哪些问题,是如何处理的。试一下,如果输入的数大于511会出现什么问题,应如何解决?
2、从“实验习题”中任选一道题目,画出流程图,编写源程序,并说明在调试过程中遇到了哪些问题,是如何处理的。
3、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题等。
- 32 -
《微机原理与汇编语言》实验讲义 实验八 宏指令及子程序设计实验
实验八 宏指令及子程序设计实验
一、实验目的
1、熟悉宏指令、宏定义、宏调用以及宏展开的概念,掌握宏指令的定义与调用的方法。 2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。 · 3、了解宏指令与子程序的异同以及各自的适用场合。 二、实验预习要求
1、复习宏指令的定义与调用方法。 2、复习子程序的定义与调用方法。
3、根据“实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 4、从“实验习题”中任选一道题目,编写源程序,以便上机调试。 三、实验内容
从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字 节型变量中,找出其中的最大数,并在屏幕上显示出来。
要求:
①.在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现; ②.将键盘输入的十进制数转换成二进制数由子程序DTOB实现;
③.在N个无符号字节型二进制数中找出最大数的功能由子程序FMAX实现; ④.将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现。
程序运行结果如图8.4所示。
图8.4 程序运行结果示意图
- 33 -
《微机原理与汇编语言》实验讲义 实验八 宏指令及子程序设计实验
1、编程指导
(1)..显示提示信息的宏指令DSTRING的编写。
宏指令通常用于在程序中需要反复使用,但所需指令条数又不是很多的情形,而对于 需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。
下面给出实现提示信息显示的宏指令的定义: DSTRING
MACRO STRING
PUSH DX PUSH AX
MOV DX, OFFSET STRING MOV AH, 09H INT 21H POP AX POP DX ENDM
请读者注意,宏指令应该先定义,后调用。因此,宏定义通常紧跟在代码段中段寄存 器赋值指令之后。
(2).将键盘输入的十进制数转换为二进制数的子程序DTOB的编写。
子程序的定义方法请参阅教材。将十进制数转换为二进制数的程序代码请参阅本书\实验内容”中“编程指导”部分。
(3).在N个无符号字节型二进制数中找出最大数的子程序FMAX的编写。 程序代码请参阅教材。
(4).将一个无符号字节型二进制数转换为十进制数,并在屏幕上显示的子程序BTOAD的编写。
程序代码请参阅本书“实验内容”中“编程指导”部分。 2、程序框架
COUNT DATA
EQU 10 SEGMENT
DB 10 DUP(?) DB 7,0,6 DUP(?)
- 34 -
NUM IBUF
《微机原理与汇编语言》实验讲义 实验八 宏指令及子程序设计实验
OBUF
DB 6 DUP(?)
DB ?Please input 10 numbers:?,0AH,0DH,?$? DB ?The max found in the 10 numbers is $? DB 0AH,0DH,?$?
INFOR1 INFOR2 INFOR3
DATA STAC
ENDS
SEGMENT STACK
DW 40 DUP(?) DATA2 STAC
CODE SATART:
LOOP1:
TOP EQU
LENGTH DATA2
ENDS SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
MOV AX,DATA MOV DS,AX MOV AX,STAC MOV SS,AX MOV AX,TOP MOV
SP,AX
定义显示字符串信息的宏指令DSTRING DSTRING INFOR1 MOV BX,OFFSET NUM MOV CX,COUNT
CALL
DTOB DSTRING INFOR3 MOV [BX],AL INC BX LOOP LOOP1
MOV
AX,OFFSET NUM
PUSH AX;通过堆栈向子程序传递参数(数据个数及数据在数据
;段内的偏移地址)
MOV CX,COUNT PUSH
CX
- 35 -
《微机原理与汇编语言》实验讲义 实验八 宏指令及子程序设计实验
CALL FMAX DSTRING INFOR2 CALL MOV INT
BTOAD AH,4CH 21H
定义将键盘输入的十进制数转换为二进制数的子程序DTOB 定义在N个无符号字节型二进制数中找出最大数的子程序FMAX 定义将一个无字符字节型二进制数转换为十进制数,并在屏幕上显示的子程序BTOAD CODE 四、实验习题
1、从键盘输入N个十进制数,求它们的和(累加和要求不大于65535),并将累加结果 在屏幕上显示出来。要求给出必要的提示信息(用宏调用完成);累加功能由子程序调用实现;二进制数形式的累加和转换为十进制数并显示由子程序调用实现。
2、 计算1+2+3+…+N。要求N由键盘输入;给出必要的提示信息(用宏调用实现); 累加功能由子程序调用实现;二进制数(累加和)转换为十进制数并显示由子程序调用实现。
3、编写在屏幕上顺序显示A、B、C??Z的程序。要求两个字符之间有一定的时间延迟,通过调用宏指令实现;延迟时间常数由键盘输入;将键盘输入的十进制数形式的延迟时间常数转换为二进制数由子程序实现。 五、实验报告要求
1、补全“实验内容”中源程序框架内未写出的程序代码,并说明在调试该程序过程中遇到了哪些问题,是如何处理的?若允许输入大于255小于65536的十进制数,程序应如何修改?
2、从“实验习题”中任选一道题目,画出流程图,编写源程序,并说明在调试过程中 遇到了哪些问题,是如何处理的。
3、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题等。
ENDS
END START
- 36 -
正在阅读:
汇编介绍 - 图文10-21
地球科学概论试题AB答案01-30
圆锥曲线选择题(中档)复习AAAA03-18
四、公开型无追索权国内保理合同及全套附件04-22
隧道施工通风12-30
政府采购评审专家考试试题库-单选及答案(232题)04-10
桂花树的自述作文500字06-30
2016年中医执业医师卫生法规考试大纲05-01
篮球运动概论练习题03-16
如何给新生儿起名05-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 汇编
- 图文
- 介绍
- 数学考纲(福建春季高考).doc
- 混凝土作业三
- 正弦交流电教案
- 智能控制仪表 - 图文
- 小班上学期幼儿阅读行为观察记录表
- 生物高中必修2第四章第三节学案 - 图文
- 2009年全国高考陕西数学试题(理数)
- 湘教版六年级下册科学全册教案
- 计算机网络复习题4
- 中国政治制度史论述题
- 高层外挑连廊处外架施工方案
- 2018届江苏省扬州、泰州、淮安、南通、徐州、宿迁、连云港市高三第三次调研测试英语试题(word版,含听力)
- 协议书(模板)
- 他汀类药物应用中的药学监护
- 现代棉纺厂新厂工艺设计探讨
- 苏教版小学科学五年级下册《折形状》教学设计 宋华萍
- 牛津译林六年级下册英语提优训练(期中考试)二
- 大丰城市名片
- 2018-2019年初中语文人教版《七年级上》《第六单元》《30、寓言四则》《蚊子和狮子》同步练习试
- 7月工作总结与8月工作计划