龙芯下汇编语言编程(1)

【龙芯1c库】龙芯1c上c语言写的函数调用汇编语言写的函数 封装龙芯1c上常见外设接口,便于在裸机程序或实时操作系统中使用,类似于STM32库,正在不断添加中。Git地址是https://gitee.com/caogos/OpenLoongsonLib1c封装龙芯1c库难免会涉及到汇编程序,本文以c语言main()函数中调用一个用汇编实现的禁止中断的函数。源码如下test_entry.S#define v0 $2 /* return v... 阅读详情

作者: comcat 发表日期: 2007-03-22 11:20           http://comcat.blog.openrays.org/blog.php?do=showone&tid=310

 

1. Hello World

从经典的Hello World开始:

.text #表示将后面的代码编译后置于目标文件的.text段
.globl main #声明main为全局变量。该变量名会置于符号表中
.ent main #告诉汇编器main函数在此开始,调试用

main: #标号,表示main函数的始地址,有实际意义
lui $4, %hi(cmd) #Load Upper Immediate
addiu $4, $4, %lo(cmd) #execve的第一个参数置于a0, 为字符串/bin/echo的首地址

lui $5, %hi(argv) #%hi, %lo为汇编器定义的宏,分别求地址的高16和低16位
addiu $5, $5, %lo(argv) #execve的第二个参数置于a1, 为字符指针数组的首地址

move $6, $0 #第三个参数a2为0 (NULL)
li $2, 4011 #将execve系统调用号置入v0寄存器
syscall #系统调用

move $2, $0 #main的返回值0, 置于v0
jr $31 #main返回

.end main #告诉汇编器main在此结束,调试用


.data #以下内容位于目标文件的数据段

cmd:
.asciiz "/bin/echo"

msg:
.asciiz "Hello world!"

argv:
.word cmd # /bin/echo的首地址
.word msg # Hello world!的首地址
.word 0x0 # NULL


存为helloworld.s,gcc helloworld.s -o hw 编译之,执行结果:

Hello world!


2. 带立即数的指令

汇编或机器语言中,称指令中的常数为立即数(Immediate)

上面的例子我们看到这些指令:lui, li, addiu

lui: Load Upper Immediate, 加载立即数到寄存器的高16位

lui t0, 0xaa55 # t0 = 0xaa55 0000
addiu t0, t1, 64 # t0 = t1 + 64,为无符号相加

带立即数的指令,指令编码格式属于I-型,回忆下其格式: 6, 5, 5, 16 预留给立即数的空间是16位,因此指令中的立即数范围,无符号为0~2^16-1, 有符号为-2^15~2^15-1

如果超过范围,可以先用 li 将立即数置入寄存器,然后使用add运算


3. li (Load Immediate)

li (Load Immediate) 没有16位的限制,因为它不是单一的一条指令,而是由汇编器定义的一个“复合”指令,一般称其为宏指令。

常见情况下,li的展开:

li t0, -5 -----> addiu t0, zero, -5

li t0, 0x8000 -----> ori t0, t0, 0x8000

li t0, 0x12345 -----> lui t0, 0x1
ori t0, t0, 0x2345

4. 龙芯下,系统调用的约定

v0: 用于置系统调用号
a0~a3: 置前四个参数,后面的参数用栈传
syscall 系统调用触发指令
返回值依旧使用v0接收


从零开始:在龙芯3A5000上动手写你的第一个LoongArch汇编程序 本文详细介绍了如何在龙芯3A5000平台上编写、编译和运行第一个LoongArch汇编程序。从环境准备、工具链配置到Hello World程序编写,再到编译链接和调试,逐步引导开发者掌握LoongArch指令集的基础知识,为深入理解国产CPU架构提供实践指导。 阅读详情

相关推荐

龙芯架构及编程详解

龙芯架构采用的是指令集体系结构(ISA)的MIPS架构。MIPS(Microprocessor without Interlocked Pipelined Stages)是一种经典的RISC(Reduced Instruction Set Computer)架构,它以简化指令集和高效执行为特点。编程龙芯架构可以使用汇编语言和高级编程语言,如MIPS汇编语言和C语言。龙芯(Loongson)是中国自主研发的一种处理器架构,它是由中国科学院计算技术研究所(ICT)与中兴通讯股份有限公司(ZTE)合作开发的。

DevWizard的博客 1338

简单介绍龙芯汇编

1. 判断的实现 看这条C语句的汇编实现: if(i == j)     f = g + h; else     f = g - h; ------------------------------------------------------------ bne        $15, $16, Else   #i!=j,则跳转到Else,注意:$15.$16表示

xiezhongtian的专栏 1836

龙芯2K1000实战开发-PMON开发上

其中最重要的是 loongson3_clksetting.S 和 loongson3_ddr2_config.S 两个文 件,loongson3_clksetting.S 设置了 cpu 和 ddr 的频率,loongson3_ddr2_config.S 对 ddr 进行了初始化,并获得内存大小,作为参数,在调用 initmip。

whm128的博客 1763

基于龙芯32位基础整数指令集的汇编器(一)

采用Qt来做UI开发,一方面是得益于Qt能在可视化界面就把大量重复的定义初始化窗口控件给做了,另一方面是考虑到后期反馈体感优化能够使用代码进行,且Qt基于C++,不会像Python一样到处调包,配环境就配个半天,而且使用C++这类偏向系统层面的语言更能体现出编程者的代码水平。不过Qt开发方面国内资源稀缺,如果碰到一些想使用的类或是函数,就基本只能上。第一部分就到这里结束吧,详细代码项目可通过gitee仓库获取,,内容属作者原创,只供学习免费使用,其余用途请联系作者。

paticita的博客 1439

龙芯2K1000实战开发-配置及编译

当 pmon 被编译时,以这两个文件为基础把相应的 *.c 文 件编译成 *.o 文件,这两个文件的主要区别是:Targets/LS2K/conf/files.LS2K 依赖于不 同的龙芯 CPU,CPU 不同该文件的内容就可能不同;本文主要分享了PMON的配置及编译过程。工具链: http://ftp.loongnix.org/embedd/ls3a/toolchain/gcc-4.4-gnu.tar.gz。解压:sudo tar -zxvf gcc-4.4-gnu.tar.gz -C /

whm128的博客 1584

龙芯2K1000实战开发-PMON开发下

函数名称叫 init_fs()或者 init_xxxfs ()。百度百科的词条中,这样解释Bootloader:“Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行”。PMON 的启动可以分为三个阶段: 首先是 start(汇编阶段),该阶段主要完成的是 cpu 本身需要相关的初始化,如寄 存器初始化、TLB 初始化、频率的初始化、内存初始化、程序地址段跳转。

whm128的博客 991

龙芯汇编语言编程(1)

当前版本: 0.1完成日期: 2007-3-22作者: Dajie Tan 1. Hello World从经典的Hello World开始:   .text                          #表示将后面的代码编译后置于目标文件的.text段   .globl    main                #声明main为全局变量。该变量名会

四度空间 4139

龙芯gsc3280处理器详尽用户手册

本文还有配套的精品资源,点击获取 简介:《龙芯gsc3280用户手册》为开发者、系统集成商和工程师提供基于龙芯架构的gsc3280处理器的深入指导,包括处理器架构、寄存器结构、指令集、中断与异常处理、内存管理、外设接口、调试工具、电源管理、开发环境配置及安全特性等内容。这份手册是开发和优化基于gsc3280系统的宝贵资源。 1. 龙芯gsc3280处理器架构概览 ...

weixin_28793831的博客 1074

arm平台下的反汇编pdf_当好开源生态建设排头兵——龙芯平台移植容器热迁移工具CRIU纪实...

点击关注“蓝字”探知芯片世界摘 要龙芯在信息化推广中,用户需要在龙芯平台上移植一些社区开源软件,用来支撑应用系统。龙芯长期建设开源软件工程师团队,完成社区开源软件在龙芯平台上的移植工作。容器热迁移工具CRIU是云平台中广泛使用的工具,经过龙芯工程师的努力,克服汇编语言、动态编译与链接、内核级调试等众多技术难点,最终成功完成移植。本项目移植一共添加和修改代码7655行,其中汇编语言代码20...

weixin_39625747的博客 380

Box2D-Lite源码阅读笔记(2)

0.初始化函数 static void InitDemo(int index) { world.Clear(); numBodies = 0; numJoints = 0; bomb = NULL; demoIndex = index; demos[index](bodies, joints); } 在这个初始化函数中,一般会默认执行index=0的函数,这个函数就是一个示例,因为示例比较简单,所以也便于研究,示例效果如下。 就是一个方块。 进入第一个示例函数。(忽略我加的注释)

ARTELE的博客 976

Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

【代码】Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

weixin_39169967的博客 4145

《 汇编语言编程基础 基于 LoongArch 》读书与实践笔记

好记性不如烂笔头,在此记录与分享一下《 汇编语言编程基础 基于 LoongArch 》读书与实践笔记。如文中出现错误,欢迎在评论区留言讨论,我会尽快修改更新 :-)

loongsoner的工作学习博客 4844

【算法设计与分析】期末复习题(超详细)

刚刚整理了一下电脑的文件,发现了这份上学期的算法设计与分析期末复习题,有需要的文后自取。

a1234567822的博客 6614

[嵌入式系统-4]:龙芯1B 开发学习套件-1-开发版硬件介绍

龙芯 1B 开发学习套件学习过程与步骤:(1)龙芯 1B 开发版 (本文)-》(2)SOC 龙芯1B芯片手册 =》(3)LS232 MIP32 CPU内核 =》(4)MIP32汇编语言 =》(5)龙芯 1 系列芯片的IDE集成开发环境 =》(6)裸机启动 =》(7)裸机应用程序 =》(8)轻量级实时嵌入式操作系统 =》(9)驱动程序 =》(10)应用程序龙芯 1B 芯片是龙芯中科技术股份有限公司研发的 SoC 芯片,具有完全意义上的自主知识产权。该芯片使用LS232 内核。

文火冰糖(王文兵)的博客 3971

Matlab+Matpower实战:手把手教你生成IEEE14节点FDIA攻击数据集(附完整代码)

本文提供了一份基于Matlab与Matpower工具构建IEEE14节点FDIA攻击数据集的完整实战指南。通过动态负荷数据模拟、潮流计算、状态估计及隐蔽攻击向量注入,手把手教你生成可用于电力系统网络安全研究的仿真数据集,并附有核心代码与调试技巧。

bean的博客 398

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】

三个因子挖掘思路

GJ57017_wx的博客 1246

龙芯下汇编语言编程(Hello world)

原文网址:http://comcat.blog.openrays.org/blog-htm-do-showone-tid-310.html 1. Hello World 从经典的Hello World开始:   .text                   #表示将后面的代码编译后置于目标文件的.text段   .globl     main

junmuzi的专栏 1992

AUTOSAR网络管理配置详解:Vector DaVinci工具全面讲解

手把手带你用Vector DaVinci完成AUTOSAR网络管理模块的配置,涵盖NmChannel、NmPdu、重复帧抑制等关键参数设置,深入解析CAN总线上的NM报文调度与唤醒机制,助你扎实掌握AUTOSAR网络管理核心实践。

weixin_42504649的博客 168

汇编语言:从硬件的视角看编程

机器指令,可以视为编程中的“结绳记事”方式,而汇编语言则类似于古老的“甲骨文”。通过汇编器(Assembler)的转换,汇编语言的源代码能够被翻译成二进制指令,供计算机执行。

sldwan的博客 957

C#串口通信革命:RJCP.DLL.SerialPortStream实战全解析

本文介绍了如何通过RJCP.DLL.SerialPortStream库实现高性能串口通信解决方案。相比.NET自带的SerialPort类,该库提供了完全的异步非阻塞IO、动态缓冲区控制和多线程事件驱动等优势,特别适合工业自动化和物联网场景。文章详细讲解了环境搭建、核心功能对比,并通过代码示例展示了端口配置、异步通信管道搭建等关键技术。最后以Modbus RTU协议为例,演示了高级协议封装方法,为开发者提供了完整的工业级串口通信实现方案。

墨夶的博客 1872

【Python爬虫(1)】专栏开篇:夯实Python基础

要想熟练掌握 Python 爬虫技术,扎实的 Python 基础是必不可少的。这就好比建造高楼大厦,Python 基础就是那稳固的基石。只有打好了这个基础,我们才能在爬虫的学习道路上稳步前行,理解并运用各种爬虫技术和框架。

邓邓子的博客 2026

龙芯软件开发(2)--汇编资料

要开发龙芯,那么要先学习一下它的汇编。而它的汇编跟MIPS的相似,这样的话,就只能拿MIPS32的先来学习了。下面就是一些资料的连接。 MIPS Assembly Language Programminghttp://www.eecs.harvard.edu/~ellard/Courses/cs50-asm.pdfMIPS Assembly Language Programmer’s ...

anjichan4261的博客 402

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[嵌入式系统-5]:龙芯1B 开发学习套件 -2- LoongIDE 集成开发环境集成开发环境的安装步骤

LoongIDE(龙芯开发工具集成环境)是一款专门用于龙芯计算机开发的集成开发环境(IDE)。龙芯是中国自主研发的高性能处理器架构,LoongIDE是为支持龙芯开发者进行软件开发而开发的工具。LoongIDE提供了一系列工具和功能,旨在简化和加快龙芯平台上的应用程序开发过程。它提供了代码编辑器、编译器、调试器性能分析工具和软件包管理器等功能,以支持全面的软件开发工作流程。LoongIDE提供了一个集成的文本编辑器,支持多种编程语言,如C/C++、汇编语言等,以便开发者编写和编辑源代码。

文火冰糖(王文兵)的博客 5168

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

龙芯1B开发板开箱实测:从点亮屏幕到串口打印‘Hello World’的全记录

本文详细记录了龙芯1B开发板从开箱到成功运行‘Hello World’的全过程,包括硬件初体验、开发环境配置、屏幕点亮技巧及串口通信实现。通过实战演示,帮助开发者快速上手国产龙芯1B开发板,体验其开发环境与性能特点。

weixin_30634661的博客 375

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MIPS 汇编语言编程的艺术(龙芯适用)

分析系统调用的实现时看到这么一段代码,令人不禁拍案叫绝。 系统调用的参数传递,前4个参数通过a0~a3传,后面的参数要通过栈来传,目前内核 系统调用最长的参数个数为8。 用栈传递参数时,涉及到要将位于用户空间的参数先复制到内核空间(内核栈)。 因为系统调用的参数个数不定,因此就需要判断参数个数为5、6、7、8 不同情况时, 相应的复制操作个数。5个参数时需要复制个数为1,6个时为2,以此类推。

四度空间 3250

龙芯汇编语言编程艺术

转自   http://comcat.blog.openrays.org/blog.php?do=showone&tid=368   作者: comcat 发表日期: 2007-04-27 17:49   分析系统调用的实现时看到这么一段代码,令人不禁拍案叫绝。 系统调用的参数传递,前4个参数通过a0~a3传,后面的参数要通过栈来传,目前内核 系统调用最长的参数个数为8。 用栈

LonlyGod的专栏 1027
上一篇: 关闭龙芯2E 之 cache
下一篇: Linux 存储管理分析札记
LonlyGod
博客等级 码龄15年 32粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值