计算机指令

指令集:一个给定体系结构所能理解的命令集合

算术运算指令保持三个操作数:为了让硬件简化

Java为了可移植性,当初被设计成了依赖软件解释器interpreter。解释器的指令集instruction叫Java字节码bytecodes。

为了使得性能与C接近,Java现在将字节码编译成成本地指令集类似MIPS。但是编译过程比在C中靠后,所以Java编译器叫做JIT Just in Time.

典型的MIPS有32个寄存器

算数运算在MIPS中只发生在寄存器。

数据传输指令:在寄存器和内存间传输数据

大端:MIPS 高地址放低位

小端:低地址放高位

如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见,本书使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。
;地址偏移 大端模式  小端模式
0x00            12(OP0)78(OP3)
0x01            34(OP1)56(OP2)
0x02            56(OP2)34(OP1)
0x03            78(OP3)12(OP0)
网络字节序:互联网使用的网络字节顺序采用大端模式进行编址。收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。 

主机字节序:根据处理器的不同而不同,如PowerPC处理器使用大端模式,而Pentuim处理器使用小端模式。在80X86平台中,它是以小端法存放的,在发送前需要使用系统提供的htonl将其转换成大端法存放。

load:memory to register lw load word

lw $t0,8($s3):memory 的基地址存在$s3中,偏移地址为8。数据传输到$t0中

store:register to memory sw store word

sw $t0,48($s3) t0中的值写入说为基地址 偏移地址为48的内存中

算数指令一次可以操作两个寄存器,并进行运算。而数据传输指令一次只能读写一个操作数,并且不能进行运算。

addi add immediately addi $s3,$s3,4

MIPS寄存器型指令字段:

op(6 bits) rs(5) rt(5) rd(5) shamt(5) funct(6)

opcode;first reg source;second reg source;reg destination;shift amount;function

MIPS立即数型指令:

op(6) rs(5) rt(5) constant/address(16)

移位指令:

sll 左移 sll $t2,$s0,4 # reg $t2 = reg $s0 << 4 bits

and $t0,$t1,$t2 # reg $t0 = reg $t1 & reg $t2

条件分支指令

beq register1, register2, L1

bne register1, register2, L1

set on less than, or slt.slt $t0, $s3, $s4 # $t0 = 1 if $s3 < $s4   slti $t0,$s2,10 # $t0 = 1 if $s2 < 10

jump-and-link instruction (jal):跳转到某个地址的同时,把下一条指令的地址保存在$ra中 程序计数器

PC:保存当前运行的指令地址jal将PC+4保存在$ra

$a0–$a3: four argument registers in which to pass parameters参数寄存器

 $v0–$v3: two value registers in which to return values返回值寄存器
 $ra: one return address register to return to the point of origin返回地址寄存器

The jump register instruction jumps to the address stored in register $ra—which is just what we want. Thus, the calling program, or caller, puts
the parameter values in $a0–$a3 and uses jal X to jump to procedure X (sometimes named the callee). The callee then performs the calculations,
places the results in $v0 and $v1, and returns control to the caller using jr $ra.

栈指针:$sp 栈增长是按地址从高到低的顺序

MIPS寻址方式总结:

寄存器寻址:操作数为寄存器

基址 偏移寻址:操作数在内存中 地址是基址寄存器和常数的和

立即数寻址:操作数是指令中的常数

PC相对寻址:地址是PC计数器和常数的和

伪直接寻址:

编译器:compiler

汇编器:assembler汇编语言转换成目标文件。包括目标文件首部 ,正文段text segment,静态数据段,重定位信息段relocation,符号表symbol tables,调试信息

链接器:linker

将代码和数据模块按符号放入内存;决定数据和指令标记的地址;修正内部和外部的引用

根据重定位信息和符号表解析未定义标记 链接器产生可执行文件,与目标文件具有相同的格式,但是不包含未解决的引用。

加载器: loader

因为可执行文件executable file存放在磁盘中,所以操作系统需要将其读到内存中并启动执行。

1.读取可执行文件首部以确定正文段和数字段的大小

2.为正文和数据创建一个足够大的空间

3.把可执行文件中的指令和数据复制到相应的内存中

4.把主程序的参数复制到栈的顶部

5.初始化机器寄存器,将栈指针指向第一个空单元

6.跳转到启动例程,它将参数复制到参数寄存器并且调用程序的主例程。主例程返回时,启动例程调用exit()系统调用终止程序。

动态链接库:

JAVA

 JAVA字节码 解释JAVA程序设计的指令集中的指令

JAVA虚拟机:能够用来解释JAVA字节码的软件

即时编译器JIT通过跟踪运行的程序来定位热点,能够在运行时把已译码部分的代码直接解释成宿主机上的机器语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值