机器码最新解决方法 机器码封了怎么解决图文教学

计算机通过执行指令来处理各种数据 。所以一个指令要指出如何处理数据,同时也要指出数据的来源和运算结果的去向 。一般来说,指令由两部分组成,即操作码和操作数 。
操作码给出了指令应该做什么 。
操作数用于描述指令的操作数 。
操作码在一条指令中是必不可少的,但也可能没有操作数,一个操作数或两个操作数 。
操作码表示计算机执行什么操作,用一组二进制代码表示,在汇编语言中用助记符表示 。
操作数可以表示参与运算的数字本身,或者指定操作数的地址 。如何找到操作数,这是指令的寻址方式,指令编码格式也指出了这一点 。
根据操作数的数量,指令格式可以分为以下几种类型:
没有操作数
控制类指令,如“HLT”暂停指令 。
II单操作数
只给出了一个操作数地址 。操作数可以直接在寄存器、存储器或指令中给出 。例如“CX公司”
双操作数指令
指令中有两个操作数,一个是目标操作数,另一个是源操作数 。一个操作数在寄存器中,另一个在寄存器或内存中,或者直接在指令中给出立即数 。两者在内存中都是不允许的 。
四三操作数指令
ADC AX,BX;此指令完成操作数的AX、BX和CF位的相加 。
因此,操作数可以分为源操作数和目的操作数 。
操作数:只能读取的操作数 。
操作数:可读写的操作数(存储运算结果) 。
操作数也可以分为数据操作数和地址操作数 。
指令的长度主要取决于指令操作码的长度、操作数的长度和操作数的个数 。通常指令字长度中的位数越多,它所能表达的运算信息就越多,指令功能就越丰富 。但如果位数较大,指令占用的内存空也会较大,读取指令的时间也会增加 。
字长(一般指CPU的机器字长)是指CUP—-times能处理的二进制位数,是字节长(8位二进制位数)的1、2、4或8倍,即8、16、32或64位 。所以指令字长度也是字节的简单倍数,比如一字节指令,二字节指令,三字节指令 。
一条指令中的信息按其含义分成若干信息段,每个信息段占用一个字节或多个字节,并按一定顺序排列,便于CPU解释和执行 。例如8086/8088CPU的指令系统,它使用1-6个指令字节的可变字长,包括:
第1字节:操作码;
字节2:寻址模式;
字节3-6:操作数;
它由三部分组成 。
指令格式如下:
其中,第一个字节:
的高六位是操作码 。
W位表示传输数据的类型是字(w = 1)还是字节(w = 0)(字);
D位表示数据传输的方向:D = 0,数据从寄存器传输; d = 1,数据传输到寄存器;(目的地).
其中,第二个字节:
REG域:寄存器号,用3位代码寻址8个不同的寄存器,然后根据第一个字节的W位选择8位或16位寄存器 。如下图所示 。(对于使用段寄存器的指令,REG字段占用2位)
886指令的二进制代码非常多,很难用一张表来比较指令和机器语言 。
给每个基本指令类型一个编码格式,根据格式填入不同的数字表示不同的寻址方式和数据类型,这样就可以得到每个指令的机器码 。
886指令系统采用变长指令,长度可由1 ~ 6个字节组成 。
机器指令的长度:可变长度,由操作码+寻址方式+操作数所需的字节数决定;
汇编指令长度:汇编指令对应的机器指令长度 。
指令执行过程应考虑指令长度:
① CPU从CS: IP组成的地址中读取指令,并将指令存储在指令缓冲区中;
②IP = IP+读指令的字节数;
③执行指令缓冲区中的内容,返回步骤1,重复此过程 。
1寄存器间传输指令的代码
BX MOV SP
该指令的功能是将BX寄存器的内容发送到SP寄存器 。
MOV指令从10001000(ox88)开始编码 。
该指令的编码格式为:100010 dw mod reg r/m .
W = 1:表示发送字数据;
REG字段:如果选择SP,则REG字段代码为100;
D = 1:表示数据传输至所选寄存器(SP);
Mod = 11:因为另一个操作数BX也是一个寄存器 。
根据w = 1和寄存器名称BX,从上图中可以找到R/M = 011 。
因此,该指令的2字节代码是8B E3H 。
2寄存器和存储器之间传输指令的编码
MOV CL,[BX+l234H]
该指令的作用是将有效地址为(BX+1234H)的存储单元中的数据字节转移到CL 。
指令的编码格式为:100010DW MOD REG R/M data 。
第1和第2字节可以通过查表得到;第3个字节存储低位字节34H16位位移的;第4个字节存储12H的高位字节 。
因此,该指令的4字节代码是8A 8F 34 12H 。


推荐阅读