当前位置:文档之家› 微机原理及应用 第四章 汇编语言程序设计基础

微机原理及应用 第四章 汇编语言程序设计基础


2、 程序设计步骤
分析课题→确定算法和数据结构→确定操作步骤→画流程
图→编制源程序→调试程序
分析课题:对具体问题具体分析,并抽象出数学模型
确定算法:解决同一问题有多种方法,从中选择一种最佳的方法
确定数据结构:合理安排数据结构,合理选择和分配内存空间、 工作寄存器以及I/O接口地址
程序模块:把整个问题分成若干个功能模块,画出层次图及通信
end
【例4-5】代码转换程序设计1
一位十六进制数与ASCII码之间的转换
1、一位十六进制数转换为ASCII码 2、ASCII码转换为一位十六进制数
0~9的ASCII码:30~39H,A~F的ASCII码:41~46H。
‘0’~‘9’与0~9之间的差值30h ‘A’~‘F’与A~F之间的差值37h;
第四章 汇编语言程序设计基础
4-1 汇编语言程序设计方法 4-2 汇编语言程序结构 4-3 汇编语言的编辑与汇编
4-1 汇编语言程序设计方法
1 程序及程序设计 2 程序设计步骤
1 程序及程序设计
• 程序是一系列指令的有序集合 • 程序设计则是编制程序的过程
程序设计:就是人们用计算机能接受的语言,把欲解决问题 的算法和步骤描述出来的过程。编程语言
N
F0
;两数相等,F0置位
设置标志F0
Y
异号?
ACC.7, TEST;两数异号,转TEST A, Data2 ;两数同号,恢复Data1 结束
A, Data2 ;比较
STEP3
; Data1小,转STEP3
BIG, Data1 ; Data1大
SMALL, Data2
N
Y
Data1小?
Y
Data1正?
clr c subb A,#30h
JNC ADD_37;若大于等于0AH,则加37Hcjne A,#10,$+3
ADD_30:ADD A, #30H;若小于0AH,则加30H jc A, HEXASC1 ;A<10转移
MOV R2, A ;保存结果
RET
;子程序返回
subb A,#07h ASCHEX1: ret
1、十六进制转换成ASCII码
2、ASCII码转换成十六进制
输入:R2中存放一位十六进制;出口:R2返输回入A:SRC2I中I值存放ASCII码
ORG 0000H
输出:R2中返回十六进制
HEXASC:MOV A, R2 ;将该十六进制数暂A存SC于HAEX中:mov A,R2
CJNE A, #0AH, $+3
N
顺序程序2
顺序程序3 结束
补码绝对值
例 求R2中补码绝对值,正数不变,负数变补。
MOV A,R2
JJNNBB ACC.7,NEXT;为正数?
影响条件
CPL A INC A MOV R2,A
;负数变补
Y
条件满足?
N
处理段
NEXT:SJMP NEXT ;结束
【例4-4】无符号数的比较
比较外部RAM Data1和Datad2a单ta元1的e两qu个无10符0号0h数,并将大数存入
开始
Y
?
N
Y
F>5?
N
1
4-2 汇编语言程序结构
程序设计:就是人们用计算机能接受的语言,把欲解决问题 的算法和步骤描述出来的过程。编程语言
机器语言→汇编语言→高级语言(字符型→图形化)
• 程序设计方法 • 程序开发方法
– 结构化设计
– 自顶向下方法→先顶层开发
➢三种基本控制结构,
• 先写主程序,后写子程序
Data3单元中, Data1、Dactoa2m和1D:amtao3v为d连p续tr,的#单da元ta1
先看数据放在内部RAM的情况movx
a, @DPTR
ORG 0000H
mov b,a
COM1:MOV A, 40H
inc DPTR
CJNE A, 41H, L1;两数比较movx a, @DPTR
画流程图:以图示形式表示解决具体问题的思路和方法
编制源程序:精心挑选合适的指令和操作数的寻址方式
用注释行说明程序,便于阅读、调试和修改。
调试程序:
汇编
执行
Y
源程序--→机器程序--→分析结果正确--→调试程序完成
N
修改
• 起止框 • 处理框 • 判断框
• 连线
流程图图例
开始
结束
XX+1 Y Y-1
– 顺序结构 – 选择结构 – 循环结构
– 自底向上方法→先底层开发
• 先写子程序,后写主程序
➢一个子程序结构
• 子程序
– 混合方法
• 中断服务子程序
4-2 汇编语言程序结构
4-2-1 顺序结构程序设计 4-2-2 分支结构程序设计 4-2-3 循环结构程序设计 4-2-4 子程序结构程序设计
4-2-1 顺序结构程序设计
A=0 A=1
分支程序0 分支程序1
A=n 分支程序n
结束
1、多次使用条件转移指令,形成两个以上判断框。
例 求符号函数Y=SGN(X)
开始
输入X存入40H,输出Y存入41H中 +1 当 X>0
Y= SGN(X)= 0 当 X=0
取X
Y
N
X=0?
-1 当 X<0
A= 0
Y
N
X<0?
SYMB: MOV A,40H ;取X

DB 10H, 19H, 24H, 31H

DB 40H, 51H
;保存DPTR的原值 ;取平方表首地址 ;查平方表 ;恢复DPTR的原值
;平方表
4-2-2 分支结构程序设计
特点:程序中含有转移类指令 关键:正确选用转移指令
• 无条件分支程序 – 程序设计者事先设计好的流向 – LJMP、AJMP 、SJMP、JMP、LCALL、ACALL、RET(I)

一、单重分支程序
一个判断决策框,程序有两条出路,二选一。
由一个条件转移指令实现
有三种典型单分支结构:
开始
开始
顺序程序1
顺序程序1
影响条件
影响条件
Y
条件满足?
N
Y
条件满足?
N
分支处理段1
分支处理1 分支处理2
顺序程序2 结束
顺序程序2
顺序程序3 结束
开始 顺序程序1
分支处理段1
影响条件
Y
条件满足?
N
Data1存入BIG Data2存入SMALL
N
Data1存入SMALL Data2存入BIG
A, Data2 ;恢复Data1
结束
结束
ACC.7, STEP2 ; Data1为正,大,转STEP2
SMALL, Data1
BIG, 41H
带符号数的比较流程图
【例4-7】散转程序:使用JMP 实现多分支程序转移
L1: JC J2 BIG1 MOV 42H, A
;C=1,则cAj小ne转BIaG,2b, l1
;大l1数:送42jcH
big2
;c=1,则a小
RET
big1: inc dptr
BIG2: XCH A, 41H SJMP BIG1 END
;大数送Amovx @dptr, a ret
big2: xch a, b sjmp big1
• 顺序结构是按照指令在存储器中存放的先后顺序, 从某一条指令开始逐条顺序执行,直至某一条指令 为止。
• 特点:
– 程序中无转移、调用、分支、循环指令; – 程序按编写的先后顺序执行,程序流向不变 – PC自动加1
• 在实际编程中应注意
– 如何正确选择指令、寻址方式和合理使用工作寄存器, 包括数据存储器。
【例4-6】带符号数的比较: XRL指令和JNZ、JB、JNC有机配合
比较内部RAM Data1和Data2单元内以补码形式表示的带符号数,并将大 数存入BIG单元,小数存入SMALL单元,若相等,则建立起标志位F0
Data1 Data2 BIG SMALL COM2:
STEP1:
STEP2:
TEST: STEP3:
;拆字,屏蔽高4位

SWAP A
;高、低4位互换

INC R1
;指向51H单元

XCH A,@R1
;51H单元内容与累加器内容互换

ANL A,#0FH
;拆字,取原51H单元的低4位

ORL A,@R1
;拼字

INC R1

MOV @R1,A
;存结果

RET

END
【例4-1】拆字、拼字程序 将片内RAM 50H单元的低4位取出当作高4位,与

;与A的低4位内容互换

INC R1
;指向52H单元

MOV @R1,A
;存结果

RET

END
【例4-2】数制转换 将片内RAM 30H单元的无符号二进制数转换成BCD码
数,结果按高低顺序依次存放到33H、32H、31H单元。

ORG 0000H
• HEX_D: MOV A, 30H

MOV B, #10
ADD_37:ADD A, #37H;大于或等于0AH,则加37H
MOV R2, A ;保存结果
RET
;子程序返回
二、 多重分支程序 程序有两条以上的出路,多选一。
1、多次使用条件转移指令,形成 两个以上判断框。 CJNE指令和JC、JNC有机配合 JB、JNB、JBC JZ、JNZ 开始
相关主题