汇编程序实例,单片机汇编语言编程100例
本篇文章给大家谈谈汇编程序实例,以及单片机汇编语言编程100例对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
怎样在单片机C代码中加入汇编延时子程序
(1)、C51语言中调用汇编语言程序;
C51语言调用汇编语言程序要注意以下几点:
1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。
2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51S.LIB)加入工程中。
3:在C51语言中必须声明需要调用的函数为外部函数。extern void DELAY(void);
4:在汇编语言程序中必须声明被调用子程序为公共子程序,在被调用的文件中还需要声明此文件是可从新定位的。
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY
实例如下:
C51语言文件:
#include"reg51.h"
extern void DELAY(void);
extern void DEL(void);
void main(void)
{
P1=0x00;
DELAY();
DEL();
P1=0xff;
}
汇编语言文件:
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY
DELAY: MOV R2,#3H
DJNZ R2,$
RET
DEL: MOV R3,#03H
DJNZ R3,$
RET
END
(2)、C51语言中嵌入汇编程序;
在C51语言中嵌套使用汇编语言编写程序要注意以下的几个问题:
1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。
2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51S.LIB)加入工程中。
3:用#pragma asm,和#pragma endasm语句包含嵌入的汇编语言程序。
实例如下:
#include"reg51.h"
void delay(void);
void main(void)
{
void delay(void);
P1=0x00;
#pragma asm
MOV R3,#08H
DJNZ R3,$
#pragma endasm
P1=0xff;
}
void delay(void)
{
#pragma asm
MOV R4,#08H
DJNZ R4,$
#pragma endasm
}
微机原理与汇编语言程序设计的目录
序
前言
第1章微型计算机概述
本章学习目标
1.1计算机的发展与应用
1.1.1计算机的发展历史及发展趋势
1.1.2计算机的特点与分类
1.1.3计算机的应用
1.2计算机的基本结构和工作原理
1.2.1计算机的基本结构
1.2.2计算机的工作原理
1.3计算机系统
1.3.1计算机的硬件系统
1.3.2计算机的软件系统
1.4微型计算机的基本概念
1.4.1微处理器的产生,发展及分类
1.4.2微型计算机的性能指标介绍
1.4.3微型计算机的特点及应用
1.4.4微型计算机系统的组成
本章小结
习题一
第2章计算机中的数据表示
2.1计算机中的数制及其转换
2.1.1数值的基本概念
2.1.2数值之间的转换
2.2计算机中数值数据的表示及运算
2.2.1基本概念
2.2.2带符号数的原码,反码,补码表示
2.2.3定点数和浮点数表示
2.2.4定点补码加法运算溢出判断
2.3其他数据表示方法
2.3.1美国信息交换标准代码(ASCII)
2.3.2二—十进制编码——BCD码
2.3.3汉字编码
2.3.4图象信息的表示方法
2.3.5语音信息的表示方法
本章小结
习题二
第3章8086处理器及其体系结构
本章学习目标
3.1 8086处理器的内部结构
3.1.1基本性能指标
3.1.2 8086处理器内部结构组成
3.1.3 8086CPU的寄存器结构
3.1.4 8086CPU的外部引脚特性
3.2 8086处理器的存储器组织
3.2.1存储器的标准结构
3.2.2存储器的分段
3.2.3逻辑地址和实际地址
3.2.4专用和保留的存储器单元及堆栈
3.3 8086的总线周期和操作时序
3.3.1 8284A时钟信号发生器
3.3.2 8086总线周期
3.3.3 8086CPU的最小/最大工作方式
3.3.4 8086CPU的操作时序
3.4 286/386/486微处理器简介
3.4.1 286微处理器简介
3.4.2 386微处理器简介
3.4.3 486微处理器简介
本章小结
习题三
第4章寻址方式与指令系统
本章学习目标
4.1指令格式和操作数类型
4.2指令的寻址方式
4.2.1寻址,寻址方式的概念
4.2.2与数据有关的寻址方式
4.2.3I/O端口寻址方式
4.2.4与转移地址有关的寻址方式
4.3 8086指令系统
4.3.1数据传送指令
4.3.2DOS系统功能调用
4.4 286增强和扩充指令
4.4.1 286工作模式
4.4.2有符号整数乘法指令
4.4.3堆栈操作指令
4.4.4移位指令
4.4.5支持高级语言的指令
4.5 386增强和扩充指令
4.5.1数据传送与扩展指令
4.5.2地址传送指令
4.5.3有符号乘法指令
4.5.4符号扩展指令
4.5.5堆栈操作指令
4.5.6移位指令
4.5.7位操作指令
4.5.8条件设置指令
4.6 486新增指令
4.7Pentium新增指令
本章小结
习题四
第5章伪指令及汇编语言结构
本章学习目标
5.1汇编语言和汇编程序
5.1.1汇编语言
5.1.2汇编程序
5.2汇编语言语句格式
5.2.1名字项
5.2.2操作码项
5.2.3操作数项
5.3伪指令语句
5.3.1数据定义伪指令
5.3.2符号定义伪指令
5.3.3段定义伪指令
5.3.4过程定义伪指令
5.3.5结构定义伪指令
5.3.6模块定义与连接伪指令
5.3.7程序计数器$和ORG伪指令
5.4汇编语言程序的段结构
5.5汇编语言程序上级过程
5.5.1汇编语言的工作环境及上机步骤
5.5.2汇编语言源程序的建立
5.5.3将源程序文件汇编成目标程序文件
5.5.4用连接程序生成可执行程序文件
5.5.5程序的执行
5.5.6程序的调试
5.6汇编语言程序运行实例
本章小结
习题五
第6章汇编语言程序设计
本章学习目标
6.1汇编语言程序设计的基本方法和基本步骤
6.1.1汇编语言程序设计的基本步骤
6.1.2结构化程序的概念
6.1.3流程图画法规定
6.2算术运算类指令
6.2.1加法指令
6.2.2减法指令
6.2.3乘法运算指令
6.2.4除法运算指令
6.2.5BCD码调整指令
6.3逻辑运算与移位类指令
6.3.1逻辑运算类指令
6.3.2非逻辑运算类指令
6.3.3循环移位指令
6.4顺序程序的结构形式和程序设计
6.4.1顺序程序的结构形式
6.4.2顺序程序的程序设计
本章小结
习题六
第7章分支结构程序设计
本章学习目标
7.1转移类指令
7.1.1JMP无条件转移指令
7.1.2条件转移指令
7.2分支程序的结构形式和程序设计
7.2.1分支程序的结构形式
7.2.2分支程序的程序设计
本章小结
习题七
第8章循环结构程序设计
本章学习目标
8.1循环程序的基本结构
8.1.1循环程序的组成
8.1.2循环程序的结构
8.2循环控制指令及串指令
8.2.1循环控制指令
8.2.2串操作类指令
8.3循环结构程序的设计方法
8.3.1循环控制的方法
8.3.2循环程序的控制结构
8.4单循环程序设计
8.5多重循环
本章小结
习题八
第9章子程序设计
本章学习目标
9.1子程序的基本概念
9.1.1子程序定义伪指令
9.1.2调用与返回指令
9.2子程序设计
9.2.1子程序说明信息
9.2.2保护现场与恢复现场
9.2.3子程序参数传递方法
9.3子程序的嵌套与递归
9.3.1子程序的嵌套
9.3.2子程序的递归
9.4中断调用程序设计
9.4.1中断的基本概念
9.4.2DOS中断和系统功能调用
9.4.3BIOS中断调用
本章小结
习题九
第10章高级汇编语言技术
本章学习目标
10.1宏汇编
10.1.1宏定义,宏调用和宏展开
10.1.2形参和实参
10.1.3伪指令PURGE
10.1.4伪指令LOCAL
10.2重复汇编
10.2.1定重复伪指令REPT
10.2.2不定重复伪指令IRP
10.2.3不定重复字符伪指令IRPC
10.3条件汇编
本章小结
习题十
第11章模块化程序设计
本章学习目标
11.1段的定义
11.1.1段的完整定义
11.1.2定位类型
11.1.3组合类型
11.1.4类别
11.2模块间的通信
11.2.1伪指令PUBLIC和EXTRN
11.2.2多个模块之间的变量传递
11.3汇编语言与C/C++语言的混合编程
11.3.1C/C++语言程序与汇编语言过程的模块连接
11.3.2C/C++语言程序调用汇编语言的行内汇编法
本章小结
习题十一
附录A8086指令系统
附录BDOS系统功能调用
附录CBIOS功能调用
附录D80X86中断向量
参考文献
汇编程序中nop的作用是什么
在单片机的C语言编程中,经常需要许多空指令来产生短延迟效应。
很容易做的汇编语言,只写几个空操作。
avr-gcc采用以下方法嵌入组装说明:
Asm(nop”;nop。nop。nop。”:);
在keilC51中,直接调用库函数:
包括//声明void_nop_(void);
_nop_();//生成一个NOP指令
扩展资料:
执行NOP指令只会增加程序计数器1个人电脑,所以需要一个机器周期。实例:MOVLW0xof;将OFH发送到WMOVWFPORT_B;在B端口写W到NOP;空操作MOVFPORT_B,W。
读指令:这三个端口B的连续操作指令的I/O端口,目的是为了写的内容读端口B,需要确保一个稳定的读写之间的时间,所以NOP添加空操作指令。
效果:很短的延迟,需要“_nop_”功能在美国水平,而编译NOP指令延迟的几微秒。NOP指令是单周期指令,延迟时间可以通过晶体振荡器的频率来计算。对于一个12M的晶体振荡器,延迟时间是1uS。
对于一个相对较长的延迟,要求大于10us,使用C51中的loop语句来实现。
在C51中选择loop语句时,要注意以下几点:
首先,在C51中定义了循环变量,尽量使用无符号字符变量。
其次,在FORloop语句中,尝试使用变量-来执行循环。
第三,在while和while语句中,循环体变量也使用了减法。
这是因为在C51编译器中,不同的指令用于不同的循环方法。
好了,文章到此结束,希望可以帮助到大家。