计算机语言

The words of a computer’s language are called instructions,and its vocabulary is called an instruction set.

**MIPS汇编语言:(精简指令集)
add a,b,c //把b和c相加,和放入a中
每条MIPS算术指令只执行一个操作,有且仅有三个变量。这一点符合硬件简单性的设计原则,操作数个数可变将给硬件设计带来
更大的复杂性。这反映了硬件设计三条基本原则之一:简单源于规整

例子:
a=b+c ——> add a,b,c
d=a-e ——> sub d,a,e
f = ( g + h ) - ( i + j ) :
				注意一条MIPS指令仅执行一个操作,因此编译器必须将这条c语句编译成多条汇编指令,这就需要创建两个临时变量,即:
				add t0,g,h
				add t1,i,j
				sub f,t0,t1

为增强可以执行,java最初设定为依靠软件解释器执行的语言,解释器的指令集称为java字节码,与MIPS指令集有很大不同,为了使性能和等效的c 程序相近,java系统现在的做法是将字节码编译成为类似MIPS这样的机器指令。因为java完成编译的时间迟于c,所以java编译器通常称为即时编译器。

计算机硬件的操作数
MIPS算术运算的指令的操作数必须来源于寄存器,MIPS体系结构中寄存器大小为32位,MIPS一类的典型现代计算机中有32个寄存 器。
硬件设计原则2:越小越快,这样设计者必须在更多寄存器和加快时钟周期之间权衡。同时存储器一定比寄存器慢,因为寄存器少
存储器操作数
数据结构存放在存储器中。数据传送指令用于在存储器和寄存器之间传送数据。load指令将存储器中的数据复制到寄存器中, 格式是:opcode R1,Imm(R2)(opcode是操作码,这里是lw,R1是目标寄存器,Imm是常数,R2是第二个寄存器,Imm+R2的值是存储 器的地址)。
例题:
g = h + A[8]
编译器将寄存器分配给变量

				lw $t0,8($s3)
				add $s1,$s2,$t0
				数据传送指令中的常量称为offset,第二个寄存器中存放base address ,这个寄存器也称为base register
				MIPS采用大端编址
	存数指令sw和lw格式相同,它是将寄存器中的数据存放在存储器中。

当程序变量个数多余寄存器个数,编译器会尽量将最常用的变量保持在寄存器中,而将其他变量放在存储器中,方法是使用sw/lw指令在寄存器和存储器之间
传递变量。将不常用的变量(或稍后才使用的变量)存回到存储器中的过程叫寄存器溢出。

常数或立即数操作数
要使用常数需将其从存储器中取出。(常数可能是在程序加载时放入存储器的)。这就会用到lw指令。避免这种情况的一种方法
是用加立即数指令
addi $s3 , $s3 , 4 // $s3 = $s3 + 4
MIPS支持负常数,所以MIPS不需要设置减立即数指令。

你可能感兴趣的:(汇编语言)