单片机汇编共17页文档
BRCH:JC NEXT
;若该数小,则进行下一次循环
XCH A,MAX
;若该数大,则与MAX交换
NEXT:INC R0
;为下一次循环做准备
DJNZ LEN,LOOP ;判断循环次数
SJMP $
END
返回
例题4:R0的低四位对应一个16进制数码,编写程序,将该数码对应 字符的ASCII编码送入R1。(例如:若R0的低4位为1110B,对应16 进制数码E,则将字符’E’的ASCII码送入R1)
汇
;(1002H)=8AH,(1003H)=00H,(1004H)=0AH,(1005H)=00H
编
语 g. DS(存储空间定义)伪指令
言
[标号:] DS 项或项表
格 例: SPC: DS 08H; 从SPC地址开始,预留8个存储单元
式
DB 25H ; (SPC+8)=25H
及 h. BIT(位地址赋值)伪指令
循 解:
环
ORG 1000H和MV A, R0查ANL A, #0FH
表
ADD A, #03H
程
MOVC A, A+PC ; 查表指令
序
MOV R1, A ;指令长度为一个字节
设
SJMP $ ;指令长度为两个字节
计 ASCTAB:DB ‘0’, ‘1’, ‘2’, ‘3’, ‘4’ ; 制表
DB ‘5’, ‘6’, ‘7’, ‘8’, ‘9’
汇
MOV A , AA
编
LCALL DELAY
语 d. DATA(数据地址赋值)伪指令
言
字符名称 DATA 表达式 ;将右边表达式(8位)赋左边,
格
;只能是数据或地址等DATA型
式
字符名称 XDATA 表达式; 16位
及
例: AA DATA 35H
构
DELAY XDATA 0A7E6H
成
e. DB(字节定义)伪指令
循 环
解: ORG 1000H LEN DATA 31H
和 查 表 程
MAX DATA 32H MOV R0,#ADDR MOV MAX, #00H LOOP:MOV A,R0
;R0指向数据块,初始化为数据块首地址 ;MAX单元初始化,清零 ;开始循环体,将一个数取到A
序 设 计
CJNE A,MAX,BRCH;比较该数与MAX的大小
则在子程序的开始部分用压入堆栈命令保护现场,在结束部分用弹出
堆栈命令恢复现场
可利用寄存器、存储单元或堆栈进行子程序的入口参数和出口参
子 数传递
程 序 例题5:设MDA和MDB内有两数a和b, 设 请编出求c=a2+b2并把c送入MDC的程序, 计 设a和b皆为小于10的整数
SJMP $ END
JZ DONE
;若VAR=0,则转DONE
JNB ACC.7,POS;若VAR>0,则转POS
MOV A,#0FFH ;若VAR<0,-1给A
SJMP DONE
返回
2.3.6 循环和查表程序设计 例题3:已知内部RAM ADDR为始址的无符号数数据块的块长存储于 LEN单元内,请编程找出数据块中的最大数并存入MAX单元
成
b. END(结束汇编)伪指令
例:END
c. EQU(赋值)伪指令
字符名称 EQU 数据或汇编符
;将右边的数据或汇编符赋给左边的字符名称
例如:AA EQU R1 ;AA当作寄存器R1使用 A10 EQU 10H ;A10=10H
DELAY EQU 07E6H ; DELAY=07E6H
MOV R0 , A10
机器汇编
返回
2.3.4 顺序程序设计
例题1:求一个16位二进
制负数的补码。设此16
位二进制数存于NUM、
顺
NUM+1单元
序
程
序
设
计
解:补码=反码+1 ORG 1000H
NUM DATA 20H MOV R0,#NUM MOV A,R0 CPL A ADD A,#01H MOV R0,A
INC R0 MOV A,R0 CPL A ADDC A,#00H MOV R0,A SJMP $ END
[标号:] DB 项或项表
例: TAB: DB 45H,73,‘A’ ;将45H、73、‘A’依次存放
;入TAB地址开始的存储单元
f. DW(字定义)伪指令
[标号:] DW 项或项表
例:ORG 1000H
HETAB:DW 1234H, 8AH, 10 ;(1000H)=12H,(1001H)=34H
返回
2.3.5 分支程序设计
例题2:已知VAR单元内有一自变量X,按如下条件编出
求函数值Y并将它存入FUNC单元的程序
若X>0,则Y=1;
若X=0,则Y=0;
分
若X<0,则Y= -1。
支 程 ORG 1000H 序 VAR DATA 30H 设 FUNC DATA 31H 计
MOV A,VAR
POS :MOV A,#01H DONE:MOV FUNC,A
DB ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ , ‘F’
END
‘9’ ‘8’ ‘7’ ‘6’ ‘5’ ‘4’ ‘3’ ‘2’ ‘1’ ‘0’ SJMP $
MOV R0, A MOVC A, A+PC …
2.3.7 子程序设计 子程序可自动保护断点(即主程序中下一条指令的地址),但不
会自动保护现场(即运行子程序前的寄存器状态),若要保护现场,
单片机汇编
§2.3 汇编语言程序设计
主要内容 汇
编
语
1. 汇编语言格式及构成
言
2. 汇编源程序设计步骤及汇编
程 序
3. 顺序程序设计
设
4. 分支程序设计
计
5. 循环和查表程序设计
6. 子程序设计
2.3.1 汇编语言格式
标号段:操作码段 操作数段;注释段
如:LP1: MOV R2, #10; 设置循环次数
构
字符名称 BIT 位地址
成 例:A1 BIT 00H
A2 BIT P1.0
MOV C,A1 ;将位地址00H的值送Cy
返回
2.3.3 汇编源程序设计步骤及汇编 源程序设计步骤: 1)拟定设计任务书,设计任务书包括:程序功能、技术指标、精度
汇 等级、实施方案、工程进度、所需设备、研制费用、人员分工 编 2)建立数学模型 语 3)确立算法 言 4)绘制程序流程图 格 5)编制汇编语言源程序 式 6)上机调试 及 构 汇编语言源程序的汇编 成 人工汇编
汇 标号段:指明所在指令操作码字节所在的内存地址。标号由大写英文 编 字母开头的字母和数字串组成,长度为1~8个字符。标号段可省略。
语 言
2.3.2 汇编语言构成
格
1. 指令性语句(助记符语句)
式
2. 指示性语句(伪指令)
及
a. ORG(起始汇编)伪指令
构
例:ORG 2000H; 指定程序存储地址从2000H开始