学习龙芯汇编语言程序设计
arm汇编语言程序设计步骤

arm汇编语言程序设计步骤ARM汇编语言是一种底层的计算机编程语言,常用于嵌入式系统和低功耗设备。
在进行ARM汇编语言程序设计时,需要按照以下步骤进行。
1. 定义代码段(Code Section)首先,我们需要定义代码段,用于存放我们编写的指令代码。
在ARM汇编语言中,代码段通常以".text"开始,以".section"结束。
2. 定义全局变量段(Data Section)全局变量段用于存放程序中需要初始化的全局变量。
在ARM汇编语言中,全局变量段通常以".data"开始,以".section"结束。
在定义全局变量时,需要使用合适的指令来分配内存空间,并为变量赋初值。
3. 定义堆栈段(Stack Section)堆栈段用于存放程序运行中产生的临时变量和函数调用所需要的数据。
在ARM汇编语言中,堆栈段通常以".bss"开始,以".section"结束。
在定义堆栈时,需要预留足够的内存空间。
4. 编写指令代码在代码段中,我们可以编写各种指令代码来实现具体的功能。
ARM汇编语言提供了丰富的指令集,可以进行算术运算、逻辑运算、数据传输等操作。
需要根据具体需求选择合适的指令。
5. 定义程序入口程序入口是程序开始执行的地方,通常是一个标签(Label),用于表示指令代码的起始位置。
在ARM汇编语言中,可以使用".globl"指令定义程序入口,并使用标签名进行标识。
6. 进行程序调用如果需要调用其他函数或子程序,则需要使用特定的指令来实现跳转。
在ARM汇编语言中,可以使用"b"指令进行无条件跳转,使用"bl"指令进行函数调用,并将返回地址保存在链接寄存器中。
7. 进行程序返回当函数执行完毕后,需要返回到函数调用的位置。
在ARM汇编语言中,可以使用"bx lr"指令实现跳转到链接寄存器中保存的返回地址。
8086汇编语言程序设计——第一个程序

8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。
Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。
汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。
学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。
⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。
假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。
D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。
1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。
伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。
⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。
汇编语⾔程序建⽴及汇编过程如图所⽰。
⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。
注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。
执⾏MASM和LINK命令时需要按多次回车。
3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
汇编语言入门教程

汇编语言入门教程汇编语言是一种低级机器语言的抽象表示形式,它将计算机底层的指令表示为可读的文本形式。
掌握汇编语言对于理解计算机硬件和编写高效的程序非常重要。
本教程将带您从零开始学习汇编语言的基础知识和编程技巧。
第一部分:介绍和准备工作1.1什么是汇编语言?1.2为什么要学习汇编语言?1.3汇编语言的基本特点和用途1.4开发环境的准备第二部分:汇编语言基础2.1数据表示和计算机内存2.2寄存器和指令2.3内存寻址方式2.4常用汇编指令2.5标志寄存器和条件分支指令第三部分:汇编语言编程技巧3.1数据的传递和处理3.2循环和分支结构3.3子程序的调用和返回3.4输入和输出操作3.5中断处理和异常控制第四部分:实例和应用4.1计算机硬件的控制4.2内存和外设的读写操作4.3实践项目和应用案例第五部分:调试和优化5.1调试汇编程序5.2性能优化和代码压缩技巧5.3代码的移植和扩展在学习汇编语言时,您需要了解计算机的基本结构和组成部分,包括中央处理器(CPU)、寄存器、内存等。
您还需要安装一款支持汇编语言的集成开发环境(IDE),并了解如何进行编译、调试和执行程序。
在学习汇编语言的基础知识时,您将学习如何表示和处理不同类型的数据,例如整数、浮点数和字符串。
您还将学习如何使用寄存器进行数据传输和计算,以及如何使用不同的寻址方式访问内存中的数据。
在学习汇编语言的编程技巧时,您将学习如何使用循环和分支结构进行条件判断和控制流程。
您还将学习如何编写子程序进行模块化的程序设计,并学习如何进行输入和输出操作以及异常处理。
通过实例和应用的学习,您将了解如何使用汇编语言实现一些常见的功能和操作。
例如,您将学习如何控制计算机硬件,如显示器、键盘和鼠标等。
您还将学习如何进行内存和外设的读写操作,以及如何处理中断和异常。
最后,您将学习如何调试和优化汇编程序,以确保程序的正确性和性能。
您将学习如何使用调试工具进行单步调试和变量跟踪,并学习如何进行代码的优化和压缩。
汇编语言程序设计简明教程

1.1.5 字符编码
• “ASCII(American Standard Code for Information Interchange, 美国信息交换标准编码 )”。
• 7位二进制表示一个字母、数字或符号,包含128个不同的编码。 • 一个字符的ASCII码占用一个字节,低7位是它的ASCII码,最高
• 压缩的BCD码用一个字节存储2位十进制数,高4位二进制表示高位 十进制数,低4位二进制表示低位十进制数。可以用相同数字的十六 进制数表述。
1.1 计算机内数据的表示
1.1.1 进位计数制 1.1.2 数据组织 1.1.3 无符号数的表示 1.1.4 有符号数的表示 1.1.5 字符编码 1.1.6 BCD码
1.1.1 进位计数制
进位计数制三个基本特征: • 有限个数字符号:0,1,2,……,R-1,“R” 称为“基数”; • “逢R进1”; • “权展开式”: 小数点向左各数字的“权”分别是R0,R1,R2,R3,……。 小数点向右各数字的“权”分别是R-1,R-2,R-3,……。 D = dn-1dn-2dn-3……d2d1d0.d-1d-2……d-m
(N位二进制111……111)。 • 无符号数需要增加它的位数时,在它的左侧添加若干个“0”,称为
“零扩展”。 • “进位标志(Carry out Flag,CF)”表示二个无符号数运算结果
的特征。如果CF = 1,表示它们的加法有“进位”,或者它们的减 法有“借位”。CF = 0,则没有产生进位或借位。
汇编语言程序设计简明教程
第一章 汇编语言基础
1.1 计算机内数据的表示 1.2 计算机组织 1.3 指令、程序和程序设计语言 1.4 80x86寄存器 1.5 80x86 CPU的工作模式
第3章-汇编程序设计PPT课件

A<=5?
Y
N
(A-5)*2+R2 R2
R2 (41H)
结束
;存运费 M
-
18
3.4.2 多分支程序(散转程序)
有一类分支程序,它根据不同的输入条件或不同的运算 结果,转向不同的处理程序,称转程序的设计
这类程序通常利用JMP @A+DPTR间接转移指令实现转移。 有如下两种设计方法: 1. 查转移地址表:
GH+2 56 78
GH+4 00 08
8
4.保留字节 标号:DS (数值表达式)
作用: 指示在程序存储器中保留以标号为起始地址的若干字 节单元,其单元个数由数值表达式指定。
例如 L1:DS 32 ; 从L1地址开始保留32个存储单元。
5. 等值指令 标号 EQU(数值表达式)
表示EQU两边的量等值,用于为标号或标识符赋值。
例如: X1
EQU 2000H
X2
EQU 0FH
…
MAIN:
MOV DPTR,#X1 ; DPTR=2000H
ADD A,#X2 ; A=A+0FH
-
9
6. 位定义 标号 BIT [位地址] 作用: 同EQU指令,不过定义的是位操作地址。 例如 AIC BIT P1.1。
7. 汇编结束 END 作用: 指示源程序段结束。
MOV DPL,A
MOV DPH,B
;DPTR为表中地址
CLR A
;A=0
JMP @A+DPTR ;转移
TAB:DW PR0,PR1,PR2,…..,PRn ;转移地址表
END
-
TAB 01 10
TAB+2 02 20 ..
汇编语言程序设计

《汇编语言程序设计》课程教学大纲学时:32 学分:2理论学时:24 实验学时:8面向专业:电科、电信、通信课程代码:B2700009先开课程:C语言程序设计课程性质:必修执笔人:王艳春审定人:陈龙猛、张金政第一部分:理论教学部分一、说明1、课程的性质、地位和任务本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。
掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。
汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。
因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。
通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。
2、课程教学和教改基本要求课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。
通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。
学习这门课程,应达到以下几个要求:①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧;②具有阅读,分析汇编语言程序的能力;③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行过程及debug工具的调试手段。
课堂授课采用多媒体教学,采用由浅入深、循序渐进学习步骤,主要讲解设计思想、实现技巧,通过提问题引导学生思考,提高学生的学习兴趣,从而加深学生对理论课的理解,提高学生的动手能力。
二、教学内容与课时分配第一章基础知识(2学时)1.1 机器语言及汇编语言的产生1.2 汇编语言的组成1.3 存储器1.4 指令和数据1.5 存储单元及CPU对存储器的读写1.6 三大总线1.7 主板、接口卡及各类存储器芯片1.8 内存地址空间教学的重点与难点:指令和数据在内存或磁盘上没有区别;内存地址空间。
《汇编语言程序设计》学习总结与心得

《汇编语言程序设计》学习总结与心得其实说实话在学这门课之前自己对汇编语言一点都不了解,只知道它也是一种语言,而且是一门很少用的语言,可能很多人都是这么想的,或许在学这门课之前不少同学也有和我当初一样的思想,大概学学就好,反正以后很少能用到,毕竟现在高级语言这么发达,而且运用起来灵活易懂,像汇编这种低级语言又难又不易学。
或许老师是知道我们之前有这种想法,所以第一节课就跟我们讲解了一下了汇编语言在当今这种高速发展的社会的作用和地位,让我们能够正确的认识汇编语言的精华,正确对待这么课。
而且还在课堂了百度了汇编语言的招聘信息,或许这才是使我们正确对待汇编的最直接的原因,关系到我们以后的出路,或许我们学好了一门汇编,以后出去找工作的机会不就更广了吗?正是在这种动力的驱使下我才对汇编语言有了一个新的认识,而且决定要把它学好。
在后来的学习中我发现其实汇编不是很难学,其实学汇编就像学其他的高级语言一样,高级语言要求对语言非常了解。
在学汇编的过程中,我们最重要的就是要掌握汇编语言中的指令的一些基本用法。
当然要能够真正的了解其中的内涵,这样我们在实际的编程中也能够像运用高级语言一样灵活的变通。
汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。
比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。
前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。
到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。
以C语言为例,C语言不也是由一个一个的函数组成的吗?没想到想汇编这样的低级语言也可以这样。
在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。
尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。
实验五 80x86汇编语言程序设计

计算机组成原理与汇编元程序设计实验报告实验五 80x86汇编语言程序设计1.按要求编写一个汇编语言程序,实现下面的功能:1)在计算机屏幕上输出自己的学号和姓名拼音;2)在计算机屏幕上输出99乘法表。
1*1=1 1*2=2 1*3=3……1*8=8 1*9=92*1=2 2*2=4 2*3=6……2*8=16 2*9=183*1=3 3*2=6 3*3=7……3*8=24 3*9=27………………8*1=8 8*2=16 8*3=24 ……8*8=64 8*9=729*1=9 9*2=18 9*3=27 ……9*8=72 9*9=813)从键盘输入任意两个一位10进制数据,按99乘法表的格式输出这两个数据的乘法运算表达式;2. 编写设计一个2,10,16进制的码制转换程序,程序输入某进制的数据,转换为其他两种进制数据输出,要求:1) 程序可以输入<65536的任意进制的数据;2) 保证输入的数据为正确的进制数据,如果输入不正确,给出错误提示,然后要求重新输入;(比如要输入10进制数据,输入的必须是0-9,如果输入其他,则错误)3)程序执行输入输出的时请先给出一定的提示,比如“please input 4 bit decimal number:”“output decimal data:”等;要求:1. 提供算法与程序框图;2. 提供源程序,在源程序空白位置,对重要的源程序进行必要的注释;3. 将源程序以你学号后6位为文件名进行保存,并进行编译、链接生成exe文件,执行生成的exe文件,并验证程序的各个功能;提供截图,在截图空白位置,进行简单的说明;计算机组成原理与汇编元程序设计实验报告云南大学软件学院实验报告指导教师 (签名):1.乘法程序程序功能:利用int 21的9号功能输出保存在data段中的学号和姓名字符;利用两层循环控制输出9*9乘法表;接收被乘数和乘数,计算结果并输出表达式。
程序框图:源程序:运行结果:2.进制转换程序功能:输入二,十,十六进制任意一种数据,通过计算转化为另外两种类型的数据并输出,数据范围最大不超过65535程序框图:源代码:运行结果:输入二进制输入十进制输入十六进制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四篇,在 C 语言中嵌入汇编。
在 C 语言中直接使用机器指令。
第五篇,介绍一些指令(一般的指令直接看手册,只介绍需要注意的)
联机分时系统
六十年代末七十年代初最热的技术之一是联机分时系统。在这之前,程序员要使用计算机一 般是使用穿孔卡片或穿孔纸带,然后是排队,轮到后,独自占用。往往编译出错,便要把计 算机让给别人用,修改后,再排队,重复上面的过程。随着计算机的内存不断增大和速度不 断提高,技术人员就研究出了让多个用户分享一台计算机的办法。不但程序员获益(编辑, 编译,运行,好象独占一台电脑),商业用户也可以用来远程访问联机的数据库,这让计算 机的应用大为扩展,象银行异地处理业务,飞机订票管理这样的应用也可以实现了。专业厂 家的系统都很昂贵,而且和专有的硬件结合在一起,一般用户无法很便宜地获得。这些分时 系统有的使用字符终端,有的使用电传打字机(出于成本考虑,比终端便宜)。
在 UNIX 开发出来后,由于可移植,各种新开发的,更便宜的硬件上也能提供联机分时服务 了。
后来分时技术不断改进,现在已经有了基于网络的远程登陆,比如论坛大侠 lyxmoo 在拿到 龙芯盒子之后,慷慨提供 SSH 服务,让没有盒子的朋友们也能体验一下使用龙芯的感受。
以前提供分时服务的计算机,属于大型机(速度约每秒一百万次)。
通用寄存器$31还是处理器硬件约定的 JAL 指令的链接寄存器。(JALR 可以使用任何一个 通用寄存器)。通用寄存器$0,它的值恒为零。
由于 MIPS 采用将比较运算的结果放入任意一个指定的通用寄存器,所以龙芯没有整数比较 运算结果的标志寄存器(浮点运算使用状态寄存器的一个状态位)。
指令说明:
move 目的寄存器,源寄存器,表示把源寄存器的值传送至“目的寄存器”
不过,原来的 SSH 服务都使用 loongson,相当于是匿名登录,不便于用户行为管理,不知 道是谁在捣乱。希望每个用户使用独立的用户名。
更进一步,为了更可靠地提供服务,可以限制内存的使用,限制读写磁盘的次数。
以及用户行为的自动记录。
学习龙芯汇编语言程序设计(第三篇)
今天下午拿到机器了。 赶紧接着写了。 main.c
先看一段程序:
引用:
.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
在 MIPS Linux 中,系统调用是通过 syscall 指令,通用寄存器$2中的系统调用(syscall) 号和约定好的其他通用寄存器中的参数进行的。系统调用号、参数序列以及参数个数在其它 处理器的 Linux 操作系统中可能会有所不同,C 语言程序员通常利用 libc 库(它处理特定于 OS 的细节)进行系统调用。
RISC 指令种类较少,这样完成同样的功能,X86用一条指令,RISC 就要用几条指令来 完成。在 IBM 首先提出 RISC 设计思想时,目的就是让 RISC 处理器能在优化编译器的帮助 下,生成的目标代码,在运行速度上可以和手工编写的代码相当或更快(因为编译器可以利 用流水线调度技术,超标量技术等,做到一个时钟周期可以执行一条以上的指令)。当然理 论上说,人写的代码总是最短和最快的,但在编写几百万条指令时,人的编写速度就太慢了, 还极易出错,而且 RISC 的代码比 X86之类 CISC 处理器更长,所以学习汇编程序设计,主 要是为了给 RISC 写操作系统的底层模块,开发嵌入式应用的驱动程序和接口,以及为 RISC 设计编译器。RISC 处理器上的程序,就是用高级语言(主要为 C 语言)写的,系统程序比 如操作系统(甚至 PMON 这样的 BIOS),主要的程序段是 C 语言写,和机器相关最底层才 是汇编语言,只有极小的几段。
大型机时代结束了。现在只有少数厂家提供大型机产品。很多老的大型机的软件如果还在使 用的话,一般都是在最新的微处理机器构成的硬件平台上以仿真的方式运行。(那些大型机 的速度,最快一般也就每秒一千万次,现在仿真运行,速度一般是宿主硬件的十分之一,现 在每秒1亿次的宿主机,那是属于低档硬件了,呵呵)。
个人认为,现在如能提供龙芯的联机分时系统服务还是很有意义的(不是让个人用户志愿提 供,而是官方机构这一级),特别在学习和熟悉龙芯的初级阶段,毕竟人手一机的个人工作 站模式还要等一段时间的。以龙芯盒子的内存和速度,一台龙芯主机支持20个用户应该没 问题。
#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 体系结构)。目标寄存器总是位于参数列 表的第一个。
有字母寄存器名,比如$at,$kt0,$kt1,$gp,$sp,$fp),
但可以使用 regdef.h,利用预处理方式来支持使用非数字编码的寄存名(要注意,这时候所有字母的寄存 器名前都不要用“$”)。
我手里没机器,没有上机实际操作验证的机会。
下面的三篇题目大致为
第三篇,编写一个汇编语言模块,编译之后的.o 文件,可以与其他的 C 语言程序连接。
上面的 asmsub.s 代码使用 cc -S asmsub.c 生成
.frame $fp,8,$31
# vars= 0, regs= 1/0, args= 0, gp= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
.set noreorder
.set nomacro
la 表示“装入地址”。 li 表示“立即装入”。 有意思的是,上面的三条指令全是伪指令,有可能被 as 程序翻译成一条以上的实际指令, 如 li,或只是一个实际指令的一个别名,如 move。
学习龙芯汇编语言程序设计(第二篇)
上机实践 用编辑程序输入源代码,存盘后得到源文件。 运行汇编程序(as)生成目标代码文件。 运行连结程序(ld)生成可执行文件。 下面几种方法可以进行实际的上机实验: 1. 已经拥有福珑迷你电脑 这个我现在还没轮到,好羡慕那些已经盒子到手的龙芯发烧友。 2. 使用远程登陆,也可以做到在真正的龙芯硬件上运行你的程序 这个已经体验过了,效果很好。 3. 使用模拟器 gxemul 这个我没做试验,请使用过的朋友介绍一下经验。 4. 使用 SPIM。 这个我以前就用过,在和实际的龙芯比较之后,觉得只对熟悉和记忆指令有帮助。 主要缺点是,在 SPIM 上可以运行的源代码不做修改无法在龙芯上汇编,反过来也一样。因为系统调用不 一样,保留字也有差别,寄存器名也不一样。 还要改一下 SPIM 的例外处理程序,随 SPIM 提供的例外处理程序是 C 语言的调用约定,不是独立汇编模式。 寄存器名区别: SPIM 需要在寄存器名前加“$”,比如$v2。 Linux 或 Irix 下的真正的汇编程序,是使用数字编号加上前缀的“$”来表示它的寄存器名(只有少数的寄存器
学习龙芯汇编语言程序设计(第一篇)
MIPS 汇编 — MIPS 汇编简介 级别: 初级 版本:0.10 作者:胶林探索(龙芯技术支持论坛)
2007年1月8日 龙芯2E 微处理机可以运行 MIPS2/MIPS3的绝大多数指令,学习 MIPS 汇编,就能用汇 编语言为龙芯写软件了。
龙芯2E 是一种 RISC 体系结构的微处理机。RISC(精简指令系统计算机)从字面上看 好象是一种指令简单的计算机,其实为 RISC 写一段简短汇编语言程序不难,若写很长的程 序,那就是真正的挑战。有人可以完全用 X86的汇编写软件,但在 RISC 处理器上,这样做 那就是疯狂和不现实了。
addiu $sp,$sp,-8
sw
$fp,0($sp)
move $fp,$sp
以上是用于保留 frame
sw
$4,8($fp) #$4寄存器传递参数 a
cc main.c asmsub.c
执行: $ ./a.out 300 利用上面的分别编译的功能,就可以实现设计一个单独的汇编语言模块 asmsub.s,把需要 使用的汇编代码放入这个模块。 再利用 cc main.c asmsub.s -o main 实现从 main.c 中调用 asmsub() ./main 300
nop addu $2,$3,$2 #函数的值在$2中 move $sp,$fp #清除帧
lw
$fp,0($sp)
addiu $sp,$sp,8
j
$31 #返回
nop
.set macro
.set reorder
.end asmsub .ident "GCC: (GNU) 4.1.2 20061028 (prerelease) (Debian 4.1.1-19)"
.file 1 "asmsub.c" .section .mdebug.abi32 .previous .abicalls .text .align 2
.globl asmsub
.ent asmsub
.type asmsub, @function
asmsub:
.frame $fp,8,$31
# vars= 0, regs= 1/0, args= 0, gp= 0