ARM汇编,MDK,ARM初学
我是一名linux嵌入式初学者,现在在看ARM处理器。
使用的是一块S3C2440的开发板,目前的开发调试环境是KEIL4。

我在一个添加了启动代码的工程中添加一个自己编写的简单汇编文件。然后在启动代码的C入口点处修改,import添加的简单汇编文件中的程序段,并使其跳转到该程序段。
编译不能通过,错误提示的我编写的汇编文件中定义的label没有定义。想知道如何解决。
我想在启动代码执行结束后调用一个定义在其他文件中的汇编程序。

1个回答

以下是我自己写的可以用的S3C2440汇编启动代码:

; .include "/SystemInit/LowLevelInit.s"

INTOFFSET EQU 0x4A000014

SVC_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;
FIQ_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;
IRQ_STACK_LEGTH EQU 256 ;;;;;;;;;;;;;;;;;;
ABT_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;
UND_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;

NoInt EQU 0x80
NoFIQ EQU 0x40

USR32Mode EQU 0x10
SVC32Mode EQU 0x13
SYS32Mode EQU 0x1f
IRQ32Mode EQU 0x12
FIQ32Mode EQU 0x11

; IMPORT __use_no_semihosting_swi
; IMPORT FIQ_Exception
IMPORT __main
IMPORT SystemInit
IMPORT LowLevelInit
; IMPORT _ClockInit
; IMPORT _LedInit
; IMPORT _LedOn
; IMPORT _LedOff
; IMPORT LedInit
; IMPORT LedOn
; IMPORT LedOff
; IMPORT Delay

IMPORT  IRQHandle

; IMPORT Timer4_IRQ
IMPORT StartHandle

EXPORT  bottom_of_heap   ;;;;;;;;;;;;;;;;;;
EXPORT  StackUsr;;;;;;;;;;;;;;;;;;
EXPORT  Reset
EXPORT __user_initial_stackheap;;;;;;;;;;;;;;;;;;


PRESERVE8
;CODE32
AREA    os,CODE,READONLY
ARM

; ENTRY

Reset
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xb9205f80
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr

ResetAddr DCD ResetInit
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler

Undefined
B Undefined

SoftwareInterrupt

CMP R0, #4
LDRLO PC, [PC, R0, LSL #2]
MOVS PC, LR

SwiFunction
DCD IRQDisable ;0
DCD IRQEnable ;1
DCD FIQDisable ;2
DCD FIQEnable ;3
; DCD Enable ;4

IRQDisable
MRS R0, SPSR
ORR R0, R0, #NoInt
MSR SPSR_c, R0
MOVS PC, LR

IRQEnable
MRS R0, SPSR
BIC R0, R0, #NoInt
MSR SPSR_c, R0
MOVS PC, LR

FIQDisable
MRS R0, SPSR
ORR R0, R0, #NoFIQ
MSR SPSR_c, R0
MOVS PC, LR

FIQEnable
MRS R0, SPSR
BIC R0, R0, #NoFIQ
MSR SPSR_c, R0
MOVS PC, LR

;Enadle

PrefetchAbort
B PrefetchAbort

DataAbort
B DataAbort

FIQ_Handler
STMFD SP!, {R0-R4, LR}
; BL FIQ_Exception
LDMFD SP!, {R0-R4, LR}
SUBS PC, LR, #4

IRQ_Handler
; ÒÔºóÓÐʱ¼ä£¬Ö±½ÓÓûã±à²é±íµÄ·½·¨À´×ö£¬²»ÒªÒÀÀµCº¯Êý·½Ê½£¬ÌáÉýЧÂÊ
STMFD SP!, {R0-R4, LR}
;Ìøתµ½ÍⲿÖжϵĴ¦Àíº¯Êý
;Á½¸ö±ê¼ÇλµÄÇå³ýÒ²¿ÉÔÚÕâÀïÍê³É£¬µ«Ä¿Ç°ÏÈÓÉÓû§Íê³É°É

; LDR R1,=INTOFFSET
; LDR R0,[R1]
; LDR R2,=IRQHandle
; LDR R1,[R2,R0,LSL #2] ; MOV R1,#4; MLA R3,R0,R1,R2;
; LDR R3,[R1]
; MOV LR,PC
; BX R3
BL StartHandle

LDMFD SP!, {R0-R4, LR}
SUBS PC, LR, #4

InitStack

MOV R0, LR
MSR CPSR_c, #0xd3

LDR SP, StackSvc

MSR CPSR_c, #0xd2
LDR SP, StackIrq
MSR CPSR_c, #0xd1
LDR SP, StackFiq
MSR CPSR_c, #0xd7
LDR SP, StackAbt
MSR CPSR_c, #0xdb
LDR SP, StackUnd
MSR CPSR_c, #0xdf
LDR SP, =StackUsr-32
BX R0; ²»ÄÜʹÓÃLR·µ»Ø£¬LR¿ÉÄÜÒѾ­±»ÐÞ¸ÄÁË£¬ËùÒÔ½èÓÉR0·µ»Ø ; MOV PC, R0 ;

ResetInit
BL LowLevelInit

BL InitStack ;ÔÚÕâÖ®ºó£¬¿ÉÒÔʹÓÃCº¯Êý
BL SystemInit
; BL _ClockInit
; BL LedInit
LOOP
; BL LedOn
; LDR R0,=0x100
; BL Delay
; BL LedOff
; LDR R0,=0x100
; BL Delay
; B LOOP

_Delay
; LDR R3,=0x100000

; STMFD SP!, {R0-R4, LR}
; BL SystemInit
; LDMFD SP!, {R0-R4, LR}
; B .

; BL TargetResetInit

BL IRQ_Handler
B __main

__user_initial_stackheap

LDR r0,=bottom_of_heap ;;;;;;;;;;;;;;;;;;
; LDR r1,=StackUsr ;;;;;;;;;;;;;;;;;;

BX LR; MOV pc,lr ;

StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;

    AREA    MyStacks, DATA, NOINIT, ALIGN=2

SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;Stack spaces for Administration Mode ¹ÜÀíģʽ¶ÑÕ»¿Õ¼ä
IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;Stack spaces for Interrupt ReQuest Mode ÖжÏģʽ¶ÑÕ»¿Õ¼ä
FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;Stack spaces for Fast Interrupt reQuest Mode ¿ìËÙÖжÏģʽ¶ÑÕ»¿Õ¼ä
AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;Stack spaces for Suspend Mode ÖÐÖ¹Òåģʽ¶ÑÕ»¿Õ¼ä
UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;Stack spaces for Undefined Mode 䶨Òåģʽ¶ÑÕ»

    AREA    Heap, DATA, NOINIT

bottom_of_heap SPACE 1

    AREA    Stacks, DATA, NOINIT

StackUsr

END
u012747072
menxiaoqi 好的,先谢谢了。有时间我自己测一下。
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
keil for arm 存储数据

MDK 编写 把数据存储到arm中寄存器的程序。 大家给点意见呗,头一次接触这东西。

如何用ARM汇编写一个冒泡排序?

``` 用ARM指令对下列SRC_DATA处的8个整数进行从大到小冒泡排序,排好的结果存放到DST_DATA处: SRC_DATA DCD 55,2,16,38,139,7,24,68 DST_DATA DCD 0,0,0,0,0,0,0,0 ``` 这个怎么写啊?

MDK的结构体问题struct

typedef struct { uint8_t lowsel; uint8_t highsel; } hl; hl HighLowSel[16] = {{0x07,0x00},{0x06,0x00},{0x05,0x00},{0x04,0x00}, {0x03,0x00},{0x02,0x00},{0x01,0x00},{0x00,0x00}, {0x07,0x01},{0x06,0x01},{0x05,0x01},{0x04,0x01}, {0x03,0x01},{0x02,0x01},{0x01,0x01},{0x00,0x01}}; 编译提示出错 .\Obj\Project.axf: Error: L6200E: Symbol HighLowSel multiply defined (by board.o and main.o). 请教,如何修改

keil uvision5 编写汇编语言!

第一次用,错误百出啊,实在看不出那里错了,求各位大神指教,![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)

MDK在线调试运行(run)状态下,停止,MDK直接退出原因

MDK5.14环境,工程在DEBUG在线调试运行后,STOP或者退出debug模式时,MDK软件直接关闭了,什么提示都没有,找不到原因? 我尝试过的方法: 1、更新JLINK驱动; 2、更换JLINK; 3、用STLINK及跟新驱动; 4、MDK软件重新安装; 5、去掉路径中的中文名字; 6、WINDOWS系统重做。 折腾了一天,也没找到原因。

如何使用内嵌汇编引用c函数

main.c ``` #include<stdio.h> #include<stdlib.h> extern int sum(int); int main(int argc, char __stdcall**argv) { int i; if (argc < 2) { printf("usage: main number\n"); return -1; } i = atoi(argv[1]); __asm { // 计算并输出sum(i)的值 } return 0; } ``` sum.c ``` #include<stdio.h> int sum(int num) { __asm { // 返回 1+2+…+i的值 mov eax, num add eax, 1 imul num mov ebx, 2 idiv ebx mov num, eax } printf("%d\n", num); return num; } ```

MDK5编译时遇到c/c++遇到问题的窗口

MDK5软件编译STM32c8t6程序的时候到一个.c文件时就出问题,结果说打不开这个.c文件。然而我同学编译一摸一样的程序时,就没有错误没有警告。那个.c文件好像叫croe3m.c什么的ARM内核文件。学长说是电脑用户名用的是中文不行,可是我换成英文的还是不可以。重装了好几回,还是不行。求解!

Keil 汇编语言P端口均显示未定义

在Keil中只要是涉及到端口的均显示undefined symbol,例如P1.0,P1.1,P1.2端口,都显示未定义,用的是汇编语言。求助,,,![图片说明](https://img-ask.csdn.net/upload/201607/13/1468400990_699077.png)

KEIL MDK5.1是否兼容WIN7 WIN8 WIN10 32 64这些版本?

KEIL MDK5.1是否兼容WIN7 WIN8 WIN10 32 64这些版本?

求助:MDK4下载时出现问题

Error: Cannot load driver 'D:\special\MDK4\ARM\BIN\coocox-agdi.dll'. Possible Reasons: - Driver DLL could not be found in the specified path - Driver DLL requires additional DLL's which are not installed - Required Hardware Drivers are not installed 我用的板子是CT117E 谢谢了

arm 宏调用,如何从另一个文件调用宏,而不出错

环境:MDK4 LPC2102 文件1 AREA MTest,CODE,READONLY MACRO $MSUB MADD $NUM0,$NUM1,$NUM2 ADD $NUM0,$NUM1,$NUM2 MEND END 文件2 AREA Test,CODE,READONLY ENTRY MAIN LDR R4,=0x4 LDR R1,=0x1 LDR R2,=0x3 MADD R0,R1,R2 STR R0,[R4] HALT B HALT END 出现了。2012main.s(8): error: A1163E: Unknown opcode MADD , expecting opcode or Macro 这是.sct LR_IROM1 0x00000000 0x00004000 { ER_IROM1 0x00000000 0x00004000 { *.o(Test, +First) .ANY( +R0) } RW_IRAM1 0x40000000 0x00001000 { .ANY( +RW +ZI) } }

关于KEIL5.23 C文件中加入汇编报错的问题,求大神帮忙解答一下

在移植FreeRTOS的时候出现报错,port.c文件中出现了关于asm的语法错误,试了半天也没解决,原版的程序在keil4上应该是没问题的,在keil5上就报错! ![图片说明](https://img-ask.csdn.net/upload/201807/12/1531384091_744718.png)

Minecraft1.12.2forge mdk配置工作环境时总是反编译失败,要怎样解决?

![图片说明](https://img-ask.csdn.net/upload/201906/03/1559573310_557536.png)![图片说明](https://img-ask.csdn.net/upload/201906/03/1559573323_146718.png) 运行的时候总是卡在56%然后就报错,本人萌新求大佬帮忙看下是哪出错了

KEIL MDK 怎么设置--no_conditionalize?

我的STM32L476在调用 arm_rfft_fast_f32函数时出现“ Warning: L6989W: Could not apply patch sdcomp-29491-629360 to instruction VPOP {d8-d15} at offset 0x1c2, instruction is within an IT block and is not the last instruction for arm_cfft_radix8_f32.o(.text).”的报错信息。网上查看了下,需要在KEIL里面将编译选项设置成--no_conditionalize,但是这一步不知道怎么操作。

keil 5 mdk 建立工程问题

我用原子的stm32 的书 ,用它给的文件和步骤建立工程为啥会出错,但他给的工程却能编译成功, 一样的文件啊 ![图片说明](https://img-ask.csdn.net/upload/201709/17/1505656695_732407.png)

内联汇编语法问题 输出操作数

编译器用的是devc++,编译时报错[Error] invalid 'asm': operand number out of range。 出错语句为:asm ("movl %1, %%eax"::"r"(no):"%eax"); 如果加上一个输出操作数就能通过编译,这是为什么?对于不需要输出操作数的语句应该怎么处理?

Keil MDK5调试时单步要按好几下才能进入下一步,怎么办?

该成英文路径也不行!怎么办?在STM32调试过程中,单步总是在汇编窗口中,无法实现C语言的单步?

使用MDK建立项目模板,运行出错,error5?

配置项目模块时,显示错误 ..\CORE\core_cm3.h(90): error: #5: cannot open source input file "stdint.h": No such file or directory _我查看了了cm3.h文本里的代码,没看出问题,是预编译头的问题ma 标签:#c++,#STM,#MDK4

在mdk中用共用体,给它的成员赋值,然后报错了 请教大神怎么解决

在mdk中用共用体,给它的成员赋值,然后报错了 请教大神怎么解决![图片说明](https://img-ask.csdn.net/upload/201909/20/1568943168_38872.png)

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

立方体线框模型透视投影 (计算机图形学实验)

计算机图形学实验 立方体线框模型透视投影 的可执行文件,亲测可运行,若需报告可以联系我,期待和各位交流

2019 AI开发者大会

2019 AI开发者大会

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

软件测试2小时入门

软件测试2小时入门

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

计算机图形学-球的光照模型课程设计

计算机图形学-球的光照模型,有代码完美运行,有课程设计书

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

fakeLocation13.5.1.zip

fakeLocation13.5.1 虚拟定位 ios13.5.1的最新驱动下载,iPhone/iPad免越狱虚拟定位工具Location-cleaned驱动已更新

UnityLicence

UnityLicence

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

php+mysql学生成绩管理系统

学生成绩管理系统,分三个模块:学生,教师和管理员。 管理员模块:负责学生、老师信息的增删改;发布课程信息的增删改,以便让学生选课;审核老师提交的学生成绩并且打印成绩存档;按照课号查询每个课号的学生成绩

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

推荐24个国外黄色网站欣赏

在中国清朝,明黄色的衣服只有皇子才有资格穿,慢慢的黄色在中国就成了高贵的颜色。在人们的色彩印象中,黄色也表现为暂停。所以当你的网页设计采用黄色的时候,会让人们在你的网页前停留。 黄色,就像橙色和红色,黄色也是一个暖色。它有大自然、阳光、春天的涵义,而且通常被认为是一个快乐和有希望的色彩。黄色是所有色相中最能发光的颜色,给人轻快,透明,辉煌,充满希望的色彩印象。 黄色是一个高可见的色...

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

C++语言基础视频教程

C++语言基础视频教程

玩转Python-Python3基础入门

玩转Python-Python3基础入门

相关热词 c# cad插入影像 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园
立即提问