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

机器码封了怎么解决图文教学_机器码最新解决方法,第1张

机器码封了怎么解决图文教学_机器码最新解决方法 计算机是通过执行指令来处理各种数据的,因此,一条指令即要指出如何处理数据,同时还应指出数据的来源、 *** 作结果的去向。


一般来说指令是由两部分组成,即 *** 作码和 *** 作数。


*** 作码给出该指令应完成何种 *** 作。


*** 作数用来描述该指令的 *** 作对象。


在指令中 *** 作码是不可缺少的,但 *** 作数可以没有,也可以有一个 *** 作数或两个 *** 作数。


*** 作码表示计算机执行什么 *** 作,由一组二进制代码表示,在汇编语言中用助记符代表。


*** 作数可能指明了参与 *** 作的数的本身,或规定了 *** 作数的地址。


如何寻找 *** 作数,这就是指令的寻址方式,也是由指令编码格式指出。


根据 *** 作数的个数,指令格式可分为以下几种:I 无 *** 作数控制类指令,比如“HLT”暂停指令。


II 单 *** 作数只给出一个 *** 作数地址。


该 *** 作数可在寄存器或存储器中,或指令中直接给出立即数。


比如“INC CX”III 双 *** 作数指令指令中有两个 *** 作数,其中一个为目的 *** 作数,另一个为源 *** 作数。


一个 *** 作数在寄存器中,另一个在寄存器或存储器中,或指令中直接给出立即数。


不允许两个都在存储器中。


IV 三 *** 作数指令ADC AX, BX ;该指令完成 *** 作数AX、BX和CF位相加。


由此可见, *** 作数可分为源 *** 作数和目的 *** 作数。


源 *** 作数:只能读取的 *** 作数。


目的 *** 作数:即可读取又可写入(存放 *** 作结果)的 *** 作数。


*** 作数还可分为数据 *** 作数和地址 *** 作数。


指令的长度主要取决于指令 *** 作码的长度、 *** 作数的长度和 *** 作数的个数。


通常指令字长位数越多,所能表示的 *** 作信息也就越多,指令功能就越丰富。


但位数多则指令所占的存储空间就多,读取指令的时间就增加。


字长(一般是指CPU的机器字长)是指CUP—次能够处理的二进制数位数,它都是字节长度(8位二进制数)的1、2、4或8倍,也就是8、16、32或64位。


因此,指令字长也是字节的简单倍数,如一字节指令,二字节指令、三字节指令……。


一条指令中的信息按其含义分成若干个信息段,每一信息段占一个字节或多个字节,且按一定的顺序排列,这便于CPU解释执行。


如8086/8088CPU的指令系统,它釆用1-6个指令字节的变字长,它包括:第1字节: *** 作码;第2字节:寻址方式;第3-6字节: *** 作数;三部分组成。


指令格式如下:其中,第一个字节:高6位是 *** 作码。


W位说明传递数据的类型是字(W=1)还是字节(W=0)(Word);D位标明数据传送的方向:D=0,数据从寄存器传出; D=1,数据传至寄存器;(Destination)。


其中,第二个字节:REG字段:寄存器号,用3位编码寻址8种不同的寄存器,再根据第一字节中W位,选择8位或16位寄存器。


如下图所示。


(对使用段寄存器的指令,REG字段占2位)8086指令的二进制编码非常多,很难以一张表实现指令与机器语言的对照。


为每种基本指令类型给出一个编码格式,对照格式填上不同的数字表示不同的寻址方式、数据类型,即可求得每条指令的机器码。


8086指令系统采用变长指令,指令的长度可由1~6字节组成。


机器指令的长度:变长,由 *** 作码+寻址方式+ *** 作数所需字节数来决定;汇编指令的长度:汇编指令对应的机器指令的长度。


指令执行的过程就要考虑到指令长度:① CPU从CS:IP所组成的地址中读取指令,将这个指令存放到指令缓存器中;② IP = IP + 所读指令的字节数;③ 执行指令缓存器中的内容,回到步骤1,重复这个过程。


1 寄存器间传送指令的编码MOV SP,BX该指令的功能是将BX寄存器的内容送到SP寄存器中。


MOV指令从10001000(ox88)开始编码。


该指令的编码格式为:100010DW 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 数据.第1、2字节可通过查表得到;第3字节存放16位位移量的低字节34H; 第4字节存放高字节12H 。


所以该指令的4字节编码为8A 8F 34 12H 。


3 立即数寻址指令的编码MOV [BX+2100H], 0FA50H指令的功能是将16位立即数送到指定有效地址的字存储单元中;其中低字节50H送列[BX+2100H]单元,高字节FAH送到(BX+2101H)单元。


该指令的编码格式为:110011W MOD 000 R/M 数据 数据(若W=1).指令中不但有16位立即数,还有16位位移量;所以,该指令的6字节编码为C7 87 00 21 50 FA H。


4 包含段寄存器的指令的编码MOV DS, AX指令的功能是将AX寄存器的内容传送到数据段寄存器DS。


该指令的编码格式为:10001110 MOD 0 REG R/M .段寄存器DS的编码为11,即REG字段为11;另一个 *** 作数也是寄存器,所以MOD=11,而R/M字段应填上AX的三位代码000 .所以,该指令的2字节编码为8E D8H。


5 段超越前缀指令的编码MOV [BX], DL指令的功能是将DL寄存器的内容传送到有效地址为(BX)的字节存储单元。


该指令(不带段超越前缀)的编码格式为:100010DW MOD 0 REG R/M .数据从寄存器传出,则D=0;传递数据为字节,则W=0;进而,REG=010;另一个 *** 作数是存储器,所以MOD=00,而R/M=111 .该指令的编码是在不带段超越前缀的指令代码为88 17H.在指令代码前加一个8位的段超越的缀代码,代码的格式为001××110,其中××位表明段超越寄存器。


由于段寄存器CS的代码为01,所以指令的第1个字节的编码为00101110,即 2EH.所以,该指令的机器码为2E 88 17H。


6 重点汇编指令7 主要寻址方式8 机器码汇编指令与ASCII再来一段机器码、汇编代码、C语言代码对照:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/631204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-16
下一篇 2022-04-16

发表评论

登录后才能评论

评论列表(0条)

保存