《汇编语言程序设计 (2).ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计 (2).ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 汇编语言程序设计汇编语言程序设计4.1 引言本节内容:一、计算机程序设计语言(分类、优缺点)一、计算机程序设计语言(分类、优缺点)二、汇编语言的格式(四分段格式)三、汇编语言的构成(指令性语句、指示性语句)汇编语言程序设计汇编语言程序设计一、计算机程序设计语言1 机器语言(Machine Language)2 汇编语言(Assembly Language)3 高级语言(High-Level Language)4.1 引言 汇编语言程序设计汇编语言程序设计一、计算机程序设计语言1机器语言(Machine Language)直接为计算机所识别和执行两种表示形式:1、二进制 2、十六进制如:表示M
2、OV 20H,A 4.1 引言 汇编语言程序设计汇编语言程序设计4.1 引言一、计算机程序设计语言2、汇编语言:由助记符、保留字、伪指令组成 又称为符号语言执行前需由汇编程序翻译成机器语言不独立于具体的计算机优点:可以直接操作到单片机内部的工作 寄 存 器 和 片 内 RAM单 元,既 精 练又功能强大 汇编语言程序设计汇编语言程序设计4.1 引言一、计算机程序设计语言3、高级语言C(C+、C#)、BASIC等接近自然语言,只需掌握语法规则和程序 结构的设计。执行前需翻译成机器语言。功能强大、但必须在较高级的计算机上实现。汇编语言程序设计汇编语言程序设计4.1 引言扩展:C语言与汇编语言的对比
3、语言与汇编语言的对比汇编语言中,用MOV来回传送数据,C语言里,用等号表示数据传送;汇编语言中,用CALL转去执行子过程程序,C语言里,用个函数名调用子程序。汇编语言中,用JMP完成分支转移,C语言里用if、switch、while、for来判断跳转。汇编语言跟C一样可以给寄存器指定命名,然后对定义的名称进行操作。C语言具有大量函数的函数库,有更高的开发效率。面向应用,直接采用C语言;面向研究,从汇编语言开始;如果有时间,最好是用汇编语言学习单片机原理,用C语言进行单片机的应用开发。汇编语言程序设计汇编语言程序设计二、汇编语言格式 四分段格式4.1 引言:,;必选项START :MOV A,#
4、00H ;A0 NOP 汇编语言程序设计汇编语言程序设计ORG 0060HSTART MOV A,#00H/A0 MOV R2,#0AH/R210 MOV R1,#03H/R13LOOP ADD A,R1/AA+(R1)DJNZ R2 LOOP/若 R210,则LOOP NOP SJMP END4.1 引言找错误 汇编语言程序设计汇编语言程序设计ORG 0060HSTART:MOV A,#00H;A0 MOV R2,#0AH;R210 MOV R1,#03H;R13LOOP:ADD A,R1;AA+R1 DJNZ R2,LOOP;若 R210,则LOOP NOP SJMP END4.1 引言
5、汇编语言程序设计汇编语言程序设计二、汇编语言格式 4.1 引言、标号字段个字符、可以有数字、具有一定意义的词、不能有保留字、又称标号地址。用于指明指令操作码字节的内存地址。注意:DJNZ R2,LOOP;若R210,则PCPC+2+rel ;LOOP应理解为$-LOOP 汇编语言程序设计汇编语言程序设计二、汇编语言格式 4.1 引言、操作码字段保留字(如:MOV、ADD、NOP等)助记符(如:ORG、END等)、操作数字段数的各种进制形式 寄存器 标号地址 表达式$、注释段 汇编语言程序设计汇编语言程序设计三、汇编语言构成指令性语句和指示性语句两类。指令性语句:的条指令。指示性语句:伪指令语句
6、5条(不会产生机器直接执行的机器码)4.1 引言ORG、END、EQU、DATA、DB 汇编语言程序设计汇编语言程序设计三、汇编语言构成伪指令:1ORG(起始汇编)伪指令指示汇编程序把代码从哪个单元开始存放2END(结束汇编)伪指令指示汇编源程序的结束,停止汇编4.1 引言 汇编语言程序设计汇编语言程序设计 ORG 0500HAA EQU R1A10 EQU 10HDELAY EQU 07E6H MOV R0,A10 ;R0(10H)MOV A,AA ;AR1 :LCALL DELAY ;调用07E6H子程序 END3EQU(赋值)伪指令4.1 引言三、汇编语言构成伪指令:汇编语言程序设计汇编
7、语言程序设计ORG 0200HAA DATA 35H ;8位或16位 DELAY XDATA 0A7E6H ;16位专用MOV A,AA ;A(35H):LCALL DELAY ;调用A7E6H子程序 :END 4DATA(数据地址赋值)伪指令4.1 引言三、汇编语言构成伪指令:汇编语言程序设计汇编语言程序设计ORG 0200HMOV A,AA ;A(35H):LCALL DELAY ;调用A7E6H子程序 :AA DATA 35H ;8位或16位 DELAY XDATA 0A7E6H ;16位专用 END 4DATA(数据地址赋值)伪指令4.1 引言三、汇编语言构成伪指令:汇编语言程序设计汇
8、编语言程序设计 DATA与EQU区别:DATA不能用寄存器等符号 有些程序16位数用XDATA赋值 有些程序EQU语句只能在开头,而DATA无限制4.1 引言三、汇编语言构成伪指令:4DATA(数据地址赋值)伪指令 汇编语言程序设计汇编语言程序设计 标号:DB 项或项表 ORG 0600H START:MOV A,64H :TAB:DB 45H,73,01011010B,8,B :END5DB(定义字节)伪指令4.1 引言三、汇编语言构成伪指令:汇编语言程序设计汇编语言程序设计 如:IN1 BIT P1.06BIT(位地址定义)伪指令4.1 引言三、汇编语言构成伪指令:与DB类似,只是定义的是
9、16位(2个字节)如:ORG 2000HTAB:DW 100H,1A2H7DW(定义字)伪指令 汇编语言程序设计汇编语言程序设计4.2 汇编语言源程序的设计和汇编一、汇编语言程序设计拟制任务书拟制任务书建立数学模型建立数学模型确立算法确立算法绘制程序流程图绘制程序流程图编写汇编源程序编写汇编源程序上机调试上机调试程序设计的步骤(如何使用单片机编程解决实际工程问题)分析问题分析问题寻找解寻找解决方法决方法付诸付诸实践实践反馈反馈修正修正举例:用单片机替代人实现柴油机缸套水温度的自动控制 汇编语言程序设计汇编语言程序设计4.2 汇编语言源程序的设计和汇编二、汇编语言源程序的汇编1、手工汇编指用手工
10、把汇编语言源程序翻译成机器码的过程。遇到转移指令和标号在内的程序时,需要计算偏移量。较麻烦,易出错。2、机器汇编用计算机代替手工汇编,自动完成翻译工作。252510ACC 汇编语言程序设计汇编语言程序设计4.2 汇编语言源程序的设计和汇编扩展:扩展:MCS-51MCS-51单片机的应用程序的完成,应经过三个步骤:单片机的应用程序的完成,应经过三个步骤:(1 1)在)在PCPC上,运行编辑程序进行源程序的上,运行编辑程序进行源程序的输入和编辑输入和编辑(.asm)(.asm);(2 2)对源程序进行)对源程序进行机器汇编机器汇编得到机器代码得到机器代码(.hex)(.hex);(3 3)通通过过
11、PCPC的的串串行行口口(或或USBUSB口口)把把机机器器代代码码传传送送到到用用户户样样机机(或或在线仿真器在线仿真器)上进行程序的调试和运行。)上进行程序的调试和运行。第一步,第一步,只需在只需在PCPC上使用通用的编辑软件即可完成。上使用通用的编辑软件即可完成。第二步第二步,机器汇编所用的汇编程序可在购买单片机的仿真开,机器汇编所用的汇编程序可在购买单片机的仿真开 发工具时,由厂商提供。发工具时,由厂商提供。第三步第三步,要借助于单片机仿真开发工具进行。,要借助于单片机仿真开发工具进行。有时,在分析某些产品的程序的机器代码时,有时,在分析某些产品的程序的机器代码时,需将需将机器代码机器
12、代码翻译翻译成成汇编语言源程序汇编语言源程序,称为,称为“反汇编反汇编”。汇编语言程序设计汇编语言程序设计1、自顶向下的顺序结构2、分支结构(含有转移指令)3、循环结构4、查表结构5、子程序结构程序结构的种类 汇编语言程序设计汇编语言程序设计4.3 简单和分支程序设计开始语句1语句2语句n结束简单程序分支程序一、简单程序设计按照先后顺序依次执行二、分支程序设计程序中含有转移指令 汇编语言程序设计汇编语言程序设计带符号数符号数:正数最高位为0,负数最高位为1补码:正数的补码是原码,负数的补码/补码绝对值是除符号位外反码加1。如:+1 -1原码 0000 0001B 1000 0001B 反码:1
13、111 1110B 补码 0000 0001B 1111 1111B 01H 0FFH复习:关于符号数、补码的定义 汇编语言程序设计汇编语言程序设计例3.10 已知一个16位二进制负负数的低8位在内部RAM的NUM单元,高8位在NUM+1单元,试编出能求该16位二进制数的补码绝对值的程序。解:低8位取反加一,进位位留在Cy,高 八位取反,加上进位位,去掉符号位。4.3 简单和分支程序设计ORG 0300HNUM DATA 20HMOV R0,#NUMMOV A,R0CPLAADDA,#01HMOV R0,AINCR0MOV A,R0CPLAADDCA,#00HANLA,#7FHMOV R0,A
14、SJMP$END 源码:汇编语言程序设计汇编语言程序设计例 3.11已 知 VAR单 元(30H)内 有 一 自 变 量 X,请按 如 下 条 件 编 出 求 函 数 值 Y并 将 它 存 入 FUNC(31H)单元的程序。4.3 简单和分支程序设计流程图:MOVJZJNB/JB 汇编语言程序设计汇编语言程序设计例 3.11已 知 VAR单 元(30H)内 有 一 自 变 量 X,请按 如 下 条 件 编 出 求 函 数 值 Y并 将 它 存 入 FUNC(31H)单元的程序。4.3 简单和分支程序设计 ORG 0100HVAR DATA 30HFUNC DATA 31H MOV A,VAR
15、;AX JZ DONE ;若X0,则转DONE JNB ACC.7,POSI ;若X0,则转POSI MOV A,0FFH ;若X0,则A 1 SJMP DONE ;转DONEPOSI:MOV A,01H :A1DONE:MOV FUNC,A ;存Y值 SJMP END源码:先分支后赋值 汇编语言程序设计汇编语言程序设计循环程序由以下四部分四部分组成:1 1、循环初始化、循环初始化位于循环程序开头、做准备工作。如:设置循环计数器(存储循环次数)、工作寄存器(常作为指针)2 2、循环处理、循环处理位于循环体内,重复执行、要求精炼和高效3 3、循环控制、循环控制也在循环体内,由循环计数器修改和条件
16、转移语句组成,控制循环次数。4 4、循环结束、循环结束存放循环结果、恢复各工作单元初值一、循环程序设计 4.4 循环和查表程序设计 汇编语言程序设计汇编语言程序设计循环程序由以下四部分四部分组成:1 1、循环初始化、循环初始化位于循环程序开头、做准备工作。如:设置循环计数器(存储循环次数)、工作寄存器(常作为指针)2 2、循环处理、循环处理位于循环体内,重复执行、要求精炼和高效3 3、循环控制、循环控制也在循环体内,由循环计数器修改和条件转移语句组成,控制循环次数。4 4、循环结束、循环结束存放循环结果、恢复各工作单元初值一、循环程序设计 4.4 循环和查表程序设计 汇编语言程序设计汇编语言程
17、序设计一、循环程序设计 4.4 循环和查表程序设计 流程图:汇编语言程序设计汇编语言程序设计4.4 循环和查表程序设计 一、循环程序设计 例3.11 已知内部RAM的BLOCK单元开始有一无符号数据块,块长在LEN单元,试编出求数据块中各数累加和并存入SUM单元的程序。流程图:DJNZADD A,R1INC为何+1?会否加多了?汇编语言程序设计汇编语言程序设计4.4 循环和查表程序设计 一、循环程序设计 ORG 0200HLENDATA 20HSUMDATA 21H BLOCKDATA 22HCLRAMOV R1,#BLOCKMOV R2,LENINCR2SJMP CHECKLOOP:ADDA
18、,R1 INCR1CHECK:DJNZ R2,LOOP MOV SUM,A SJMP$END源码流程图:汇编语言程序设计汇编语言程序设计4.4 循环和查表程序设计 一、循环程序设计 ORG 0200HLEN DATA 20HSUM DATA 21H BLOCK DATA 22H CLR A MOV R2,LEN MOV R1,#BLOCKNEXT:ADD A,R1 INC R1 DJNZ R2,NEXT MOV SUM,A SJMP END源码流程图:汇编语言程序设计汇编语言程序设计4.4 循环和查表程序设计 二、查表程序设计例3.13 已知R0低四位有一个十六进制数(0F中一个),试编出能把
19、它转换成相应ASC码并送入R0的程序。MCS-51指令系统有两条专门的查表指令:MOVC A,A+DPTR MOVC A,A+PC 解:方法1,根据ASC码字符表的规律,0-9的ASC码为30-39H,A-F的ASC码为41H-46H;方法2,在ROM中建表,使用时直接查表 汇编语言程序设计汇编语言程序设计4.4 循环和查表程序设计 二、查表程序设计例3.13 已知R0低四位有一个十六进制数(0F中一个),试编出能把它转换成相应ASC码并送入R0的程序。ORG 0400H0400 E8MOV A,R00401 540FANL A,#0FH0403 2403ADD A,#03H0405 83MO
20、VC A,A+PC 0406 F8MOV R0,A0407 80FESJMP$0409 ASCTAB:DB 0,1,2,3,4 DB 5,6,7,8,9 DB A,B,C,D,E,FEND 源码 汇编语言程序设计汇编语言程序设计4.5 子程序设计 子子程程序序是指完成确定任务并能为其它程序反复调用的程序段;1、调用时,使用LCALL或ACALL指令;2、返回时,子程序末尾使用RET返回指令3、子程序的第一条指令地址称为子程序的入口地址。4、计算机能自动保护和恢复主程序的断点地址。但各工作寄存器、特殊功能寄存器和内存单元中内容,如果需要保护和恢复的话,就必须在子程序开头和末尾安排一些能够保护和恢
21、复它们的指令。汇编语言程序设计汇编语言程序设计4.5 子程序设计 例 3.15 设内部数据存储器MDA和 MDB内有两数 a和 b,请编出求c=ab并把 c送入 MDC的程序。设a和b皆为小于10的整数。ORG 1000HMDA DATA 20HMDB DATA 21HMDC DATA 22HMOV A,MDAACALL SQRMOV R1,AMOV A,MDBACALL SQR源码ADD A,R1MOV MDC,ASJMP$SQR:ADD A,#01HMOVC A,A+PCRETSQRTAB:DB 0,1,4,9,16DB 25,36,49,64,81END 汇编语言程序设计汇编语言程序设计4.5 子程序设计 例 3.15 设内部数据存储器MDA和 MDB内有两数 a和 b,请编出求c=ab并把 c送入 MDC的程序。设a和b皆为小于10的整数。平方和子程序的两种实现方式SQR:ADD A,#01HMOVC A,A+PCRETSQRTAB:DB 0,1,4,9,16DB 25,36,49,64,81ENDSQR:MUL AB RET