第三章 汇编程序设计
第3章汇编程序设计PPT教学课件

BIGE _THING DD ?;定义一个双字
+1 43H
BIG _ THING
56H
变量就代表低字节的 单元地址
2020/12/10
思考: MOV THING,13 的操作数寻址方式
14
定义数据表:
POWERS DB 1,2,4,8,16
ALL DB 0,0,0,0
ALL DB 4DUP(0)
类型 PTR 表达式 TW DW 23 MOV AL,BYTE PTR TW THIS:类型在THIS中指定,段地址和段内偏移量就是汇 编时的当前值。 EQU THIS 类型 MYDATA SEGMENT BB EQU THIS WORD BUFF DB 100 DUP(0) MYDATA ENDS
3.标号:某条指令所存放存储单元的符号地址,它 是转移指令或调用指令的目标操作数,属性 包 括 段值、偏移量和类型(NEAR,FAR)。
2020/12/10
NEAR—转移指令或调用指令与此标号所指的语句 或过程在同一段内,所以只需要改变IP。
FAR—转移指令或调用指令与此标号所指的语句 或过程不在同一段内,所以不但需要改变IP, 还要改变CS。
2020/12/10
11
3.3指示性语句
符号定义语句 数据定义语句 段定义语句 过程定义语句 结束语句
2020/12/10
12
3.3.1符号定义语句
1. 等值语句 EQU
符号名 EQU 表达式或常量或符号名
COUNT EQU CX
EQU语句在未解除前,不能重新定义
2. 等号语句 = 能对符号进行再定义。
第3章 汇编语言程序设计
3.1汇编语言的格式
3.2语句行的构成
汇编第3章-汇编语言程序设计

另外还要按被调用的功能的要求在指
定的寄存器中放一定的数据,称为入 口参数,使用不同的功能需要不同的 入口参数。 如果操作有需要交给用户程序的数据, 将放在特定的寄存器或内存中,称为 出口参数。调用完成后,用户程序可 以从那些特定的寄存器或内存中取出 数据使用,或者判断操作完成的情况。
1.DOS的1号子功能——单字符输入
(6)
MUL (7) MUL (8) MUL (9) MUL
⑽
BYTE PTR [BP+DI];正确 DS ;错误 1024H ;错误 [BX] ;错误
MUL AX, BX ;错误
5.
DIV指令 【指令格式】DIV S 【功能】完成无符号数的除法运算。 根据S的类型分两种情况:如果S是字 节型,则用AX的值作为被除数,S作为 除数,运算结果:字节型的商放到AL 中,字节型的余数放到AH中;如果S是 字型,则DX、AX组成32位的被除数,S 作为除数,计算结果:字型的商放到 AX中,字型的余数放到DX中。
【功能】从键盘上读取一个按键的
ASCII码值。 【具体操作】: (1) AH中放子功能号1; (2) [入口参数] 无; (3) INT 21H 软中断调用 (4) [出口参数] AL中是按键的ASCII 码值。
[说明]
该功能只要求在执行INT
21H指令时AH 中的值是1,而不论AH是在何时、以何 种指令被赋的值,这一点对所有DOS系 统功能调用都是一样的。 调用时,计算机的屏幕上将出现一个 闪烁的光标,等待操作人员按键;当 有键被按下后,取出该按键的ASCII值 放入AL。
表3-1 特殊输出效果相应的ASCII码值
【例3-6】
编写程序段完成回车换
汇编语言程序设计(第四版)第3章【课后答案】

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第3章汇编语言程序格式〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用?〔解答〕伪指令语句与硬指令语句的本质区别是能不能产生CPU动作;伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。
〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成?〔解答〕为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符;汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。
〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
〔解答保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。
汇编语言对大小写不敏感。
如定义字节数和字符串的DB就是伪指令助记符。
〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成?〔解答〕汇编语句有执行性语句和说明性语句;执行性语句由标号、硬指令助记符、操作数和注释四部分组成;说明性语句由名字、伪指令助记符、参数和注释四部分组成〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
〔解答〕⒈编辑文本编辑程序汇编语言源程序.asm⒉汇编汇编程序目标模块文件.obj⒊连接连接程序可执行文件.exe或.com⒋调试调试程序应用程序〔习题3.6〕区分下列概念:(1)变量和标号(2)数值表达式和地址表达式(3)符号常量和字符串常量〔解答〕(1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。
(2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。
第3章-汇编语言程序设计

SP指向栈底;
若未定义堆栈段,则由系统指定堆栈,SS:SP也由系统自动
设置。
第三章
(4)程序的结束
程序中一定要有结束语句,通常是
微
MOV AH,4CH
机
及
INT 21H
测
控
技
术
第三章 3.4 汇编程序设计举例
1、顺序结构程序设计
微 顺序程序设计是相对于分支程序和循环程序设计而言的。因此,可以说顺
MOV AH,4CH
INT 21H
CODE ENDS
END FMAX
第三章
3、循环程序设计 有时我们会需要能按一定规律,多次重复执行的一串语句,这
微 类程序叫循环程序。 机 及 测 控 技 术
第三章
循环程序一般由四个部分组成:
微 (1)准备部分:这是为了保证循环程序能正常进行循环操作 机 而必须做的准备工作。(2)工作部分:即需要重复执行的程 及 序段。这是循环的中心,称之为循环体。 测 (3)循环调整部分:按一定规律修改操作数地址及控制变量, 控 以便每次执行循环体时得到新的数据。 技 (4)出口判断部分:用来保证循环程序按规定的次数或特写 术 条件正常循环。
术 AX:用来记录负元素的个数,初值为0。
字变量R用来存放负元素的个数。
第三章
源程序如下:
STACK SEGMENT STACK DB 200 DUP(0)
微 STACK ENDS
机 DATA SEGMENT
及 测
BUF DB -2,5,-3,6,100 DB 0,-20,-9,8,-110,20
控 SSEG ENDS
技 DATA SEGMENT
术
ARG DW 7138H,84A6H,29EH CN EQU $-ARG
汇编语言程序设计(第二版)第3章

汇编语言在系统编程、嵌入式 系统、操作系统开发等领域具 有广泛应用。
汇编语言的应用领域
系统软件
操作系统、编译器等核心组件通常使用汇编语言 编写。
游戏开发
游戏引擎和某些性能敏感的部分可能会使用汇编 语言以提高性能。
嵌入式系统
对于资源有限的微控制器和特定硬件设备,汇编 语言是实现高效控制的理想选择。
本章学习目标
THANKS
感谢观看
汇编语言调用C语言程序
嵌入C语言代码
01
在汇编语言程序中,可以直接嵌入C语言代码,通过编译器将其
编译成目标代码。
调用C语言函数
02
汇编语言程序可以直接调用C语言函数,通过函数指针或内联汇
编实现。
数据共享
03
汇编语言程序和C语言程序之间可以通过全局变量或内存映射的
方式实现数据共享。
汇编语言与C语言的混合编程实例
顺序程序设计是程序中最基本的结构之一,它构成了程序的基本框架。 在顺序程序中,程序按照指令的顺序执行,每条指令完成一个特定的操 作,从而实现了程序的逻辑功能。
顺序程序设计需要注意指令的执序的效率和可读性,尽量减少不必要 的操作和重复计算。
01
掌握汇编语言的语法和指令集。
02
理解汇编语言程序的结构和流程控制。
03
学习如何使用汇编语言进行系统调用和底层编程。
02
汇编语言基础
汇编语言的指令系统
指令系统概述
指令系统是计算机硬件能够理解和执 行的基本命令集合,是汇编语言的基 础。
01
02
数据传输指令
用于在寄存器、内存和输入/输出设备 之间传输数据,如MOV指令。
分支程序设计
分支程序设计是指根据条件判断结果选择不同的执行路径的过程。在汇编语言中,分支程序设计通常 使用跳转指令实现程序的流程控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3-1讲 第3章 单片机汇编语言程序设计【课 题】MCS-51汇编语言编程【授课方法】在专业教室讲授,举例说明汇编语言编程应用。
【目的要求】了解本课程汇编语言编程的基础知识;理解MCS-51汇编语言编程方法;掌握MCS-51汇编语言编程相关规定和硬件知识。
【重点难点】灵活运用与编程有关的规定。
【教学过程】1、复习 2、程序设计的重要性 3、程序设计方法汇编语言程序设计微型机应用离不开应用程序的设计。
单片机程序设计多采用汇编语言编写。
本章介绍MCS51系统汇编语言程序编写的一般知识:有关规定、习惯用法、常见程序结构和编程方法。
要学会编写程序应掌握编程的一般知识,还要分析一些经典程序,从修改现有程序入手,先简后难,循序渐进,最后达到自已设计应用系统和编写程序的目的。
3.1 单片机汇编程序设计方法与流程3.1.1 汇编语言程序设计步骤用汇编语言编制程序的过程,称为汇编语言程序设计。
通常,汇编语言程序设计的步骤如下:整个汇编程序设计的流程图见图3.1,当然、短小程序可能不要这么复杂。
1、设计规划,建立数学模型设计前对项目作评估和规划,程序功能、运算精度、执行速度、各硬件特点、掌握设计的重点和难点。
2、选择适当的算法对于同一个任务,往往可用不同的程序实现。
此时应结合所用机器的指令系统,对不同的算法进行分析比较,经各方面综合考虑选择一种最佳算法,使程序精简,且执行速度快。
3、程序结构的设计程序结构设计是把所采用的算法转化为汇编语言程序的准备阶段,特别是对于情况复杂的大型课题,必须进行程序结构设计。
它可以分为模块化程序设计、结构程序设计及自顶向下设计等。
设计课题 划 设计规算法模型绘流程程图编 制序汇编 调试试运行完成修改程序修改修改规划算法流程仿真图3.1汇编语言程序设计流程图.4、编制汇编语言程序根据确定的算法及所选用的程序结构就可以绘制流程图,根据流程图并结合所选用的指令系统就可写出相应的汇编语言源程序。
5、汇编语言程序的调试汇编语言程序编好后必须进行调试,因为所编制的程序难免有错误,且程序需要优化。
3.1.2编制程序的流程图1、程序流程图的作用采用流程图表示法,可以直观形象地表示各部分的逻辑关系及程序结构。
方便地发现和分析程序算法存在的错误,便于掌握和进行交流。
所以,流程图是程序设计的重要工具。
2、程序流程图的组成程序流程图是用几何图形配以文字说明来描述程序的。
它不但形象地描述程序执行的过程而且清楚地表达程序结构的内在联系。
流程图中所采用的各种常用符号如下:(1)端点图它是一个圆形框(如图3.2 中开始和结束)表示程序的起止等相应的文字(2)流程线流程线如图3.2线条所示,它表示程序执行的流向。
(3)处理框处理框如图3.2所示,该框表示一种处理功能或者程序执行的过程。
框内用文字简要说明一段程序的功能或处理过程。
(4)判断框判断框如图3.2所示,该框用于指示一个判定点,从这点产生分支。
在框内应注明测试条件,而测试结果则注明在各分支流程线上。
(5))子程序框子程序框如图3.2所示,该框表示调用子程序,在该框内填入相应的子程序名称或入口地址。
图 3.2 流程图中常用符号如果要解决的问题较为复杂,通常设计“粗细”不同的程序流程图。
首先设计粗图框,力求反映编程者的总体设计思想及总体结构并侧重于模块之间的相互联系;然后设计详细框图,此时应侧重各个模块的具体实现。
当然、一个简单的程序也可直接写出,但要成为一个优秀的设计人员,开始就要养成良好的习惯,掌握大量的设计素材,学习他人经验。
3.1.3 单片机程序结构1 伪指令用汇编语言编写的程序通常需经过微机汇编变成机器码才能被执行。
为了对源程序汇编,在源程序中必须使用一些“伪指令”。
伪指令是便于程序阅读和编写的指令,它即不控制机器的操作也不能被汇编成机器代码,只为汇编程序所识别的常用符号,并指导汇编如何进行,故称为伪指令。
已是大家公认的习惯用法,MCS-51系列单片机的常用伪指令如下:1)、起始地址伪指令ORG起始地址伪指令ORG是用来规定目标程序段或数据块的起始地址。
通常,在汇编语言程序开始处均用ORG伪指令指定程序存放的起始地址。
2)、汇编结束伪指令END汇编结束伪指令END是用来告诉汇编程序,此源程序到此结束。
在一个程序中,只允许出一条END语句,而且必须安排在源程序的末尾。
否则,汇编程序对END语句后的所有语句都不进行汇编,3)、赋值伪指令EQU赋值伪指令EQU用于告诉汇编程序,将该伪指令右面的值赋给左面用户定义的符号,其格式如例题。
由EQU赋值的字符名称在源程序中可以作为数值使用,也可以作为数据地址、代码地址或位地址。
由EQU伪指令所定义的符号必须先定义后使用。
故该语句通常放在程序开头处。
例3.1BUFFER EQU 58H ;BUFFER的值是58HBLOCK EQU ADDER ;将标号ADDER赋值给字符名称BLOCKORG 4000H ;该语句下面的程序从4000H开始4000H E5F0 START:MOV A,B4002H 30E7 JNB ACC.7,DONE4004H F4 CPL A4005H F5FO DONE:MOV B,A4007H F558 MOV BUFFER,AEND4)、定义字节伪指令DB定义字节伪指令DB是用于告诉汇编程序从指定的地址单元开始定义若干个字节存储单元的内容。
其格式见练习二。
5)、定义字伪指令DW定义字伪指令DW是用来告诉汇编程序从指定的地址单元开始,定义若干个16位数据。
其格式如DB用法相同,只是一次定义16位数。
由于一个字长为16位,故要占两个存储单元。
在MCS-51单片机系统中,16位的高8位存入低地址单元,低8位存入高地址单元。
6)、数据地址赋值指令DATA数据地址赋值伪指令DATA是用于告诉汇编程序,把由表达式指定的数据地址或代码地址赋予规定的字符名称.DATA伪指令的功能是和EQU指令相似,但DATA伪指令所定义的符号可先使用后定义。
在程序中它常用来定义数据地址,该语句一般放在程序的开头或末尾。
7)、位地址赋值伪指令BIT位地址赋值伪指令BIT是用于告诉汇编程序,把位地址赋予规定的字符名称,常用于位处理的程序中,机器汇编通常是在PC机上用软件MedWin/QTH-8052F/EDIT等编辑,用编程器将程序固化在芯片内,供单片机运行。
3.1.4 汇编语言源程序人工汇编1、汇编程序的汇编过程用汇编语言编写的源程序必须通过汇编程序的汇编,才能使源程序转换成相应的由机器码指令组成的目标程序。
较长的程序一般采用微机汇编,短小程序或练习程序也用手工汇编。
2、人工汇编在单片机配套的计算机系统上,一般都配备汇编程序,其它微机需另外安装相应的软件,对于简单的实验程序可进行人工汇编,还会有一定好处,学生根据指令表一条条地将汇编语言程序的语句翻译成机器码指令,放到相应的地址,最后得到可运算的目标程序。
练习一二次后可掌握基本方法,本书中的练习有的给了机器码,有的没给,大家可参考、练习汇编。
3-2 单片机汇编语言程序设计【课题】MCS-51汇编语言程序设计初步【授课方法】在专业教室讲授【目的要求】了解本课程汇编语言编程的基础知识;理解MCS-51汇编语言编程方法;掌握MCS-51汇编语言顺序、分支、循环、子程序结构【重点难点】编程相关的技巧很多、全面掌握难度较大。
【教学过程】复习、单片机汇编语言编程初步、顺序、分支程序【教学内容】3.2 单片机汇编语言程序设计初步前面我们已学习了几个小程序,对程序有了初步了解,知道汇编语言是面向机器语言。
单片机汇编语言程序设计与所使用的机器的内部结构都有密切的关系。
必须充分了解所使用机器的“硬件环境”,才能着手进行汇编语言程序设计。
特别是在编制I/O接口程序时还需了解I/O接口电路、机器及外设的外特性。
为了设计一个高质量的程序,必须掌握程序设计的一般方法。
在汇编语言程序设计中,普遍采用结构化程序设计方法。
采用这种设计方法的主要依据是任何复杂的程序都可由顺序结构、分支结构及循环结构程序等构成。
每种结构只有一个入口和出口,整个程序也只有一个入口和出口。
结构程序设计的特点是程序的结构清晰、易于读写、易于验证、可靠性高。
下面主要介绍结构化程序设计的基本的程序设计方法。
3.2.1、顺序程序设计1、顺序结构顺序结构是程序结构中最简单一种。
用程序流程图表示时,是一个处理框紧接着一个处理框。
在执行程序时从第一条指令开始顺序执行直到最后一条指令为止。
例3.2 设有16位二进制数存放在8031单片机内部RAM的50H及51H单元中,要求将其算术左移一位(即原数各位均向左移1位,最低位移入0)后仍存放在原单元。
试编制相应的程序。
(5672H=01010110 01110010→10101100 11100100=ACE4H)分析:由于MCS-51系列单片机的指令系统只有8位二进制数的算术移位指令,而无16位二进制数的算术移位指令。
因此,要实现16位数的算术左移1位,只能分两次进行。
开始时将进位标志C清0,先进行低8位带进位循环左移,将低8位中的原最高位移至C,而C原来的0移至最低位。
然后进行高8位带进位循环左移,原低8位中最高位经C移至高8位中的最低位。
这样就实现了16位二进制数算术左移一位。
程序如下:4000 ORG 4000H4000 C3 BIHROL: CLR C ;C清04000 E551 MOV A,51H;低8位左环移一位4003 33 RLC A4004 F551 MOV 51H,A4006 E550 MOV A,50H,;高8位左环移一位4008 33 RLC A4009 F550 MOV 50H,A400B END本程序共有7条指令占用11个字节的程序存储空间。
例3.3 设在8031单片机内部RAM的40H单元中存放一个8位二进制数,请将其转换成相应的BCD码并由高位到低位顺序存入内部RAM以60H为首址的3个连续单元中。
试编写相应的程序。
注:单片机指令默认的数是十六进制,大家日常用十进制。
分析:要求是:80H=128D→01/02/08或0F3H=243D→02、04、03由于51系列单片机的指令系统中有除法指令,故它的转换可用运算实现。
先将此数除以100,其商即为百位数;再将余数除以10,其商即为十位数,而此时的余数即为个位数。
程序如下:ORG 4000HBINBCD: MOV RO, #60H ;设置存数地址指针R0初值MOV A,40H ;取被转换的二进制数MOV B,#100 ;置除数为100或64HDIV AB ;除以100,求百位数MOV @RO,A ;将百位数指定单元INC RO ;修改指针MOV A,#10 ;置除数为10XCH A,BDIV AB ;除以10,求十位数MOV @RO,A ;将十位数指定单元INC RO ;再次修改指针XCH A,B ;A中为个位数MOV @RO,A ;送个位数END ;结束例3.4 设在8031单片机的外部RAM的60H单元存有1字节代码,要求将其分解成两个4位字段。