4- 汇编语言程序设计v3
发布时间:2024-11-21
发布时间:2024-11-21
4 汇编语言程序设计
4.1 基本概念
一、高级语言、汇编语言、机器语言
高级语言:接近于人的常用语言形式,是一种面向过程而独立于机器的通用语言。如C语言。
汇编语言:它是一种符号语言,是一种面向机器的语言。
机器语言:是用二进制0,1表示指令和数据的最原始的程序设计语言。 类型 描述性 可读性 可维护性可移植性其它 高级语言 好 汇编语言 较好 机器语言 差
选择程序设计语言类型的原则是什么?
二、程序的编译、汇编和调试
好 较好 差
好 较好 差
好 差 差
代码占用存储空间多,不适合于实时控制 代码占用存储空间少,执行速度快,
特别适合于实时控制
三、程序设计的基本过程
分析问题、确定算法、设计流程、分配资源 编写源程序 调试、修改
四、程序的基本结构
顺序、分支、循环、子程序
五、汇编语言的基本格式
标号:操作码 第一操作数,第二操作数 ;注释
例1: 计算1+2
ORG 0200H
START: MOV A, #1 ; A Å1 ADD A, #2 ; A ÅA+2 MOV R1, A
; R1 ÅA
SJMP START
END
标号的作用: 用于配合转移指令的执行和子程的调用。 标号的命名方法:由1-8个字母或数字组成。
不可使用关键字,如助记符、寄存器名。 建议使用具有描述性的符号。
六、伪指令的作用和使用方法
伪指令:写在源文件中,用于控制汇编过程的命令。 没有对应的机器码,它是不可执行的指令。
ORG: 指定语句行装载的起始地址,可以在同一文件中出现多次。 END: 指示语句行到此结束,也可多次出现。
EQU: 赋值指令,用于定义常数,或地址。等同于C中的#define语句。 DB: 定义字节数据。用于给代码空间的存储单元进行初始化、赋值,或定义表格。
DW: 定义字数据,即两个字节。用于给代码空间的存储单元进行初始化、赋值,或定义表格。
BIT: 定义位符号地址。
DS: 预留若干个存储单元,等同于C中的malloc函数。
1. ORG/END的使用方法 2. EQU的使用方法 3. BIT的使用方法 4. DB/DW的使用方法
(see also EQU.ASM, DBDW.ASM, BIT.ASM) 问答相关问题:
1)ORG、END的作用分别是什么?
2)COUNT作为数据常数和地址时,在使用方法上有何不同? 3)使用BIT指令有何益处?
4)DB、DW在初始化存储单元时有何不同? 如何定义一个负数? 如何定义一个字符? 5)标号“START”,“TABLE”的值为多少? 符号地址“LED1”、“LED2”的值为多少?
七、MedWin集成编译环境介绍
1. MedWin 具有的基本功能
文件编辑、编译/汇编、调试、单元内容观察 2. 源文件创建、编辑 3. 汇编、连接、装载 4. 调试
单步、断点、执行到当前光标处、全速运行(不建议使用) 自动运行 系统复位
“踏步”指令,及其作用 5. 观察寄存器、存储器空间内容 1)通用寄存器 2)SFR区
3)DATA区:片内RAM区(00H-7FH), 以及SFR区 4)IDATA区:片内RAM区(00H-7FH, 80H-FFH) 5)CODE:代码区 6)XDATA:片外数据区 7)BIT:片内可位寻址区 8)PSW各标志位的观察 6. 观察端口内容 端口状态输入
端口状态输出
7. 集成环境设置 1)工作目录设置 2)汇编器、连接器设置 3)仿真系统时钟设置
8. 代码执行速度分析 9. 代码测试
选择的测试样本数据应具有完整性。
4.2 简单结构
顺序结构
例4.2.1:将一字节的BCD码转换为两字节的ASCII码 解:
1、基本原理分析
十进制形式 0-9
ASCII
规律 +30H
2、资源使用情况
30H:存放待转换的BCD码 31H
、32H:存放转换的结果
执行以前:
执行以后:
30H
31H
32H
3.
流程图设计(参见教材P.81) 4. 源程序设计(e421.asm)
源代码:
MOV R0, #32H
MOV @R0, #0 MOV A, 30H XCHD A, @R0 ORL 32H, #30H SWAP A
ORL A, #30H MOV 31H, A
核心指令:
XCHD A, @R0 ORL 32H, #30H
SWAP A
A
32H
5. 程序调试、测试
单步、断点调试方法
思考:
1. 使用 XCHD, SWAP指令有何益处?
2. 什么是“踏步”指令?其作用是什么?
4.3 分支结构程序设计
一、分支结构形式
二分支结构
多分
if … then else … switch ( )
二、转移指令 see Philips P.16
1. 无条件转移
SJMP : 短跳转,转移范围-128 to +127 AJMP : 绝对跳转,转移范围2KB LJMP : 长跳转 ,转移范围64KB JMP : 散转指令,实现多分支
2 条件转移
JZ /JNZ ; 测试A see Philips p.36 JC/JNC ; 测试Cy Philips p.33 JB/JBC/JNB ; 测试某一比特位 Philips p.32 CJNE ; 比较两数的大小 Philips p.23
; 可用于形成三分支结构,影响C标志
DJNZ ; 循环转移 Philips P.30
三、典型程序设计 1. 二分支结构
例:求取|x|(x为8bits符号数) 解: 基本思想
0001B] 补= 1111 1111B=FFH [-1]补= [-0000
[FFH] 补=[1111 1111B] 补=0000 0001B= 01H x<0: 若 [x] 补=y, 则 有[ y] 补=|x|
注意: CPL R0 为非法指令! CLR R0 为非法指令!
CPL,CLR指令 只适用于A 或 位变量!
例4.2.6 P.85 e426.asm
a+b Y=
a b
b≥10b<10
注意:
1. 测试数据的完备性。 1. CJNE、JNC指令的用法。 2.标号应具有表述性。
3. “$” 代表指令所处单元地址。 HERE: SJMP HERE 等同于
SJMP $ 思考:
如何改为三分支结构?
2 散转结构 按键处理方式:
CJNE R3, #00H, NOT0 … ; 0号键 CJNE R3, #01H, NOT1 … ; 1号键 CJNE R3, #02H, NOT2 …….
散转结构程序的作用:按键响应 特点:效率高
实现方法:1)散转指令表 2)散转地址表 3)散转偏移量表 散转指令表方式:简单易行。 see MLJMP.asm
例: 根据R3的值,转向3个分支。 R3=0, 转向R_KEY0
R3=1, 转向R_KEY1
R3=2, 转向R_KEY2
解: 调试例程 a. 构造转移指令表
JMP @A+DPTR
ENTRY: LJMP R_KEY0 ;转移指令表:3字节
b.根据R3,计算偏移量 LJMP R_KEY1 LJMP R_KEY2
偏移量=R3 × 3
上一篇:德国专家和学者展望木材加工机械
下一篇:双山中学先进教师评选方案