电脑机器码了解 机器码是什么码( 二 )


大多数的机器码格式包括以下四种:
三地址机器码格式
三地址机器码格式主要在RISC CPU中用到,例如下边ARM一条汇编指令
ADD r1,r2,r3上述代码表示将r2寄存器中的值加上r3寄存器中的值,写入达到r1寄存器
双地址机器码格式
双地址机器码格式主要在CISC CPU中用到,例如下边Inter Pentium的一条汇编指令
ADD AX BX上述代码讲过BX寄存器的内容与AX相加后,写入到AX中,双地址机器码的坏处也很明显了,例如AX寄存器的值执行命令后就被覆盖了,不能够重用了 。
单地址机器码格式
单地址机器码格式在RISC,CISC CPU都会用到,例如下边ARM一条汇编指令
LDA r1上述代码表示将r1寄存器的值加到累加器(一种寄存器,用于存储中间结果),单地址机器码其实也是有两个操作数,一个是r1,另一个就是累加器,因为LDA r1已经意味着追加累加器的意思,所有不需要指定 。
零地址机器码格式
零地址机器码格式一般操作栈顶的数据,不需要寄存器参与,零地址机器码格式不会用到地址,对于单操作数运算,例如递增,递减,取负,清零等一元运算,直接用栈顶的数据,对于双操作数从栈顶陆续出栈两个数,然后运算,下边举例子,例如下边的表达式
Z=(A+B).(C-D)
PUSH A;A入栈PUSH B;B入栈ADD;栈顶两个数出栈,相加,然后结果入栈PUSH C;C入栈PUSH D;D入栈SUB;栈顶两个数据出栈,相减,然后结果入栈MUL;栈顶两个数据出栈,相乘,然后结果入栈POPZ;栈顶数据出栈二.番外篇2.1 寄存器寄存器和内存一样都是存储器,从功能上讲跟内存没什么区别,都是用来存储数据,从其他角度来看,寄存器和内存有如下区别
a.寄存器的速度比内存快N的等级,因此为了加快CPU获取指令或者数据的速度,就会将最近要访问的数据放入到寄存器中 。
b.寄存器的个数是有限制,一般计算机不到百个,寄存器寻址直接用名称,例如ARM CPU寄存器 r1,r1就是寄存器的名称,可以通过r1直接访问寄存器的内容,而内存则用地址,例如1234表示内存的地址
在CPU中寄存器分为以下几种
内存地址寄存器(程序员不可见)
保存了当前正在读或者正在写的内存地址
内存数据寄存器(程序员不可见)
保存了当前刚从内存读出的数据或者准备要写入内存的数据
PC 程序计数器(程序员不可见)
保存了下一条要执行的指令的内存地址
IR指令寄存器(程序员不可见)
保存了当前正在执行的指令
通用寄存器(程序员可见)
存储临时的数据例如中间结果)
特殊寄存器(程序员不可见)
例如累加器,条件寄存器等
2.2 机器码长度设计在1.2章节中阐述了机器码的格式,没有指出机器码长度的设计,这里指出 。
指令长度算法:
操作码长度+控制位长度+寄存器寻址个数*寄存器占用位数+内存直接取址个数*内存占用位数+立即数长度
操作码长度:
CPU支持的指令个数,如果支持8个指令,那操作码长度就是3
控制位长度:
这个是固定的
寄存器寻址个数*寄存器占用位数:
寄存器占用位数可以通过程序员可以访问的寄存器个数换算得知,如果寄存器可以访问的寄存器个数为32,那么寄存器占用位数就是5(2的5次方=32)
寄存器寻址个数表示机器码中通过寄存器获取操作数或者间接通过寄存器获取操作数的寄存器个数例如
ADD r1,r2 表示通过r1,r2两个寄存器获取操作数,那么寄存器寻址个数就是2
内存直接取址个数*内存占用位数:
内存直接取址个数表示有多少通过内存直接寻址获取操作数,例如


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: