- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习龙芯汇编语言程序设计(第一篇)
MIPS汇编 — MIPS 汇编简介级别: 初级版本:0.10作者:胶林探索(龙芯技术支持论坛)2007年1月8日龙芯2E微处理机可以运行MIPS2/MIPS3的绝大多数指令,学习MIPS汇编,就能用汇编语言为龙芯写软件了。龙芯2E是一种RISC体系结构的微处理机。RISC(精简指令系统计算机)从字面上看好象是一种指令简单的计算机,其实为RISC写一段简短汇编语言程序不难,若写很长的程序,那就是真正的挑战。有人可以完全用X86的汇编写软件,但在RISC处理器上,这样做那就是疯狂和不现实了。RISC指令种类较少,这样完成同样的功能,X86用一条指令,RISC就要用几条指令来完成。在IBM首先提出RISC设计思想时,目的就是让RISC处理器能在优化编译器的帮助下,生成的目标代码,在运行速度上可以和手工编写的代码相当或更快(因为编译器可以利用流水线调度技术,超标量技术等,做到一个时钟周期可以执行一条以上的指令)。当然理论上说,人写的代码总是最短和最快的,但在编写几百万条指令时,人的编写速度就太慢了,还极易出错,而且RISC的代码比X86之类CISC处理器更长,所以学习汇编程序设计,主要是为了给RISC写操作系统的底层模块,开发嵌入式应用的驱动程序和接口,以及为RISC设计编译器。RISC处理器上的程序,就是用高级语言(主要为C语言)写的,系统程序比如操作系统(甚至PMON这样的BIOS),主要的程序段是C语言写,和机器相关最底层才是汇编语言,只有极小的几段。一般的软件编程,学好高级语言程序设计和熟悉系统调用,反而比学习汇编更为迫切。不过,若想学习写驱动程序,BIOS,嵌入式应用,写编译器,那就继续看下去吧。(欢迎各路高手指教)顺便说几句,由于RISC的目标代码比X86的长,所以,RISC处理器和X86比,拥有更大的Cache,处理器的带宽也比X86的更高,所以高端的RISC处理器要比X86的更贵,而低端应用上,RISC又比X86性价比高,功耗上更有优势。先看一段程序:
引用:
.rdata.align 2
hello:
.asciz Hello, Loongson!\n
len = . - hello
.align 4
.text
.globl __start
__start:
.ent main
main:
move $4,$0
la $5,hello
li $6,len #17 #length
li $2,4004 #write
syscall
#exit
li $2,4001
li $4,0
syscall
.end main
输入之后,可以用下面的命令来执行:
引用:
$ as -o hel3.o hel3.s$ ld hel3.o
$ ./a.out
有关程序清单的一般说明每条指令占用一行,指令和它的参数用空格或制表符分割。MIPS汇编需要一个目标寄存器用于所有寄存器到寄存器的操作(因为它是RISC体系结构)。目标寄存器总是位于参数列表的第一个。在 MIPS Linux中,系统调用是通过syscall指令,通用寄存器$2中的系统调用(syscall)号和约定好的其他通用寄存器中的参数进行的。系统调用号、参数序列以及参数个数在其它处理器的Linux操作系统中可能会有所不同,C语言程序员通常利用libc库(它处理特定于OS的细节)进行系统调用。寄存器表示法龙芯2E处理器有32个64位GPR(通用寄存器)以及诸如PC程序计数器,还有用于乘法和除法的HI和LO,还有32个64位FPR(浮点寄存器)。龙芯2E处理器采用了先进的寄存器重命名技术(从而更有效实现多条指令的同时执行),实际上它的两个物理寄存器堆分别有64个64位通用寄存器和64个64位浮点寄存器。通用寄存器$31还是处理器硬件约定的JAL指令的链接寄存器。(JALR可以使用任何一个通用寄存器)。通用寄存器$0,它的值恒为零。由于MIPS采用将比较运算的结果放入任意一个指定的通用寄存器,所以龙芯没有整数比较运算结果的标志寄存器(浮点运算使用状态寄存器的一个状态位)。指令说明:move 目的寄存器,源寄存器,表示把源寄存器的值传送至“目的寄存器”la表示“装入地址”。li表示“立即装入”。有意思的是,上面的三条指令全是伪指令,有可能被as程序翻译成一条以上的实际指令,如li,或只是一个实际指令的一个别名,如move。
学习龙芯汇编语言程序设计(第二篇)
上机实践用编辑程序输入源代码,存盘后得到源文件。运行汇编程序(as)生成目标代码文件。运行连结程序(ld)生成可执行文件。下面几种方法可以进行实际的上机实验:1. 已经拥有福珑迷你电脑这个我现在还没轮到
您可能关注的文档
最近下载
- 中国染料化工项目经营分析报告.docx
- 专题04:论证结构与思路-备战2025年中考语文一轮复习现代文阅读讲与练(江苏通用)(解析版).docx VIP
- 初中英语读写结合模式促进写作教学的探讨.pptx VIP
- 2025年中国DBE项目创业投资方案.docx
- 堤顶混凝土路面施工方案堤顶混凝土路面施工方案.doc VIP
- 筑牢金融数字防线:商业银行信息安全风险管理体系的构建与革新.docx
- 《人力资源管理师三级》第五章薪酬管理.ppt
- 《让子弹飞》剧本.doc VIP
- 2025年水环境服务项目可行性分析报告.docx
- DB4201T 620-2020 液化石油气供气场站设置技术规定.docx VIP
文档评论(0)