单片机原理及应用_哈尔滨工业大学_5 第4讲程序设计基础_2 42伪指令

合集下载

第三章伪指令与程序设计

第三章伪指令与程序设计

第三章伪指令与程序设计单片机原理 与应用技术》教学课件
符号名称 BIT 位地址 将位地址的值赋予符号名称。程序中凡出现该 符号名称就代表该位地址。
DB 8位数据[或8位数据组] 将8位数据[或8位数据组]顺序存放在此后的存 储单元中。占相应数量的存储空间。
DW 双字节数据[或双字节数据组] 将双字节数据[或双字节数据组]顺序存放在此后 的存储单元中。占据相应存储空间。
方法2:利用半字节交换指令来实现。
第三章伪指令与程序设计
方法1:
PC
···
PC
PC
B 000110 01000
A 000110 0011 PC
···
PC
22H
PC
21H
PC
20H 0011 0100 PC
···
ORG 0000H MOV A,20H MOV B,#10H
开始 (20H)A 10HB
实例:前面的延时程序:(DELAY)
DELAY: MOV R3, #OFFH DEL2: MOV R4,#0FFH DEL1: NOP
NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET
第三章伪指令与程序设计
循环程序的组成:
1. 初始化部分(设定循环次数等) 2. 循环体(重复执行的部分,用于完成
第三章伪指令与程序设计
开始
X,Y符号相同? N Y
X-Y
N
X=Y?
Y
Y
Y
CY=1
N
X>0? N
X>Y,点 亮P1.1
X=Y,点 亮P1.0
X<Y,点 亮P1.2
结束 第三章伪指令与程序设计
X DATA 20H

第4章(伪指令)

第4章(伪指令)

为第二操作数使用的,而ARM对数字常量的第二操作数有诸多
限制(必须为移位后构成的数),给寄存器加载一个任意数往往不 能使用一条指令实现,而使用伪操作LDR则可以解决此类问题。
第4章 嵌入式式程序设计基础
第4章 嵌入式程序设计基础 ·举例
第4章 嵌入式程序设计基础 该指令常用于加载芯片外围功能部件的寄存器地址(32位立 即数),以实现各种控制操作: a. 读控制寄存器 ……
据域(即MAP定义的内存表要和引用内存表的LDR指令相距不超
过4KB)。
第4章 嵌入式程序设计基础
第4章 嵌入式程序设计基础
2.3.2.3 内存单元分配伪操作
a. 功能 该伪指令用来分配一片连续的存储区域并将其初始化为0, 也可以用“%”来代替。 b. 语法
第4章 嵌入式程序设计基础 2.3.2.4 字节分配内存单元伪操作DCB
a. 功能
用来分配一段连续的双字内存单元,并用双精度的浮点数初 始化,DCFD分配的内存字对齐,DCFDU则不一定。 b. 语法
第4章 嵌入式程序设计基础 2.3.2.8 字分配内存单元伪操作DCFS和DCFDU
a. 功能
用来分配一段连续的字内存单元,并用单精度的浮点数初 始化,DCFS分配的内存字对齐,DCFSU则不一定。 b. 语法
• SETL—给一个逻辑变量赋值 • SETS—给一个字符串变量赋值
第4章 嵌入式程序设计基础 d.定义通用寄存器列表名称伪操作
该伪操作定义的寄存器列表主要用在堆栈操作或LDM/STM
多寄存器传送指令中。
第4章 嵌入式程序设计基础 2.2 语法
第4章 嵌入式程序设计基础 2.3 数据定义伪指令
器将其转化为LDR r0, [ PC,#offset ]的形式。

单片机原理与应用第4章参考答案

单片机原理与应用第4章参考答案

第4章 AT89S51汇编语言程序的设计与调试参考答案1.答:伪指令是程序员发给汇编程序的命令,只有在汇编前的源程序中才有伪指令,即在汇编过程中的用来控制汇编过程的命令。

所谓“伪”是体现在汇编后,伪指令没有相应的机器代码产生。

常用伪指令及其功能如下:ORG(ORiGin)汇编起始地址命令;END(END of assembly)汇编终止命令;EQU(EQUate)标号赋值命令;DB(Define Byte)定义数据字节命令;DW(Define Word)定义数据字命令;DS(Define Storage)定义存储区命令;BIT 位定义命令2.答:手工汇编:通过查指令的机器代码表(表3-2),逐个把助记符指令“翻译”成机器代码,再进行调试和运行。

这种人工查表“翻译”指令的方法称为“手工汇编”。

机器汇编:借助于微型计算机上的软件(汇编程序)来代替手工汇编。

通过在微机上运行汇编程序,把汇编语言源程序翻译成机器代码。

反汇编:将二进制的机器码程序翻译成汇编语言源程序的过程称为“反汇编”。

3.答:从1000H开始的各有关存储单元的内容(16进制)如下:4D 41 49 4E 12 34 30 0000 704.在编写子程序时应注意以下问题:(1)子程序的第一条指令前必须有标号。

(2)主程序调用子程序,有如下两条子程序调用指令:①绝对调用指令ACALL addr11。

被调用的子程序的首地址与绝对调用指令的下一条指令的高5位地址相同,即只能在同一个2KB区内。

②长调用指令LCALL addr16。

addr16为直接调用的目的地址,被调用的子程序可放置在64KB程序存储器区的任意位置。

(3)子程序结构中必须用到堆栈,用来保护断点和现场保护。

(4)子程序返回时,必须以RET指令结束。

(5)子程序可以嵌套,但要注意堆栈的冲突。

5.答:参考程序如下:MOV A,45HANL A,#0FHORL A,#0FHMOV 45H,A6.答:A=80H ,SP=40H,(41H)=50H,(42H)=80H ,PC=8050H7.答:参考程序如下:START:MOV R0,#30HMOV R2,#20HLOOP: MOV A,@R0CJNE A,#0AAH,NEXTMOV 51H,#01HLJMP EXITNEXT: INC R0DJNZ R2,LOOPMOV 51H,#00HEXIT: RET8.答:参考程序如下:START:MOV 41H,#0MOV R0,#20HMOV R2,#20HLOOP:MOV A,@R0JNZ NEXTINC 41HNEXT: INC R0DJNZ R2,LOOPRET9.答:参考程序如下:ORG 0100HMOV R2, #20H 要比较的数据字节数MOV A , #21HMOV R1 , ADEC R2MOV A , @R1LOOP: MOV R3,ADEC R1CLR CSUBB A,@R1JNC LOOP1MOV A,@R1SJMP LOOP2LOOP1: MOV A,R3LOOP2: DJNZ R2, LOOPMOV @R0,ARET10.答:(1)SP=SP+1=61H (61H)=PC的低字节=03HSP=SP+1=62H (62H)=PC的高字节=20H(2)PC=3456H(3)不可以(4)2KB=2048 Byte11.答:可对程序做如下修改:ORG 0100HDEL: MOV R7, #200DEL1: MOV R6, #123 ;将原来的立即数125改为123DEL2: DJNZ R6, DEL2NOP ;增加的指令DJNZ R7, DEL1RET程序修改后的延时时间为:1+(1+123*2+1+2)*200+2=50003us=50.003ms。

哈工大单片机原理与应用满分实验报告

哈工大单片机原理与应用满分实验报告

H a r b i n I n s t i t u t e o f T e c h n o l o g y单片机原理与应用实验报告学生姓名学号 11105103班级 1105103专业通信工程任课教师张云所在单位电子与信息工程学院2014年4月软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。

二、实验内容把2000~20FFh的内容清零。

三、程序框图四、实验过程实验过程:根据流程图编写代码,通过Dais进行仿真验证实验原理:对目标段内容分别赋值00H,并通过循环与判断完成段内容的分别赋值。

五、实验结果及分析1、2000H~20FFh中的内容是什么?答:程序对2000H~20FFH进行了清零操作,2000H~20FFH中的内容全为00H。

六、实验源程序;清零程序ORG 0640HMOV DPTR,#2000HMOV A,#00HMOV R0,#0FFHMOVX @DPTR,ALOOP: INC DPTRMOVX @DPTR,ADJNZ R0,LOOPEND实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。

二、实验内容把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序流程四、实验过程实验过程:根据流程图编写代码,通过Dais进行仿真验证实验原理:把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零。

五、实验结果及分析如果将2001h、2002h高位置1,程序该如何修改?答:修改程序如下:ORG 0640HMOV DPTR,#2000H ;(2000H)送DPTRMOVX A,@DPTRSWAP AANL A,#FFH ;修改之处INC DPTRMOVX @DPTR,AMOV DPTR,#2000H ;(2000H)送DPTR MOVX A,@DPTRANL A,#FFH ;修改之处INC DPTRINC DPTRMOVX @DPTR,ASJMP $END六、实验源程序;拆字程序ORG 0660HMOV DPTR,#2000HMOVX A,@DPTRSWAP AANL A,#0FHMOV DPTR,#2001HMOVX @DPTR,AMOV DPTR,#2000HMOVX A,@DPTRANL A,#0FHMOV DPTR,#2002HMOVX @DPTR,AEND实验三拼字程序一、实验目的进一步掌握汇编语言设计和调试方法。

单片机原理及应用-第4章 汇编语言程序设计

单片机原理及应用-第4章 汇编语言程序设计

3.高级语言 高级语言是一种面向算法、过程和对象的 程序设计语言,它采用更接近人们自然语 言和习惯的数学表达式及直接命令的方法 来描述算法、过程和对象。高级语言的语 句直观、易学、通用性强,便于推广、交 流,但高级语言编写的程序经编译后所产 生的目标程序大,占用内存多,运行速度 较慢。
4.1.2 汇编语言程序设计步骤 1.分析题意,明确要求。 2.确定算法。 根据实际问题的要求、给出的条件及特点, 找出规律性,最后确定所采用的计算公式 和计算方法,这就是一般所说的算法。算 法是进行程序设计的依据,它决定了程序 的正确性和程序的指令。处理框流程线判 断框起止框 3.画程序流程图,用图解来描述和说明解题 步骤。
(2)END 汇编终止命令
汇编语言源程序的结束标志,用于终止源程 序的汇编工作。在整个源程序中只能有一 条END命令,且位于程序的最后。
(3)DB(Define Byte)定义字节命令 在程序存储器的连续单元中定义字节数据。 例如 ORG 2000H DB 30H,40H,24,“C”,“B” 汇编后: (2000H)=30H (2001H)=40H (2002H)=18H(10进制数24) (2003H)=43H(字符“C”的ASCII码) (2004H)=42H(字符“B”的ASCII码)
(4)DW(Define Word)定义数据字命令 从指定的地址开始,在程序存储器的连续单元中 定义16位的数据字。 例如 ORG 2000H DW 1246H,7BH,10 汇编后: (2000H)=12H ;第1个字 (2001H)=46H (2002H)=00H ;第2个字 (2003H)=7BH (2004H)=00H ;第3个字(2005H)=0AH (2005H)=0AH
ORG 0400H MOV A,R0 ANL A,#0FH CJNE A,#10,NEXT1 NEXT1:JNC NEXT2 NEXT2:ADD A,#30H SJMP DONE NEXT2:ADD A,#37H DONE:MOV R0,A SJMP $ END

第四章 伪指令

第四章  伪指令

数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT) 表达式1,表达式2,… 表达式1,表达式2……是给变量或指定的存储单元赋予初值,它们有以下几种形式: (a)数值表达式 数据定义伪指令可以为一个或连续的存储单元设置数值初值。 (b)字符串表达式 对于DB伪指令,字符串的长度允许超过2个字符,但不能超过255个字符,字符 串必须用单引号括起来,它可为字符串中的每个字符分配1字节单元,字符串 从左至右以字符的ASCII码形式按地址递增的顺序依次存放。 (c)?表达式 不带引号的?,用于为变量预留内存单元,暂时不存入数据,即表示所定义的 变量无确定的初值。 例如:A DW ?,?为变量A预留2个字单元。 (d)地址表达式 操作数为地址表达式时,只适用于DW和DD这两种数据定义伪指令。如果地址表 达式为一变量(标号)名,用DW伪指令则是取它的偏移地址来初始化变量;用 DD伪指令则是取它的段首地址和偏移地址来初始化变量。 (e)带DUP的表达式 格式为:n DUP (表达式),其中n为重复因子,只能取正整数,它表示定义了 n个相同的数据存储单元。
在8086汇编语言中,运算符分为:算术运算符、逻辑运算符、关系运算
符、数值返回运算符、属性运算符和字节分离运算符。
(一)、表达式
(1)数值表达式 数值表达式是由常量与算术运算符、逻辑运算符或关系运算符构成的有意 义的式子。数值表达式在汇编期间进行运算,运算结果为一数值常量,它 只有大小而没有属性。
数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT)
Байду номын сангаас
表达式1,表达式2,„
其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的地址; DB、DW、DD、DQ和DT是伪指令符,具体一条数据定义伪指令取5种之一。 DB定义的是字节类型的变量,每个表达式被分配1个字节单元。 DW定义的是字类型的变量,每一个表达式被分配1个字单元(2个字节)。 DD定义的是双字类型的变量,每一个表达式被分配2个字单元(4个字节)。 DQ定义的是四字类型的变量,每一个表达式被分配4个字单元(8个字节)。 DT定义的是十字节类型的变量,每一个表达式被分配10个字节单元。

《单片机原理及应用教程》第4章:单片机的程序设计

《单片机原理及应用教程》第4章:单片机的程序设计

4.3.4 子程序
2. 子程序举例
例1 将单字节16进制整数转换成单字节BCD码整数的子程序。 入口条件:待转换的单字节16进制整数在累加器A中。 出口状态:转换后的BCD码整数(十位和个位)仍在累加器A中,百位 在R3中。 CHBCD: PUSH PSW ;保护现场 PUSH B MOV B, #100 DIV AB ;(A)←BCD码的百位 MOV R3, A ; (R3)←BCD码的百位 MOV A, #10 ;余数继续分离十位和个位 XCH A, B DIV AB ;(A)←BCD码的十位 SWAP A ORL A, B ;将十位和个位拼装成BCD码 POP B ;恢复现场 POP PSW RET
;暂存部分积
;R3×R6 ;累加部分积
;R2×R6
;累加部分积
; R2×R7
4.3.2 分支程序
例1 在内部RAM单元 的30H和31H中各有 一无符号数,试比较 其大小,大数存入 40H单元,小数存入 41H单元,若相等则 存入42H单元。程序 流程框图如图4.3所 示。
开 始
A
(30H)
A=(31H)? Y (42H) (A) A<(31H)? (40H) (41H) (A) (31H)
例2 编写双字节无符号数乘法程序。被乘数高字节放在R2中,低字节 存放在R3中,乘数高字节放在R6中,低字节放在R7中。乘积在R2、 R3、R4、R5中。
程序段如下: MOV A, R3 MOV B, R7 MUL AB MOV R4, B MOV R5, A MOV A, R3 MOV B, R6 MUL AB ADD A, R4 MOV R4, A CLR A ADDC A, B MOV R3, A MOV A, R2 MOV B, R7 ;R3×R7 MUL ADD MOV MOV ADDC MOV CLR RLC XCH MOV MUL ADD MOV MOV ADDC MOV AB A, R4 R4, A A, R3 A, B R3, A A A A, R2 B, R6 AB A, R3 R3, A A, R2 A, B R2, A ;累加部分积

微型计算机原理及应用-伪指令

微型计算机原理及应用-伪指令
段定义伪指令
用于定义程序中的代码段、数据段 和堆栈段等逻辑段,如SEGMENT、 ENDS等。
过程定义伪指令
用于定义程序中的子程序或过程,如 PROC、ENDP等。
宏定义伪指令
用于定义程序中可重复使用的宏, 如MACRO、ENDM等。
其他伪指令
包括一些特殊的伪指令,如条件汇 编伪指令、列表控制伪指令等。
03 伪指令在汇编语言中的应 用
简化程序编写
符号定义
使用伪指令可以为常量、 变量和地址等定义易于记 忆的符号,避免硬编码, 提高程序的可维护性。
数据结构声明
伪指令可用于声明数组、 结构体等复杂数据结构, 简化数据组织和管理。
宏定义
通过伪指令定义宏,可以 实现代码片段的复用,减 少重复编写相似代码的工 作量。
未来,高级语言可能会进一步吸收伪指令的优点 ,使得编程更加简便、高效。
智能化编程辅助工具的发展
随着人工智能技术的进步,未来可能会出现更加 智能化的编程辅助工具,这些工具能够自动识别 程序员意图,推荐合适的伪指令,进一步提高编 程效率。
THANKS FOR WATCHING
感谢您的观看
未来发展趋势预测
伪指令的标准化
随着计算机技术的发展,伪指令的标准化将成为 一个重要趋势,这将有助于提高程序的可移植性 和兼容性。
伪指令在特定领域的优化
针对特定应用领域,伪指令可能会进行专门优化 ,以适应不同场景下的需求。例如,在嵌入式系 统、图形处理等领域,可能会出现更加专业化的 伪指令集。
高级语言与伪指令的融合
提高程序可读性
注释
伪指令可用于添加注释,说明代 码的功能、实现逻辑等,提高程
序的可读性和可理解性。
格式化输出
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
伪指令
Harbin Institute of Technology
主讲人 张毅刚
1
伪指令
- 概述
是汇编语言源程序中应有向汇编程序发出的指示信息,告诉它如何完成 汇编工作。
伪指令不属于指令系统中的汇编语言指令,它是程序员发给汇编程序 的命令,也称为汇编程序控制命令。
只有在汇编前的源程序中才有伪指令。 “伪”体现在汇编后,伪指令 没有相应的机器代码产生。
汇编后
(2000H)=12H
;第1个字
(2001H)=46H
(2002H)=00H
;第2个字
(2003H)=7BH
(2004H)=00H
;第3个字
(2005H)=0AH
8
常用的伪指令
- 定义存储区命令 DS(Define Storage)
5、定义存储区命令 DS
从指定地址开始,保留指定数目的字节单元作为存储区,供程序运行 使用。
5
常用的伪指令
- 标号赋值命令EQU
3、标号赋值命令EQU 用于给标号赋值。赋值后,标号值在整个程序有效。 例如:TEST: EQU 2000H 表示TEST=2000H,汇编时,凡是遇到TEST时,均以2000H来代替。
6
常用的伪指令
- 定义数据字节命令DB(Define Byte)
4、定义数据字节命令DB
错误的例子(地址交叉): ORG 2500H …… ORG 2000H …… ORG 3000H ……
4
常用的伪指令
- 汇编终止命令END
2、汇编终止命令END 源程序结束标志,终止源程序的汇编工作。整个源程序中只能有一
条END命令,且位于程序的最后。如果END出现在程序中间,其后的源程 序,将不进行汇编处理。
START:MOV A,#00H ……
即规定标号START代表地址为2000H开始。 在一源程序中,可多次用ORG指令,规定不同的程序段的起始地址。 但是,地址必须由小到大排列,且不能交叉、重叠。
3
常用的伪指令
- 汇编起始地址命令ORG
1.ORG(ORiGin)汇编起始地址命令
正确的例子: ORG 2000H …… ORG 2500H …… ORG 3000H ……
伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇编、 分配存储空间等功能。
不同汇编语言的伪指令有所不同,但基本内容相同。
2
常用的伪指令
- 汇编起始地址命令ORG
1.ORG(ORiGin)汇编起始地址命令 源程序的开始,用一条ORG伪指令规定程序的起始地址。如果不用
ORG,则汇编得到的目标程序将从0000H地址开始。例能是从指定单元开始定义(存储)若干字节,十进制数 自然转换成十六进制数,字母按ASCII码存储。
7
常用的伪指令
- 定义数据字命令DW (Define Word)
4、定义数据字命令DW
该命令用于从指定的地址开始,在程序存储器的连续单元中定义16位的数
据字。
ORG 2000H
DW
1246H,7BH,10
例如:
QA
BIT P1.6
功能是把P1.6的位地址赋给变量QA。
10
TABEL:DS
10
表示从TABEL代表的地址开始,保留10个连续的地址单元。
ORG 2000H
DS
10 H
表示从2000H地址开始,保留16个连续地址单元。
注意:DB、DW和DS命令只能对程序存储器有效,不能对数据存储器使用。
9
常用的伪指令
- 位定义命令 BIT
6、位定义命令BIT
用于给字符名称赋以位地址,位地址可以是绝对位地址,也可是符号 地址。
用于从指定的地址开始,在程序存储器连续单元中定义字节数据。
例如: ORG
2000H
DB
30H,40H,24,"C","B"
汇编后
(2000H)=30H
(2001H)=40H
(2002H)=18H(十进制数24)
(2003H)=43H(字符“C”的ASCII码)
(2004H)=42H(字符“B”的ASCII码)
相关文档
最新文档