
MIPS汇编
专注嵌入式
喜欢LINUX、嵌入式、driver、kernel,寻找志同道合的朋友
展开
-
MIPS中断/异常处理机制/系统调用
1、精确异常的概念:在运行流程中没有任何多余效应的异常。即当异常发生时,在受害指令之前的指令被完全执行,而受害指令及后面的指令还没开始执行(注:说受害指令及后面的指令还没做任何事情是不对的,实际上受害指令是处于其指令周期的第三阶段刚完成,即ALU阶段刚完成)。精确异常有有助于保证软件设计上不受硬件实现的影响。 2、CP0中的EPC寄存器用于指向异常发生时指令跳转前的执行位置,一般是受害转载 2011-11-08 10:05:06 · 7617 阅读 · 0 评论 -
mips分支延迟槽及虚拟地址转换等问题
写的挺不错的,但是还是有点困惑,就是关于分支预测技术和延迟槽的关系,等弄清楚后再写个总结吧。 链接:http://hi.baidu.com/comcat/blog/item/c6f4f909cf551bc53ac76359.html 1. 概述分支延迟槽 (Branch delay slot),简单地说就是位于分支指令后面的一条指令,不管分支发生与否其总是被转载 2012-04-15 22:17:27 · 1563 阅读 · 0 评论 -
mips的32个寄存器
MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic names reflecting their conventional8 use:$0 $zero constant 0$1 $at used by assembler$2 $v0 functio转载 2011-11-08 09:08:16 · 5719 阅读 · 0 评论 -
GCC内嵌汇编语法
内嵌汇编语法如下: __asm__(汇编语句模板: 输出部分: 输入部分: 破坏描述部分) 共四个部分:汇编语句模板,输出部分,输入部分,破坏描述部分,各部分使用“:”格开,汇编语句模板必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。例如: __asm__ __volatile__("cli转载 2012-07-05 13:04:53 · 741 阅读 · 0 评论 -
MIPS 指令
MIPS 指令 指令功能应用实例LB从存储器中读取一个字节的数据到寄存器中LB R1, 0(R2)LH从存储器中读取半个字的数据到寄存器中LH R1, 0(R2)LW从存储器中读取一个转载 2013-01-14 10:36:50 · 1832 阅读 · 0 评论 -
mips汇编指令学习
mips的32个寄存器MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic names reflecting their conventional8 use:$0 $zero constant 0$1 $at used by assembler$2转载 2013-01-14 10:44:13 · 9606 阅读 · 0 评论 -
mips编译出的二进制文件怎么看?
PMON在编译之后,生成的二进制文件其实也是可以看懂的。每32位(4个byte)组成一句mips汇编指令,比如:3c08bf22luit0,0xbf22用UE(或者linux下的hexedit)打开gzrom.bin,可以看到是反着排列的,即为 22 bf 08 3c。如果想看往一个地址写的数据的话,如下:二进制文件数据排布如下:红色为地址,蓝色数据为对应数据。原创 2013-01-30 09:20:46 · 1934 阅读 · 0 评论 -
.set伪指令(mips)
set push --> save all settings .set reorder/noreorder --> let/don't let assembler reorder instructions .set at/noat --> let/don't let assembler use the register $at in instruction aliases (li,la,转载 2013-04-29 17:07:48 · 1133 阅读 · 0 评论 -
MIPS GCC 嵌入式汇编(龙芯适用)
Elta提示:代码里的/,实际是\,自行实验的时候注意一下! 当前版本: 0.1完成日期: 2007-4-9作者: Dajie Tan1. GCC 内嵌汇编的基本格式 asm("assembly code");如: asm("syscall"); //触发一个系统调用如果有多条指令,则需在指令尾部添加'/t'转载 2013-05-28 18:58:48 · 1390 阅读 · 0 评论 -
如何确定一个虚拟地址对应的汇编代码
1.通过ejtag抓到死机时的ra,假设为0x2b29640c2.重启进程,ctrl+z 挂住,top命令查看进程号3.cat /proc/进程号/map 查看进程的地址映射,假设找到0x2b211000-0x2b305000 ...lib_DRV.so,说明程序是在lib_DRV.so这个库里死掉了,0x2b29640c-0x2b211000=0x8540c即为汇编代码里的地址偏移(P原创 2013-06-13 09:02:45 · 1461 阅读 · 0 评论 -
Cache与主存之间的"全相联映射","直接映射"和"组相联映射"的区别
Cache与主存之间的全相联映射,直接映射和组相联映射的区别1.高速缓冲存储器的功能、结构与工作原理 高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转载 2013-07-27 09:41:16 · 8880 阅读 · 1 评论 -
start.s里面打印一个寄存器的值的汇编实现
/*a0 = addrt2 = *(addr)t4 for right shift*/LEAF(print_reg) li t0,UART0_BASE_ADDR li t1,10 lw t2,0(a0) li t4,32 1: sub t4,4 move t3,t2 srl t3,t4 and t3,0xf blt原创 2013-08-06 16:11:30 · 2270 阅读 · 0 评论 -
MIPS系列笔记-CP0 Hazard
CP0 hazardBecause resources controlled via Coprocessor 0 affect the operation of various pipeline stages of a MIPS32 processor,manipulation of these resources may produce results that are not dete转载 2014-01-22 10:33:39 · 1309 阅读 · 0 评论 -
CISC RISC ARM MIPS区别与联系
当今处理器一共有三个最强大的架构,其中之一是以intel和AMD为代表的x86架构(CISC),另外一个是手机、平板处理器所使用的ARM架构(RISC),最后一个便是我国龙芯处理器所选择的MIPS架构(RISC)。CISC是复杂指令集CPU,内部为将较复杂的指令译码,也就是指令较长,分成几个微指令去执行,正是如此开发程序比较容易(指令多的缘故),但是由于指令复杂,执行工作效率较差,处理数据转载 2012-04-26 10:17:18 · 5024 阅读 · 0 评论 -
linux mips启动分析
linux-mips启动分析 (1)系统加电起动后,MIPS 处理器默认的程序入口是0xBFC00000,此地址在无缓存的KSEG1的地址区域内,对应的物理地址是 0x1FC00000,即CPU从0x1FC00000开始取第一条指令,这个地址在硬件上已经确定为FLASH的位置,Bootloader将 Linux 内核映像拷贝到 RAM 中某个空闲地址处,然后一般有个内存移动操作,目转载 2012-03-26 09:52:48 · 9431 阅读 · 0 评论 -
MIPS汇编教程
MIPS Assembly Language Programminghttp://www.eecs.harvard.edu/~ellard/Courses/cs50-asm.pdfMIPS Assembly Language Programmer’s Guidehttp://www.cs.unibo.it/~solmi/te ... LanguageProgDoc.pdfM转载 2011-11-08 09:09:18 · 4337 阅读 · 0 评论 -
mips汇编简单实例——一个小计算器
其实开始的时候一直在看 mips的指令格式,看了、忘了,没什么效果。 现在通过这个例子,简单训练一下: mips汇编中: 常用寄存器的使用;系统调用: 1(print_int),4(print_str),5(read_int),10(exit);算术运算: add,sub,mul,div;逻辑运算及跳转; 上代码:(汇编写的少,代码书写、风格还很差劲,感谢请大虾转载 2011-11-08 09:11:19 · 2375 阅读 · 0 评论 -
perl语言
/????转载 2011-11-11 18:00:26 · 731 阅读 · 0 评论 -
mips cpu和北桥的基本知识
mips cpu和北桥的基本知识 kseg0: 0x8000 0000- 0x9FFF FFFF(512M): 只需要把最高位清零,这些地址就被转换(translate)为物理地址,然后把它们连续地映射到物理内存中512M大小的低字段 (0x0000 0000 -0x1FFF FFFF)内。这种转换是很简单的,因此常常把这些地址称为“无需转换的“。一般情况下,都是通过快速转载 2012-01-31 10:15:34 · 3704 阅读 · 0 评论 -
MIPS寄存器介绍
MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下:下表描述32个通用寄存器的别名和用途;REGISTERNAMEUSAGE$0$zero常量0(constant value 0)$1$at保转载 2012-02-02 12:49:31 · 2840 阅读 · 0 评论 -
BSS段
BSS(Block Started by Symbol)这个词最初是UA-SAP汇编器(United Aircraft Symbolic Assembly Program)中的一个伪指令,用于为符号预留一块内存空间。该汇编器由美国联合航空公司于20世纪50年代中期为IBM 704大型机所开发。后来BSS这个词被作为关键字引入到了IBM 709和7090/94机型上的标准汇编器FAP(Fortran转载 2012-02-24 14:26:22 · 669 阅读 · 0 评论 -
BIN与ELF
ELF格式的可执行文件中包含很多BIN以外的信息,用readelf工具可以读出来。比如 想把同一个源码编译出来的BIN和ELF都下载到0x8a000000地址1.对于BIN来讲,是纯粹的数据,如果没有偏移量的话,ICE2默认是下载到0x00000000地址的,所以要有0x8a000000的偏移。2.对于ELF来讲,其中包含着程序的入口点地址,ICE2会去读这个地址(假设是0x8020原创 2012-02-14 10:58:10 · 1118 阅读 · 0 评论 -
PMON详解
http://xenyinzen.wikidot.com/loongson-about+++++++++++++++++++++++++++++++++++++++++PMON-V1.1 目录结构+++++++++++++++++++++++++++++++++++++++++pmon的目录结构大致如下(由linux工具tree生成).|-- Targets转载 2012-02-26 16:49:40 · 21312 阅读 · 0 评论 -
PMON中autoload自动加载操作系统代码分析
龙芯BIOS的最终目的,还是需要加载一个更好的操作系统。当你在启动时不按下任何按键,pmon就会自动地加载缺省设置的操作系统。它的实现代码如下:#ifdef AUTOLOADs = getenv ("al");autoload (s);#elses = getenv ("autoboot");autorun (s);#endif上面先从al参数里读取缺省设置的操作系转载 2012-02-26 16:05:42 · 1577 阅读 · 0 评论 -
《See MIPS Run》读书笔记
这里面写的是我研读《See MIPS Run Linux》这本书时的一些读书笔记,对书上的一些疑点有比较详细的阐述。还算草稿性质,比较乱,以后有时间再来整理:)*现在MIPS世界指令集统一标准为MIPS32/64 R1和R2(Release 2),不再沿用以前所谓的R4K, R24K等芯片命名方式和MIPS I, II, III, IV, V这种指令集方式。*MIPS指令特点:1。所有转载 2012-02-26 17:10:04 · 1398 阅读 · 0 评论 -
mips寄存器约定
对于在一个CPU上进行开发,掌握其工作的CPU的寄存器约定是非常重要的。MIPS体系结构提供了32个GPR(GENERAL PURPOSE REGISTER)。这32个寄存器的用法大致如下:REGISTER NAME USAGE $0 $zero 常量0(constant value 0)转载 2015-06-19 10:21:13 · 1543 阅读 · 0 评论