《单片机原理及应用》课件第16章 汇编语言程序设计_第1页
《单片机原理及应用》课件第16章 汇编语言程序设计_第2页
《单片机原理及应用》课件第16章 汇编语言程序设计_第3页
《单片机原理及应用》课件第16章 汇编语言程序设计_第4页
《单片机原理及应用》课件第16章 汇编语言程序设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

第16章汇编语言程序

教学目的:本章学习如何利用8086指令系统编写与调试汇编语言源程序。本章还要学习常见的伪指令、宏指令及操作系统提供的常见DOS、BIOS的功能子程序。

教学重点:编写与调试汇编语言源程序.教学难点:宏指令的应用;分支结构程序的设计与编写。16.1概述16.1.1汇编语言程序的格式1.汇编语言语句格式[标号:]操作码操作数[;注释]2.一般程序格式N1SEGMENT

语句1…N1ENDSN2SEGMENT

语句2…N2ENDSEND[标号]16.1.2表达式与运算符

1.算术运算符2.逻辑运算符3.关系运算符

4.分析运算符

5.合成运算符

16.1.3常用伪指令

1.数据定义伪指令2.符号定义伪指令3.段定义伪指令4.段起始偏移地址伪指令ORG5.程序结束伪指令END6.标识符说明伪指令PUBLIC7.多文本汇编连接伪指令INCLUDE

16.1.4宏指令

1.宏定义宏指令名MACRO[形式参数1][,形式参数2]…┆;宏指令体

ENDM2.宏调用宏指令名[实参1][,实参2]···3.宏展开4.宏指令与子程序的比较例16.5定义一条可以实现移位操作的宏指令。SHIFTMACRO n,reg,X ;n为移位次数,X代表移位方式MOV CL,nS&X reg,CL ;S为移位指令的第一个字母ENDM说明:形式参数X出现在操作码部分,在X与S之间必须用符号“&”连接,此时S&X中的X才被看做是形式参数。宏调用时,把n,Reg,X的实际参数分别代入,可实现对任意一个寄存器,对任意指定的位数,做任意方式(算术左移、算术右移、逻辑右移)的移位。例如,对例16.5进行宏调用,实现将累加器AX内容算术右移5次(位)。则定义形参如下:

SHIFT5,AX,AR;实现AX内容算术右移5次例如,将例16.5进行宏展开后的指令如下:MOVCL,5SARAX,CL16.2DOS和BIOS系统功能调用16.2.1DOS软中断及系统功能调用

1.DOS软中断2.DOS系统功能调用方法在DOS系统功能调用时必须按下列3个步骤进行。(1)设置系统功能调用的入口参数,指调用前必须对相应寄存器输入的初始值。(2)将子程序功能号送入AH,功能号是一个1~62H的整数。(3)执行中断指令INT21H。3.常用DOS功能调用举例

例16.6要求在显示屏上显示“WELCOME!”字符串,试编此程序。解

汇编语言源程序如下:DATA SEGMENT ;定义数据段STR1 DB‘WELCOME!’,‘$’;定义待显示的字符串,‘$’是字符串的结束符DATA ENDSCODE SEGMENT ;定义代码段ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AX ;设置字符串的段基址MOVDX,OFFSETSTR1 ;设置字符串首地址的偏移地址MOVAH,09H ;设置9号功能(字符串显示)INT21H ;调用9号功能MOVAH,4CH ;设置返回DOS功能号INT21H ;返回DOSCODE ENDSENDSTART ;汇编结束

16.2.2.

BIOS功能调用

1.常用的BIOS中断类型

(1)INT10H显示器中断调用(AH=0~0FH)

(2)INT14H串行通信口功能调用(AH=0~3)

(3)INT16H键盘输入功能调用(AH=0、1、2)

(4)INT17H打印机中断调用(AH=0、1、2)

2.常用BIOS中断调用举例

例16.8通过按Y键和N键实现程序的分支转移,按其他键转出错处理。解:MOVAH,0 ;置0号功能INT16H ;从键盘读一个字符,输入字符的扫

描码装入AHCMPAH,15H ;Y键的扫描码是15HJEL1CMPAH,2DH ;N键的扫描码是2DHJEL2JMPERRL1:…. ;按Y键功能段 ….L2:…. ;按N键功能段 ….ERR:….16.3汇编语言程序设计举例16.3.1循环结构程序举例例16.9在内存的ME1单元中有一个16位二进制数。要求统计出该单元中含1的个数,并存入ME2单元。试编写此程序。解:用CX寄存器作为计1计数器,统计1的个数采用移位方法。源程序如下:DSEGSEGMENTME1DW6543HME2DW?DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AX;初始化DSMOVCX,0;计1计数器清零

MOVAX,ME1;取ME1内容到AXL1:ANDAX,AX;判断AX=0吗?

JZEXIT;移完结束

SALAX,1;算数左移

JNCL2;每移一位判断是否为1INCCX;若为1,则CX加1L2:JMPL1;没有移完继续EXIT:MOVME2,CX;存结果

MOVAX,4C00H;AH=4CH是程序结束功能号,0是自定的返回码

INT21H;程序结束,返回调用进程CSEGENDSENDSTART

16.3.2分支结构程序举例例16.11借用例7.11题,根据X的值(0~+15),编写计算下述函数式的程序。设变量X存放在VAL1单元,结果存入VAL2单元。解本题需要采用分支程序设计,根据题意首先计算X2并暂存于BL中,然后根据X值的范围,决定Y的值。

解:MOV AL,VAL1MOV BL,ALMUL BL ;X2

AX

MOV BL,AL;X2

BL MOV AL,VAL1

;重新把X装入AL CMP AL,5Ll: JL L2 ;X<5转L2 MOV DL,41 ;先假设X>10 CMP AL,10 ;与10比L3: JG L4 ;X>10转L4 MOV AL,BL ADD AL,08 ;10

X

5,Y=X2+8 MOV DL,AL JMP L4L2: MOV AL,BL CLC SUB AL,01 ;X<5,Y=X2–1 MOV DL,ALL4:MOVVAL2,DL16.3.3子程序结构程序举例例16.13用汇编语言编程实现把键盘上输入的大写字母转换为小写字母后输出到屏幕。CODE SEGMENTASSUME CS:CODE,DS:CODE

MSGDB‘ERR1!’,

‘$’;定义输出字符串,以$字符结束START:MOVAH,1;DOS的1号功能调用INT 21HCALLSUB1;调用子程序SUB1JCERR;子程序执行后,如果CF=1,不是大写字母ADD AL,20H;CF=0,将大写转为小写

MOVDL,ALMOV AH,02;设置2号功能调用INT 21H;显示小写字母MOV AH,4CHINT 21H;返回DOSERR: MOVDX,OFFSETMSGMOV AH,9INT21H

温馨提示

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

评论

0/150

提交评论