**宏指令**
令我感到极度兴奋的是 6502_Macroassembler &Simulator有强大的宏功能.这无疑使程序
的编写又简单方便许多了.
我们先说说宏的格式
宏名:.MACRO 宏虚参数1,宏虚参数2,宏虚参数3.....
宏体
.ENDM
这里.MACRO和.ENDM必须成对出现
宏调用的格式:
宏名宏实参数1,宏实参数2,宏参数3
具有宏调用的源程序被编译时,每个宏调用将被编译程序展开,宏展开实际上是宏定义时设计的宏体去代替相应的宏指令名,并且用实际参数去取代虚参数,以形成符合功能并可以被执行的实际代码
我们举例说明:
实现中断指令 INT
大家知道,现在的6502编译器都不支持INT指令,给书写造成不便,不过现在我们可以用宏来实现
.ORG $0000
INT:.MACRO INT_PARAM
.DB $00
.DW INT_PARAM
.ENDM
说明,这里 INT 是宏名,注意后面要接 : ,INT_PARAM 是虚参数,由于INT的机器码是 00,所以我们在宏体中 .DB $00,比如 INT $C008,机器码是 00 08 C0,所以我们 .DW INT_PARAM.这样,我们实现 INT 指令,例如我们在程序里输入 INT $C008,就和文曲星里的 INT $C008是一样的功能.
我再举个例子,在6502中没有寄存器X直接入堆栈和弹出堆栈功能的指令,这里我们用宏实现
.ORG $0000
PHX:.MACRO
TXA
PHA
.ENDM
PLX:.MACRO
PLA
TAX
.ENDM
MAIN:PHX
...
PLX
RTS
看到了吧,我们在程序中就可以用 PHX,PLX了
虽然宏的功能比较大,但是我们不可以乱用,因为宏和子程序是不一样的,子程序由 JSR 调用,由 RTS 返回,所以汇编后子程序的机器码只占有一个程序段,不管调用多少次都是如此,比较节省内存.宏指令每调用一次都要占一个程序段,调用次数越多,占用内存就越多,所以从开销来说,子程序优于宏指令,但从程序的执行时间来分析,每调用一次子程序都要保护和恢复返回地址,要消耗一些时间宏指令调用不需要这个过程,执行时间较短,所以从执行时间来看,宏指令又优于子程序.
所以说,当某一需要多次访问的程序段较长,访问次数又不是太多时,选用子程序比较好;当某一需要多次访问程序段较短,访问次数又很频繁时,选用宏指令比较好.
关键字:编程 伪指令
引用地址:
6502单片机编程--伪指令2
推荐阅读最新更新时间:2024-03-16 14:41
PIC反汇编(二)汇编程序和c对照
综述 这一篇,希望作为一个PIC反汇编的汇编和C的一个对照表 一、赋值语句 void main() { int num_b = 2; } MOVLW 0x6 MOVWF main@num_b 二、四则运算 加运算 void main() { int num_a =0; num_a ++; num_a += 10; } MOVLW 0x1 MOVWF main@num_a MOVLW 0x0A MOVWF main@num_a 减运算 void main() { int num_a = 20; num_a -= 2; } 注意这个里面减法也是采用加法实现的,因为8位的寄存
[单片机]
单片机串口编程问题
我现在正搞双机通信,不过遇到一个问题,问题是这样的: 这样就可以 while(TI==0); TI=0; …… …… 这样就不行,我用以下方法不能检测到TI=1,为何呀? for(i=0;(i 10)&&(TI==0);i++); TI=0; if(i 10) //正确处理 else //错误处理 没有必要使用第二种方法 串口发送数据时需要一定时间。假设波特率为9600bps,则每位需要一百多us,如果数据位为8位,一位校验位,则发送一字节数据需要一个多ms。第二种方法的错误之处在于认为发送不需要时间或时间很短。作者的本意可能是对TI做10次判断,如果10次判断都发现TI为0,即发送未完成,则认为发生错误;否则若在10次判断之内发现
[单片机]
S3C2440裸机------Nor Flash编程_识别
1.编写菜单程序 首先我们编写一个测试菜单程序,用来获取norFlash信息以及对NorFlash进行读写操作,代码如下: void nor_flash_test(void) { char c; while (1) { /* 打印菜单, 供我们选择测试内容 */ printf( Scan nor flashnr ); printf( Erase nor flashnr ); printf( Write nor flashnr ); printf( Read nor flashnr ); printf( quitnr ); printf( Enter selection:
[单片机]
单片机和 FIFO 的接口汇编程序
下面的程序中,单片机将FIFO中的数据读取出来后,从串口发送出去。 ;*********************************** ef bit p3.3 ;fifo empty flag rst bit p3.5 ;reset fifo read bit p3.7 ;read fifo org 0000h ljmp main org 0030h main: ;------ initial timer mov tmod,#00100001b ;timer0 mode 1 (16 bit)
[单片机]
十多年来,C++排序库首次更改,人工智能改进计算机编程语言
英国深度思维公司的人工智能体“阿尔法开发”(AlphaDev),已被证明能发现并改进C++(一种常用的计算机编程语言)库里广泛使用的计算机排序算法。《自然》7日刊登的这些人工智能(AI)生成的算法已被整合到C++排序库,这也是10多年来对这部分库作出的首次更改。 研究团队使用“AlphaDev”进行改进探索。 图片来源:《自然》网站 算法对于计算是必不可少的,它能为执行特定计算任务提供一组指令。排序任务这类基础算法每天要运行数万亿次。由于人类专家无法进一步优化,改进这类算法的尝试遇到了瓶颈,而AI智能体有望解决这个问题。使用深度学习改进算法的努力一直受到限制,因为之前只能在开发深度学习系统的训练样本范围内进行发现和优化。“
[嵌入式]
ARM的体系结构与编程系列博客——ARM的历史与应用范围
前言 最近我感觉自己比较浮躁,重来没有好好地沉下心来做一件事情,而且针对自己在专业水平上仍然还有很多欠缺,于是我想我应该为自己做些什么来证明一下自己真的是潜心研究东西的人,于是我萌生了一个想法,真正地写一系列的博客,将ARM的结构体系完完全全地梳理一遍!虽然是学过了,但是学得应该仅仅是皮毛吧!正好趁着自己还有时间,为什么不做一个自己想认真做的事情呢? 回到顶部 系列博客的介绍 博客园里面的大神们都很多,有许多人对Linux、ARM等都有相应的了解,因而,如果你是老鸟的话,就当飘过啦,如果你是新手的话,哈哈,那么现在正是为你而准备的大餐了! 准备的博客如下: ARM概述 ARM指令系统分类及其寻址方式 掌握ARM指令集
[单片机]
艾德克斯IT7300系列可编程交流电源在光伏并网逆变器测试中
摘要:随着光伏并网发电的发展,越来越多的并网发电系统并入电网,由于电网自身特征,对光伏并网逆变器的性能提出了严格的测试要求。本文主要针对并网逆变器的电网频率响应测试,反孤岛效应测试和低压穿越测试三项测试需求,介绍艾德克斯电子的 IT7300可编程交流电源在其中的作用。 一、光伏并网逆变器 光伏并网逆变器是光伏系统能量转换与控制的核心,是把太阳能电池所输出的直流电转换成符合电网要求的交流电再输入电网的设备。逆变器效率的高低影响着光伏发电系统效率的高低,因此,逆变器的性能保障非常重要。 二、光伏并网逆变器测试需求 由于要通过光伏并网逆变器直接将电能转化为与电网同频同相的正弦波电流馈入电网,那么电网的任何变动都会对光
[电源管理]
单片机系统Flash存储器在系统编程设计
随着排放法规的加严,发动机电子控制单元(ECU)成为了现代汽车中一个必备部分。在发动机控制单元这种单片机系统中,Flash存储器已成为其一个基本配置,主要用来存放控制程序代码。 将程序代码装入Flash存储器的方法有3种:第1种方法是要求供应商在存储器发货前将数据写入,但无法满足产品开发阶段修改程序的要求;第2种方法是使用编程器编程,但由于Flash存储器正在向小型化、贴片式发展,从而使Flash存储器难以利用编程器编程;第3种方法是将存储器安装到电路板上进行编程,即在系统编程(In System Programming,ISP),这种编程方式是通过系统的微处理器实现对Flash存储器的编程,不需要其他编程设备和附加编程电源,具
[单片机]