当前位置:首页 > 单片机 > 单片机
[导读]Register Usage寄存器应用汇编程序可以在改变当前寄存器组中所有寄存器和ACC,B,DPTR以及PSW中的内容。当在汇编程序中调用C函数时,要注意这些寄存器都有可能被C函数改变。Overlaying Segments段覆盖如果程序在连接

Register Usage寄存器应用

汇编程序可以在改变当前寄存器组中所有寄存器和ACC,B,DPTR以及PSW中的内容。当在汇编程序中调用C函数时,要注意这些寄存器都有可能被C函数改变。

Overlaying Segments段覆盖

如果程序在连接和定位过程中执行了覆盖过程,那么每个汇编子程序都有一个独一无二的程序段是非常重要的。这对于在段覆盖过程中,根据各个不同的段的计算函数之间的偏移是很必要的。当出情以下情况时,汇编子程序的数据区可以包括在覆盖分析之中:

(1)所有的段名都用Cx51命名规则命名。

(2)每个使用局部变量的汇编函数都指定一个数据段。这个数据段可能被其他函数在传递数时访问。参数必须依次序存放。

Example Routines例程

以下例程显示了如何汇编程序中传递参数。

int function (

int v_a, /* passed in R6 & R7 */

char v_b, /* passed in R5 */

bit v_c, /* passed in fixed memory location */

long v_d, /* passed in fixed memory location */

bit v_e); /* passed in fixed memory location */

Small Model Example小存储器模式例程

在小存储器模式下,存放参数的固定存储区域在内部存储器中。变量参数传递段位于data区。以下是两个汇编代码的例子,第一个显示了在汇编程序中如何调用例程,第二个显示了例程序程的汇编代码:

在汇编程中调用函数

.

.

.

EXTRN CODE (_function) ; Ext declarations for function names

EXTRN DATA (?_function?BYTE) ; Seg for local variables

EXTRN BIT (?_function?BIT) ; Seg for local bit variables

.

.

.

MOV R6,#HIGH intval ; int a

MOV R7,#LOW intval ; int a

MOV R7,#charconst ; char b

SETB ?_function?BIT+0 ; bit c

MOV ?_function?BYTE+3,longval+0 ; long d

MOV ?_function?BYTE+4,longval+1 ; long d

MOV ?_function?BYTE+5,longval+2 ; long d

MOV ?_function?BYTE+6,longval+3 ; long d

MOV C,bitvalue

MOV ?_function?BIT+1,C ; bit e

LCALL _function

MOV intresult+0,R6 ; store int

MOV intresult+1,R7 ; retval

.

.

.

函数的汇编实现

NAME MODULE ; Names of the program module

?PR?FUNCTION?MODULE SEGMENT CODE ; Seg for prg code in 'function'

?DT?FUNCTION?MODULE SEGMENT DATA OVERLAYABLE

; Seg for local vars in 'function'

?BI?FUNCTION?MODULE SEGMENT BIT OVERLAYABLE

; Seg for local bit vars in 'function'

PUBLIC _function, ?_function?BYTE, ?_function?BIT

; Public symbols for 'C' function call

RSEG ?PD?FUNCTION?MODULE ; Segment for local variables

?_function?BYTE: ; Start of parameter passing segment

v_a: DS 2 ; int variable: v_a

v_b: DS 1 ; char variable: v_b

v_d: DS 4 ; long variable: v_d

.

. ; Additional local variables

.

RSEG ?BI?FUNCTION?MODULE ; Segment for local bit variables

?_function?BIT: ; Start of parameter passing segment

v_c: DBIT 1 ; bit variable: v_c

v_e: DBIT 1 ; bit variable: v_e

.

. ; Additional local bit variables

.

RSEG ?PR?FUNCTION?MODULE ; Program segment

_function: MOV v_a,R6 ; A function prolog and epilog is

MOV v_a+1,R7 ; not necessary. All variables can

MOV v_b,R5 ; immediately be accessed.

.

.

.

MOV R6,#HIGH retval ; Return value

MOV R7,#LOW retval ; int constant

RET ; Return

Compact Model Example 压缩存储器模式例程

在小存储器模式下,传递参数的固定存储器位于外部数据存储器。变量参数传递段位于pdata

例子(略)

Large Model Example大存储器模式例程

在小存储器模式下,传递参数的固定存储器位于外部数据存储器。变量参数传递段位于xdata

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在C语言编程中,结构体内存对齐是一个容易被忽视却影响深远的关键问题。它不仅关乎程序性能,更直接影响到内存占用效率,尤其在嵌入式系统等资源受限环境中显得尤为重要。本文将深入探讨结构体内存对齐的原理,并分享手动调整与编译器优...

关键字: C语言 内存对齐 编译器

编译器不仅是连接硬件与软件的桥梁,还直接影响MCU的性能优化与功能安全。面对汽车行业对高可靠性、低功耗和高算力的需求,编译器需在确保ASIL-D等严格标准的同时,最大化发挥RISC-V芯片的潜力。

关键字: 车规MCU RISC-V 编译器 HighTec

控制寄存器(Control Register)是中央处理器(CPU)中用于管理系统级操作的特殊寄存器,它为操作系统和硬件提供对处理器行为的精细控制。本文从计算机体系结构角度系统阐述控制寄存器的设计原理、功能分类、操作机制...

关键字: 寄存器 处理器

国内电子信息产业内的厂商正在全球嵌入式系统的发展浪潮中扮演着越来越重要的角色,但随之而来的是国内嵌入式系统和相关芯片企业在出海时也面临越来越多的合规要求,尤其是在保障用户、设备和周边人与物安全的功能安全领域内的合规要求。...

关键字: 嵌入式系统 智能网联 编译器

在嵌入式系统开发中,硬件抽象层(Hardware Abstraction Layer,HAL)起着至关重要的作用。它为上层软件提供了统一的硬件访问接口,隐藏了底层硬件的细节,使得软件具有更好的可移植性和可维护性。C++作...

关键字: 嵌入式C++ HAL 寄存器 封装

采用51单片机最小开发板,由8位自制独立按键控制。单片机芯片为STC89C52RC,晶振为@12.000 mhz。8X8LED点阵屏模块由MAX7219驱动,MAX7219包含一个自动扫描电路。你只需要把要显示的数据发送...

关键字: 51单片机 MAX7219 寄存器

电源管理集成电路(PMIC)有益于简化最终应用并缩小其尺寸,也因此备受青睐。然而,当默认启动时序和输出电压与应用要求不符时,就需要定制上电设置。大多数情况下,电路没有可以存储这些设置的非易失性存储器(NVM)。对此,低功...

关键字: 电源管理 集成电路 寄存器

我从Digilent公司拿出了我的Arty Z7板,并在Vivado/Vitis 2021.2中创建了一个项目来让它工作,你可以在我的上一个项目帖子中阅读,我在QDSP-6061的5位数上显示滚动文本,上面写着“Hell...

关键字: 寄存器 AXI4 QDSP-6061 RTL模块

【2025年4月11日, 德国慕尼黑讯】全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)推出用于AURIX™、TRAVEO™和PSOC™的可扩展软件包产品组合...

关键字: PSOC 物联网 编译器

瑞典乌普萨拉,2025年3月11日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR在德国纽伦堡举办的embedded world 2025展会上重磅发布全新云端平台。该平台为嵌入式软件开发人员提供前所未有的自由度与...

关键字: 编译器 嵌入式 RISC-V
关闭