汇编指令机器码总结

合集下载

汇编语言指令功能总结

汇编语言指令功能总结

汇编语言指令功能总结汇编语言是一种低级语言,主要用于编写机器码指令的程序。

在计算机科学领域中,汇编语言是非常重要的,因为它可以直接操作计算机的硬件资源。

本文将对汇编语言中常用的指令功能进行总结。

1. 数据传输指令数据传输指令用于将数据从一个位置传送到另一个位置。

常用的数据传输指令包括MOV(将数据从一个位置复制到另一个位置)、XCHG(交换两个位置的数据)、PUSH(将数据压入堆栈)、POP (将数据从堆栈中弹出)等。

2. 算术运算指令算术运算指令用于执行各种算术运算,例如加法、减法、乘法和除法。

常用的算术运算指令包括ADD(将两个数相加)、SUB(将一个数减去另一个数)、MUL(将两个数相乘)、DIV(将一个数除以另一个数)等。

3. 逻辑运算指令逻辑运算指令用于执行各种逻辑运算,例如与、或、非和异或。

常用的逻辑运算指令包括AND(对两个数执行与运算)、OR(对两个数执行或运算)、NOT(对一个数执行非运算)、XOR(对两个数执行异或运算)等。

4. 控制转移指令控制转移指令用于实现程序的跳转和循环执行。

常用的控制转移指令包括JMP(无条件跳转到指定的地址)、JZ(如果前一个运算结果为零则跳转)、JC(如果前一个运算结果进位则跳转)等。

5. 位操作指令位操作指令用于对数据的位进行操作。

常用的位操作指令包括AND(将两个数的对应位执行与运算)、OR(将两个数的对应位执行或运算)、NOT(取反操作)等。

6. 字符串操作指令字符串操作指令用于对字符串进行操作。

常用的字符串操作指令包括MOVSB(将一个字节从源地址复制到目的地址)、LODSB(将一个字节从源地址加载到AL寄存器)、STOSB(将AL寄存器中的值存储到目的地址)等。

7. 输入输出指令输入输出指令用于与计算机的输入输出设备进行交互。

常用的输入输出指令包括IN(从指定的端口读取数据)、OUT(将数据发送到指定的端口)等。

总结:汇编语言中的指令功能丰富多样,可以实现各种复杂的操作。

汇编的基本常用指令

汇编的基本常用指令

汇编的基本常用指令汇编语言是一种底层的程序设计语言,主要用于编写机器码指令。

以下是一些常用的汇编指令:1. MOV:将数据从一个位置复制到另一个位置。

2. ADD:将两个操作数相加,并将结果存储在目的操作数中。

3. SUB:将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

4. INC:将一个操作数的值增加1。

5. DEC:将一个操作数的值减少1。

6. CMP:比较两个操作数的值,并将结果影响到标志寄存器中。

7. JMP:无条件跳转到指定的代码位置。

8. JZ / JE:当指定的条件成立时,跳转到指定的代码位置(零标志或相等标志)。

9. JNZ / JNE:当指定的条件不成立时,跳转到指定的代码位置(非零标志或不相等标志)。

10. JL / JB:当源操作数小于目的操作数时,跳转到指定的代码位置(小于标志或借位标志)。

11. JG / JA:当源操作数大于目的操作数时,跳转到指定的代码位置(大于标志或进位标志)。

12. CALL:调用一个子程序或函数。

13. RET:返回子程序或函数的调用处。

14. NOP:空操作,用于占位或调整程序代码的位置。

15. HLT:停止运行程序,将CPU置于停机状态。

这里只列举了一些基本的汇编指令,实际上汇编语言有更多更复杂的指令,具体使用哪些指令取决于所使用的汇编语言和目标处理器的指令集架构。

继续列举一些常用的汇编指令:16. AND:将两个操作数进行按位与运算,并将结果存储在目的操作数中。

17. OR:将两个操作数进行按位或运算,并将结果存储在目的操作数中。

18. XOR:将两个操作数进行按位异或运算,并将结果存储在目的操作数中。

19. NOT:对一个操作数的每一位进行取反操作。

20. SHL / SAL:将一个操作数的每一位向左移动指定的位数。

对于无符号数,使用SHL指令;对于带符号数,使用SAL指令。

21. SHR:将一个操作数的每一位向右移动指定的位数,高位空出的位使用0填充。

汇编指令对应的机器码

汇编指令对应的机器码

汇编指令对应的机器码一、引言汇编语言是一种低级语言,它是机器语言的助手。

在计算机科学中,汇编语言是用于编写程序的一种基于文本的语言,它使用助记符来表示每个指令操作码。

每个汇编指令都对应着一段机器码。

本文将从不同的角度详细介绍汇编指令对应的机器码。

二、汇编指令和机器码1. 汇编指令汇编指令是一种基于文本的符号表示法,用来代替二进制代码。

它通过使用助记符来表示操作码和操作数,使得程序员更容易地理解和修改代码。

例如,在x86架构中,mov指令可以用来将一个值从一个寄存器移动到另一个寄存器。

2. 机器码机器码是计算机可以直接执行的二进制代码。

它由0和1组成,并且具有特定的格式和结构。

每个CPU都有自己独特的指令集架构,因此不同CPU上相同的汇编代码可能会产生不同的机器码。

三、x86架构下常见汇编指令对应的机器码1. movmov指令用于将数据从一个位置复制到另一个位置。

在x86架构中,它的机器码通常是8位或16位。

例如,将寄存器AX中的值移动到寄存器BX中,其机器码为:89 C3。

2. addadd指令用于将两个数相加,并将结果存储在一个寄存器或内存位置中。

在x86架构中,它的机器码通常是8位或16位。

例如,将寄存器AX和BX中的值相加,并将结果存储在CX寄存器中,其机器码为:01 C8。

3. subsub指令用于从第一个数中减去第二个数,并将结果存储在一个寄存器或内存位置中。

在x86架构中,它的机器码通常是8位或16位。

例如,从寄存器AX中减去BX的值,并将结果存储在CX寄存器中,其机器码为:29 CB。

4. jmpjmp指令用于无条件跳转到程序的另一部分。

在x86架构中,它的机器码通常是2字节或4字节。

例如,在代码段偏移地址为0x1234处设置一个标签mylabel,并跳转到该标签所代表的地址处,其机器码为:EB 10(其中10表示偏移量)。

5. cmpcmp指令用于比较两个数的大小关系,并根据比较结果设置标志位。

汇编和机器码的对应表

汇编和机器码的对应表

单片机指令功能一览表助记符代码说明MOV A,Rn E8~EF寄存器AMOV A,direct E5 dircet直接字节送AMOV A,@Ri ER~E7间接RAM送AMOV A,#data74 data立即数送AMOV Rn,A F8~FF A送寄存器MOV Rn,dircet A8~AF dircet直接字节送寄存器MOV Rn,#data78~7F data立即数送寄存器MOV dircet,A F5 dircet A送直接字节MOV dircet,Rn88~8F dircet寄存器送直接字节MOV dircet1,dircet285 dircet1 dircet2直接字节送直接字节MOV dircet,@Ro86~87间接RAM送直接字节MOV dircet,#data75 dircet data立即数送直接字节MOV@Ri,A F6~F7A送间接RAMMOV@Ri,#data76~77 data直接字节送间接RAM MOV@Ri,#data76~77 data立即数送间接RAM MOV DPTR,#data1690 data 15~816位常数送数据指针data7~0MOVC A,@A+DPTR93由((A)+(DPTR))寻址的程序存贮器字节选AMOVC A,@A+PC83由((A)+(PC));寻址的程序存贮器字节送AMOVX A,@Ri E2~E3送外部数据(8位地址)送AMOVX A,@DPTR E0送外部数据(16位地址)送AMOVX@Ri,A F2~F3A送外部数据(8位地址)MOVX@DPTR,A F0A送外部数据(16位地址)PUSH dircet C0 dircet直接字节进栈,SP加1POP dircet D0 dircet直接字节退栈,SP减1XCH A,Rn C8~CF交换A和寄存器XCH A,dircet C5 dircet交换A和直接字节XCH A,@Ri C6~C7交换A和间接RAMXCH A,@Ri D6~D7交换A和间接RAM的低位SWAP A C4算术操作(A的二个半字节交换)ADD A,Rn28~2F寄存器加到AADD A,dircet25 dircet直接字节加到AADD A,@Ri26~27间接RAM加到AADD A,#data24data立即数加到AADD A,Rn38~3F寄存器和进位位加到A ADD A,dircet35dircet直接字节和进位位加到A ADD A,@Ri36~37间接字节和进位位加到A ADD A,data34 data立即数和进位位加到A ADD A,Rn98~9F A减去寄存器和进位位ADD A,dircet95 dircet A减去直接字节和进位位ADD A,@Ri36~37间接RAM和进位位加到A ADD A,data34 data立即数和进位位加到A SUBB A,Rn98~9F A减去寄存器和进位位SUBB A,dircet95 dircet A减去直接字节和进位位SUBB A,@Ri96~97A减去间接RAM和进位位SUBB A,#data94 data A减去立即数和进位位INC A04A加1INC Rn08~0F寄存器加1INC dircet05 dircet直接字节加1INC@Ri06~07间接RAM加1DEC A14A减1DEC Rn18~1F寄存器减1DEC dircet15 dircet直接字节减1DEC@Ri16~17间接RAM减1INC DPTR A3数据指针加1MUL AB A4A乘以BDIV AB84A除以BDA A D4A的十进制加法调整逻辑操作ANL A,Rn58~5F寄存器“与”到AANL A,dircet55 dircet直接字节“与”到AANL A,@Ri56~57间接RAm“与”到AANL A,#data54 data立即数“与”到AANL dircet A52 dircet A“与”到直接字节ANL dircet,#data53 dircet data立即数“与”到直接字节ORL A,Rn48~4F寄存器“或”到AORL A,dircet45 dircet直接字节“或”到AORL A,@Ri46~47间接RAM“或”到AORL A,#data44 data立即数“或”到AORL dircet,A42 dircet A“或”到直接字节ORL dircet,#data43 dircet data立即数“或”到直接字节XRL A,Rn68~6F寄存器“异或”到AXRL A,dircet65 dircet直接字节“异或”到AXRL A,@Ri66~67间接RAM“异或”到AXRL A,#data64 data立即数“异或”到AXRL dircet A62 dircet A“异或”到直接字节XRL dircet,#data63 dircet data立即数“异或”到直接字节CLR A E4清零CPL A F4A取反RL A23A左环移RLC A33A通过进位左环移RR A03A右环移RRC A13A通过进位右环移控制程序转移ACALL addr 11*1 addr(a7~a0)绝对子程序调用LCALL addr 1612 addr(15~8)长子程序调用addr(7~0)RET22子程序调用返回RETI addr 1132中断调用返回AJMP addr 11△1 addr(a7~a6)绝对转移LJMP addr 1602addr(15~8)长转移addr(7~0)SJMP rel80 rel短转移,相对转移JMP@A+DPTR73相对于DPTR间接转移JZ rel60 rel A为零转移JNZ rel70 rel A为零转移CJNE A,dircet,rel B5 dircet rel直接字节与A比较,不等则转移CJNE A,#data,rel B4 data rel立即数与A比较,不等则转移CJNE A,Rn,#data,rel B8~BF data rel立即数与寄存器比较,不等则转移CJNE@Ri,#data,rel B6~B7 data rel立即数与间接RAM 比较,不等则转移DJNZ Rn,rel D8~DF rel寄存器减1,不为零则转移DJNZ dircet,rel B5 dircet rel直接字节减1,不为零则转移NOP00空操作*=a10a9a8l△=a10a9a80布尔变量操作CLR C C3清零进位CLR bit C2清零直接位SETB C D3置位进位SETB bit D2置位直接位CPL C B3进位取反CPL bit B2直接位取反ANL C,bit82 dit直接数“与”到进位ANL C,/bit B0直接位的反“与”到进位ORL C,bit72 bit直接位“或”到进位ORL C,/bit A0 bit直接位的反“或”到进位MOV C,bit A2 bit直接位送进位MOV bit,C92 bit进位送直接位JC rel40 rel进位位为1转移JNC rel50 rel进位位为0转移JB bit,rel20 bit rel直接位为1相对转移JNB bit,rel30 bit rel直接位为0相对转移JBC bit,rel10 bit rel直接位为1相对转移,然后清零该位0人|分享到:阅读(213)| 评论(0)| 引用(0) |举报。

ARM汇编指令机器码举例详解

ARM汇编指令机器码举例详解

ARM汇编指令机器码举例详解
ARM7内核采用的是RISC精简指令集,所有的ARM指令都是32bits的,在这32bits里既包含了指令的指令码,也包含了指令需要运算的数据,以MOV 指令为例,通过MOV指令的32bits可以识别出这是一个MOV指令,又可以在这32bits里找到源寄存器和目的寄存器。

我们来看一下MOV指令的机器
码格式:
28~31bits(cond)是条件码,就是表明这条语句里是否有大于、等于、非零等的条件判断,这4bits共有16种状态,分别为:
表 1 汇编语言条件码
指令与条件码可以有多种组合,比如MOV指令可以有MOV、MOVEQ、MOVLT等多种形式。

前面我们说过状态寄存器里有NZCV的状态标志,
当执行一条指令时,芯片就会将这条指令的条件码与状态寄存器中的状态标志做比较,如果状态寄存器中的状态标志满足这条指令的条件码时,则执行这条语句,如果不满足则不执行这条指令。

状态寄存器中的状态标志是受某些指令影响的,因此在使用有条件码的
指令进行判断前,必然会有其它指令配合使用,先修改状态寄存器中的状态标志。

mips机器码汇编对照表

mips机器码汇编对照表

mips机器码汇编对照表助记符说明字节周期代码MOV A,Rn 寄存器送A 1 1 E8--EFMOV A,data 直接字节送A 2 1 E5MOV A,@Ri 间接RAM 送A 1 1 E6--E7MOV A,#data 立接数送A 2 1 74MOV Rn,A A 送寄存器 1 1 F8--FFMOV Rn,data 直接数送寄存器 2 2 A8--AFMOV Rn,#data 立即数送寄存器 2 1 78--7FMOV data,A A 送直接字节 2 1 F5MOV data,Rn 寄存器送直接字节 2 1 88—8FMOV data,data 直接字节送直接字节 3 2 85MOV data,@Ri 间接Rn 送直接字节 2 2 86;87MOV data,#data 立即数送直接字节 3 2 75MOV @Ri,A A 送间接Rn 1 2 F6;F7MOV @Ri,data 直接字节送间接Rn 1 1 A6;A7MOV @Ri,#data 立即数送间接Rn 2 2 76;77MOV DPTR,#data16 16 位常数送数据指针 3 1 90 MOV C,bit 直接位送进位位 2 1 A2MOV bit,C 进位位送直接位 2 2 92MOVC A,@A+DPTR A+DPTR 寻址程序存贮字节送A 3 2 93 MOVC A,@A+PC A+PC 寻址程序存贮字节送A 1 2 83 MOVX A,@Ri 外部数据送A(8 位地址) 1 2 E2;E3 MOVX A,@DPTR 外部数据送A(16 位地址) 1 2 E0 MOVX @Ri,A A 送外部数据(8 位地址) 1 2 F2;F3 MOVX @DPTR,A A 送外部数据(16 位地址) 1 2 F0 PUSH data 直接字节进栈道,SP 加1 2 2 C0POP data 直接字节出栈,SP 减1 2 2 D0XCH A,Rn 寄存器与A 交换 1 1 C8—CFXCH A,data 直接字节与A 交换 2 1 C5XCH A,@Ri 间接Rn 与A 交换 1 1 C6;C7XCHD A,@Ri 间接Rn 与A 低半字节交换 1 1 D6;D72.逻辑运算指令(35条)助记符说明字节周期代码ANL A,Rn 寄存器与到A 1 1 58—5FANL A,data 直接字节与到A 2 1 55ANL A,@Ri 间接RAM与到A 1 1 56;57ANL A,#data 立即数与到A 2 1 54ANL data,A A与到直接字节 2 1 52ANL data,#data 立即数与到直接字节 3 2 53 ANL C,bit 直接位与到进位位 2 2 82ANL C,/bit 直接位的反码与到进位位 2 2 B0 ORL A,Rn 寄存器或到A 1 1 48—4FORL A,data 直接字节或到A 2 1 45ORL A,@Ri 间接RAM或到A 1 1 46;47ORL A,#data 立即数或到A 2 1 44ORL data,A A或到直接字节 2 1 42ORL data,#data 立即数或到直接字节 3 2 43 ORL C,bit 直接位或到进位位 2 2 72ORL C,/bit 直接位的反码或到进位位 2 2 A0 XRL A,Rn 寄存器异或到A 1 1 68—6FXRL A,data 直接字节异或到A 2 1 65XRL A,@Ri 间接RAM异或到A 1 1 66;67XRL A,#data 立即数异或到A 2 1 64XRL data,A A异或到直接字节 2 1 62XRL data,#data 立即数异或到直接字节 3 2 63 SETB C 进位位置1 1 1 D3SETB bit 直接位置1 2 1 D2CLR A A清0 1 1 E4CLR C 进位位清0 1 1 C3CLR bit 直接位清0 2 1 C2CPL A A求反码 1 1 F4CPL C 进位位取反 1 1 B3CPL bit 直接位取反 2 1 B2RL A A循环左移一位 1 1 23RLC A A 带进位左移一位 1 1 33RR A A右移一位 1 1 03RRC A A 带进位右移一位 1 1 13SWAP A A 半字节交换 1 1 C43.算术运算指令(24条)助记符说明字节周期代码ADD A,Rn 寄存器加到A 1 1 28—2FADD A,data 直接字节加到A 2 1 25ADD A,@Ri 间接RAM 加到A 1 1 26;27 ADD A,#data 立即数加到A 2 1 24ADDC A,Rn 寄存器带进位加到A 1 1 38—3F ADDC A,data 直接字节带进位加到A 2 1 35ADDC A,@Ri 间接RAM 带进位加到A 1 1 36;37 ADDC A,#data 立即数带进位加到A 2 1 34SUBB A,Rn 从A 中减去寄存器和进位 1 1 98—9F SUBB A,data 从A 中减去直接字节和进位 2 1 95 SUBB A,@Ri 从A 中减去间接RAM 和进位 1 1 96;97 SUBB A,#data 从A 中减去立即数和进位 2 1 94 INC A A加1 1 1 04INC Rn 寄存器加1 1 1 08—0FINC data 直接字节加1 2 1 05INC @Ri 间接RAM 加1 1 1 06;07INC DPTR 数据指针加1 1 2 A3DEC A A减1 1 1 14DEC Rn 寄存器减1 1 1 18—1FDEC data 直接字节减1 2 1 15DEC @Ri 间接RAM 减1 1 1 16;17MUL AB A乘B 1 4 A4DIV AB A被B除 1 4 84DA A A十进制调整 1 1 D44.转移指令(22条)助记符说明字节周期代码AJMP addr 11 绝对转移 2 2 *1LJMP addr 16 长转移 3 2 02SJMP rel 短转移 2 2 80JMP @A+DPTR 相对于DPTR 间接转移 1 2 73JZ rel 若A=0 则转移 2 2 60JNZ rel 若A≠0 则转移 2 2 70JC rel 若C=1 则转移 2 2 40JNC rel 若C≠1 则转移 2 2 50JB bit,rel 若直接位=1 则转移 3 2 20JNB bit,rel 若直接位=0 则转移 3 2 30JBC bit,rel 若直接位=1 则转移且清除 3 2 10CJNE A,data,rel 直接数与A 比较,不等转移 3 2 B5CJNE A,#data,rel 立即数与A 比较,不等转移 3 2 B4CJNE @Ri,#data,rel 立即数与间接RAM比较,不等转移 3 2 B6;B7CJNE Rn,#data,rel 立即数与寄存器比较不等转移 3 2 B8—BFDJNZ Rn,rel 寄存器减1 不为0 转移 2 2 D8—DFDJNZ data,rel 直接字节减1 不为0 转移 3 2 D5ACALL addr 11 绝对子程序调用 2 2 *1 LCALL addr 16 子程序调用 3 2 12 RET 子程序调用返回 1 2 22RETI 中断程序调用返回 1 2 32NOP 空操作 1 1 00。

Intel8086ASMCode汇编指令的机器码

Intel8086ASMCode汇编指令的机器码

8086指令码汇总表8086指令有汇编语言指令和指令码两种形式,汇编语言指令形式经过汇编程序处理后生成指令码形式。

通过指令码形式可帮助理解汇编语言指令格式的含义和用法。

O、8086指令码格式0B/1B 1B或2B 0B/1B 0B/1B/2B/4B 0B/1B/2B/4B 指令前缀操作码段寻址方式段偏移量参数立即数参数说明:偏移量参数和立即数参数的有无由寻址方式段决定。

一、传送类指令MOV指令REG/MEM→/←REG 100010dw mod reg r/mIMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1MEM→AX 1010000w addr-low addr-highAX→MEM 1010001w addr-low addr-highREG/MEM→段REG 10001110 mod reg r/m 8E段REG→REG/MEM 10001100 mod reg r/m 8CPUSH指令REG/MEM 11111111 mod 110 r/m FFREG 01010reg段REG 000reg110POP指令REG/MEM 10001111 mod 000 r/m 8FREG 01011reg段REG 000reg111XCHG指令REG/MEM←→REG 1000011w mod reg r/mREG←→AX 10010regXLAT指令11010111 D7LEA指令10001101 mod reg r/m 8DLDS指令11000101 mod reg r/m C5LES指令11000100 mod reg r/m C4LAHF指令10011111 9FSAHF指令10011110 9EPUSHF指令10011100 9CPOPF指令10011101 9DIN指令直接寻址1110010w port间接寻址1110110wOUT指令直接寻址1110011w port间接寻址1110111wCBW指令10011000 98CWD指令10011001 99 说明:d—0/1表示REG为源/目的操作数;w—0/1表示操作数类型为BYTE/WORD;mod、r/m—寻址方式,参见教材P56~57;IMME—立即数操作数,字段中用data表示;reg—通用REG用3位编码,段REG只用2位编码(即为0xx)。

汇编语言指令集

汇编语言指令集

mov‎a,b ‎把b的值送‎给a‎ret ‎返回主程序‎n‎o p 无作‎用,英文“‎n o op‎e rati‎o n”的简‎写,意思是‎“do n‎o thin‎g”(机器‎码90)*‎**机器码‎的含义参看‎上面‎(解释:‎u ltra‎e dit打‎开编辑ex‎e文件时你‎看到90,‎等同于汇编‎语句nop‎)‎c all ‎调用子程序‎j‎e或jz‎若相等则‎跳(机器码‎74 或0‎F84) ‎jn‎e或jnz‎若不相等‎则跳(机器‎码75或0‎F85) ‎jm‎p无条件‎跳(机器码‎E B)‎jb ‎若小于则跳‎j‎a若大于‎则跳‎jg 若‎大于则跳‎jg‎e若大于‎等于则跳‎jl‎若小于则‎跳‎j le 若‎小于等于则‎跳‎p op 出‎栈‎p ush ‎压栈三‎.常见修改‎(机器码)‎7‎4=>75‎74=>‎90 74‎=>EB ‎75‎=>74 ‎75=>9‎0 75=‎>EB‎jnz‎->nop‎7‎5->90‎(相应的机‎器码修改)‎j‎n z ->‎jmp ‎75‎-> E‎B(相应的‎机器码修改‎)‎j nz -‎> jz ‎75‎->74 ‎(正常) ‎0F 85‎-> 0‎F 84(‎特殊情况下‎,有时,相‎应的机器码‎修改)‎四.两种不‎同情况的不‎同修改方法‎1‎.修改为j‎m p‎je(j‎n e,jz‎,jnz)‎=>jm‎p相应的机‎器码EB ‎(出错信息‎向上找到的‎第一个跳转‎)jmp 的‎作用是绝对‎跳,无条件‎跳,从而跳‎过下面的出‎错信息‎xxx‎x xxxx‎x xxx ‎出错信息,‎例如:注册‎码不对,s‎o rry,‎未注册版不‎能...,‎"Func‎t ion ‎N ot A‎v aibl‎e in ‎D emo"‎或‎"Com‎m and ‎N ot A‎v aibl‎e" 或‎"Can'‎t sav‎e in ‎S hare‎w are/‎D emo"‎等(我们‎希望把它跳‎过,不让它‎出现)<。

51汇编和机器码对照表

51汇编和机器码对照表
直接位清 0
2
1
C2
CPL A
A求反码
1
1
F4
CPL C
进位位取反
1
1
B3
CPL bit
直接位取反
2
1
B2
RL A
A循环左移一位
1
1
23
RLC A
A 带进位左移一位
1
1
33
RR A
A右移一位
1
1
03
RRC A
A 带进位右移一位
1
1
13
SWAP A
A 半字节交换
1
1
C4
3.算术运算指令(24条)
ADD A,Rn
16;17
MUL AB
A乘B
1
4
A4
DIV AB
A被B除
1
4
84
DA A
A十进制调整
1
1
D4
4.转移指令(22条)
AJMP addr 11
绝对转移
2
2
*1
LJMP addr 16
长转移
3
2
02
SJMP rel
短转移
2
2
80
JMP @A+DPTR
相对于DPTR 间接转移
1
2
73
JZ rel
若A=0 则转移
2
2
D8—DF
DJNZ data,rel
直接字节减1 不为 0 转移
3
2
D5
ACALL addr 11
绝对子程序调用
2
2
*1
LCALL addr 16
子程序调用

CPU指令、机器码、程序和汇编语言

CPU指令、机器码、程序和汇编语言

CPU指令、机器码、程序和汇编语⾔⼀、指令指令就是指挥机器⼯作的指⽰和命令。

控制器靠指令指挥机器⼯作,⼈们⽤指令表达⾃⼰的意图,并交给控制器执⾏。

⼀台计算机所能执⾏的各种不同指令的全体,叫做计算机的指令系统或指令集,每⼀台计算机均有⾃⼰的特定的指令系统,其指令内容和格式有所不同。

⼀条指令具有实际的意义,CPU会完成⼀次操作,达到⼀定⽬的。

⼈类能够理解其意义。

⼆、机器码机器码说⽩了,就是⽤⼀种机器也就是CPU认识和理解的有⼀定结构的语⾔来表达指令,某条指令⽤这种语⾔表达成⼀条语句,就是这条指令的机器码。

我们知道,现在的CPU他只能理解⼆进制,那么机器码就是某条指令在某个CPU上⼀组有意义的⼆进制代码。

为了指出数据来源、操作结果去向及所要执⾏的操作,指令必须包含下列信息:操作码⽤来表⽰该指令要完成的操作,如+-*/等操作数或操作数地址⽤来指出操作对象的地址(内存地址或寄存器)或直接给出操作数操作结果存储地址下条指令地址如何区分指令和数据:我们可以通过不同的时间段来区分指令和数据,即在取指令阶段(或取指微程序)取出的为指令,在执⾏指令阶段(或相应微程序)取出的即为数据。

如果通过地址来源区分,由PC提供存储单元地址的取出的是指令,由指令地址码部分提供存储单元地址的取出的是操作数。

三、程序计算机程序(英语:Computer program),也称为(英语:software),简称程序。

是指⼀组指⽰计算机或其他具有信息处理能⼒装置执⾏动作或做出判断的指令。

也就是说,程序是为了实现某个⽬的或功能,按照⼀定逻辑⼈为编写的在特定⽬标机上运⾏的指令和数据的集合。

四、汇编语⾔为了编写计算机能运⾏的程序,早期的程序设计均使⽤机器语⾔。

程序员们将⽤0, 1数字编成的程序代码打在纸带或卡⽚上,1打孔,0不打孔,再将程序通过纸带机或卡⽚机输⼊计算机,进⾏运算。

这样的机器语⾔由纯粹的0和1构成,⼗分复杂,不⽅便阅读和修改,也容易产⽣错误。

汇编指令机器码对应列表

汇编指令机器码对应列表
BD MOV bp,immed16
BE MOV si,immed16
BF MOV di,immed16
C0 Table1 reg8
C1 Table1 reg8, reg16
C2 RET immed16
C3 RET
C4 LES reg16/mem16,mem16
C5 LDS reg16/mem16,mem16
6F OUTSW
70 JO immed8
71 JNO immed8
72 JB immed8
73
JNB immed8
74 JZ immed8
75 JNZ immed8
76 JBE immed8
77 JA immed8
78 JS immed8
79 JNS immed8
7A JP immed8
7B JNP immed8
C6 MOV reg8/mem8,immed8
C7 MOV reg16/mem16,immed16
C8 ENTER immed16, immed8
C9 LEAVE
CA RET immed16
CB RET
CC INT 3
CD INT immed8
CE INTO
CF IRET
D0 Table1 reg8
27 DAA
28 SUB reg8/mem8,reg8
29 SUB reg16/mem16,reg16
2A SUB reg8,reg8/mem8
2B SUB reg16,reg16/mem16
2C SUB al,immed8
2D SUB ax,immed16
2E Segment override
2F DAS

arm 32 常见汇编指令 对应的机器码

arm 32 常见汇编指令 对应的机器码

arm 32 常见汇编指令对应的机器码
ARM 32位汇编指令是一种用于ARM架构的低级编程语言,它将人类可读的汇编指令转换为机器码,从而实现对计算机硬件的直接控制。

以下是几个常见的ARM 32位汇编指令及其对应的机器码:
1. MOV指令:将一个数据从一个位置复制到另一个位置。

机器码:0xMOV Rd, Rn
2. ADD指令:将两个数据相加并将结果存储在目标寄存器中。

机器码:0xADD Rd, Rn, Rm
3. SUB指令:将两个数据相减并将结果存储在目标寄存器中。

机器码:0xSUB Rd, Rn, Rm
4. CMP指令:比较两个数据的大小,并根据比较结果设置条件代码。

机器码:0xCMP Rn, Rm
5. LDR指令:从内存中加载数据到寄存器中。

机器码:0xLDR Rd, [Rn, #offset]
6. STR指令:将寄存器中的数据存储到内存中。

机器码:0xSTR Rd, [Rn, #offset]
7. B指令:无条件跳转到指定的地址。

机器码:0xB label
8. BEQ指令:如果上一次比较结果为相等,则跳转到指定的地址。

机器码:0xBEQ label
以上是ARM 32位汇编指令的一些常见例子,每个指令都有对应的机器码。

通过编写汇编程序,程序员可以直接对计算机硬件进行控制,实现各种功能。

虽然汇编语言比高级语言更难以理解和编写,但它提供了更高的灵活性和效率,特别适合对性能要求较高的应用。

汇编语言知识大全参考模板

汇编语言知识大全参考模板

第一章基础知识:一.机器码:1.计算机只认识0,1两种状态。

而机器码只能由0,1组成。

故机器码相当难认,故产生了汇编语言。

2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。

每一总CPU都有自己的指令集;注意学习的侧重点。

二.存储器:1.存储单元中数据和指令没任何差别。

2.存储单元:Eg:128个储存单元(0~127)128byte。

//1字节=1B=1byte=8bit条件反射:1存储单元=1B=8个2进制;以后的ax,cs之类的占两个存储单元,ah之类的占一个3.CPU对存储器的读写:地址信息+控制信息+数据信息三.总线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。

//因为一根总线只能表示0,1,N 根的话可以表示2^N2.数据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。

3.控制总线:cpu对元器件的控制能力。

越多控制力越强。

四.内存地址空间:1.由地址总线决定大小。

2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总线连接起来。

3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的RAMCPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。

自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。

所以一些地址的功能是对应一些芯片的。

第二章寄存器引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。

而寄存器是可以用来指令读写的部件。

8086有14个寄存器(都是16位,2个存储空间)。

一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位注意1.范围:16位的2^16-1,8位的2^8-12.进行数据传送或运算时要注意位数对应,否则会报错二.字:1. 1个字==2个字节。

ARM汇编指令集与机器码

ARM汇编指令集与机器码

ARM汇编指令集与机器码0x00 本⽂⽬标本⽂内容从《ARM Architecture Reference Manual》中截取翻译,可以看作是⼀个重点笔记集。

仅记录博主认为有意思的部分,并加⼊⼀些个⼈理解。

如果发现有不对的地⽅欢迎留⾔指正。

现代的智能⼿机是能进⾏ARM汇编级别交互的最便捷的设备,因此实例分析的内容基于博主的⼩⽶Note+IDA,和某个正在被调试的安卓程序。

该程序加载的SO⽂件使⽤armeabi架构。

0x01 ARM模型与概念ARM⽀持三种数据类型的读写:Byte(8 bits),Halfword(16 bits),Word(32 bits)。

所有内存指令相关的读写操作都会基于这三种数据类型。

ARM使⽤⼩端存储,这意味着例如指令E5 9F 00 90在内存中会反序存储为:0x00a0 90 00 9F E5在读取指令后,会被还原为正序E59F0090。

ARM⼀共⽀持7种处理器模式,程序在编译后所运⾏的绝⼤部分时间⽚中,例如执⾏了⼀段MD5加密函数,都处于usr模式。

寄存器⽰例图,某个程序正在处于调试暂停中。

ARM处理器⼀共有37个之多的寄存器。

在所有的ARM状态模式中,有15个可见寄存器(R0~R14),和1~2个状态寄存器随时可编程交互。

其余没有提到的寄存器,⽤于处理异常、中断等核⼼指令,外部不可见也不能⾃主控制读写。

R0~R7作为不保留寄存器,可以⾃由编程指定其含义。

例如R0~R3最常⽤于参数传递,返回值等保存。

R8~R14是保留寄存器,有⾃⼰的特殊含义,在寄存器实例图中可以看到多半保存和地址相关的值,⼜或者指向了SP地址或LR地址。

通常R13就是SP(Stack Pointer)寄存器,该值指向当前汇编代码段可以使⽤的栈起始地址。

R14作为LR(Link Register)寄存器,保存当前汇编代码段执⾏完毕后,需要回溯到的汇编代码地址。

PC程序计数器是⼀个特殊的寄存器,指向当前正在执⾏的代码地址。

汇编跳转指令小结

汇编跳转指令小结

汇编跳转指令小结一、状态寄存器PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:1 5 1413121119 8 7 6 5 4 3 2 1 0OFDFIFTFSFZFAFPF CF条件码:①OF(Overflow Flag)溢出标志。

溢出时为1,否则置0。

②SF(Sign Flag)符号标志。

结果为负时置1,否则置0.③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.④CF(Carry Flag)进位标志,进位时置1,否则置0.⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。

有进位时1,否则置0.⑥PF(Parity Flag)奇偶标志。

结果操作数中1的个数为偶数时置1,否则置0.控制标志位:⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。

⑧IF(Interrupt Flag)中断标志。

⑨TF(Trap Flag)陷井标志。

二、直接标志转移指令格式机器码测试条件如...则转移指令格式机器码测试条件如...则转移JC 72 C=1 有进位JNS 79 S=0 正号JNC 73 C=0 无进位JO 70 O=1 有溢出JZ/JE74 Z=1 零/等于JNO 71 O=0 无溢出JNZ/JNE 75 Z=0 不为零/不等于JP/JPE 7A P=1奇偶位为偶JS 78 S=1 负号JNP/IPO 7B P=0奇偶位为奇三、间接标志转移指令格式机器码测试格式如...则转移JA/JNBE(比较无符号数) 77 C或Z=0> 高于/不低于或等于JAE/JNB(比较无符号数) 73 C=0>=高于或等于/不低于JB/JNAE(比较无符号数) 72 C=1< 低于/不高于或等于JBE/JNA(比较无76 C或Z=1 <=低于或等于/符号数) 不高于JG/JNLE(比较带符号数) 7F (S异或O)或Z=0> 大于/不小于或等于JGE/JNL(比较带符号数) 7D S异或O=0>=大于或等于/不小于JL/JNGE(比较带符号数) 7C S异或O=1< 小于/不大于或等于JLE/JNG(比较带符号数) 7E (S异或O)或Z=1<=小于或等于/不大于四、无条件转移指令JMP指令格式执行操作机器码说明段内直接短转移Jmp short (IP)←(IP)+8位位移量EB转移范围-128到+127字节段内直接近转移Jmp near (IP)←(IP)+16位位移量E9 转移到段内的任一位置段内间接转移Jmp word (IP)←(有效地址EA)FF段间直接(远)转移Jmp far(IP)←(偏移地址)(CS)←(段地址)EA段间间接转移(IP)←(EA)Jmp dword (CS)←(EA+2)。

汇编指令大全汇总

汇编指令大全汇总

一、数据传输指令1. 通用数据传送指令.MOV 传送字或字节.MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.POP把字弹出堆栈.PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP交换32位寄存器里字节的顺序XCHG交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD先交换再累加.( 结果在第一个操作数里) XLAT字节查表转换.──BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, )OUT I/O端口输出. ( 语法: OUT ,累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535.3. 目的地址传送指令.LEA装入有效地址.例: LEA DX,string;把偏移地址存到DX.LDS传送目标指针,把指针内容装入DS.例: LDS SI,string;把段地址:偏移地址存到DS:SI.LES传送目标指针,把指针内容装入ES.例: LES DI,string;把段地址:偏移地址存到ES:DI.LFS传送目标指针,把指针内容装入FS.例: LFS DI,string;把段地址:偏移地址存到FS:DI.LGS传送目标指针,把指针内容装入GS.例: LGS DI,string;把段地址:偏移地址存到GS:DI.LSS传送目标指针,把指针内容装入SS.例: LSS DI,string;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF标志寄存器传送,把标志装入AH.SAHF标志寄存器传送,把AH内容装入标志寄存器. PUSHF标志入栈. POPF标志出栈. PUSHD32位标志入栈. POPD32位标志出栈.二、算术运算指令───────────────────────────────────────ADD加法.ADC带进位加法.INC加1.AAA加法的ASCII码调整. DAA加法的十进制调整. SUB减法.SBB带借位减法.DEC减1. NEC求反(以0 减之).CMP比较.(两操作数作减法,仅修改标志位,不回送结果). AAS减法的ASCII码调整.DAS减法的十进制调整.MUL无符号乘法.IMUL整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算).AAM乘法的ASCII码调整.DIV无符号除法.IDIV整数除法.以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或商回送AX,余数回送DX, (字运算).AAD除法的ASCII码调整. CBW字节转换为字. (把AL中字节的符号扩展到AH 中去)CWD字转换为双字. (把AX中的字的符号扩展到DX 中去)CWDE字转换为双字. (把AX中的字符号扩展到EAX 中去)CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND与运算.OR或运算.XOR异或运算.NOT取反.TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL逻辑左移.SAL算术左移.(=SHL)SHR逻辑右移.SAR算术右移.(=SHR) ROL循环左移.ROR循环右移.RCL通过进位的循环左移.RCR通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码.如SHL AX,1. 移位>1次时, 则由寄存器CL给出移位次数. 如MOV CL,04SHL AX,CL四、串指令───────────────────────────────────────DS:SI源串段寄存器:源串变址. ES:DI目标串段寄存器:目标串变址. CX重复次数计数器.AL/AX扫描值. D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS串传送.( MOVSB传送字符. MOVSW传送字.MOVSD传送双字. )CMPS串比较.( CMPSB比较字符. CMPSW比较字. )SCAS串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS装入串.把源串中的元素(字或字节)逐一装入AL或AX中. ( LODSB传送字符.LODSW传送字.LODSD传送双字. )STOS保存串.是LODS的逆过程.REP当CX/ECX<>0时重复.REPE/REPZ当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ当ZF=0或比较结果不相等且CX/ECX<>0时重复.REPC当CF=1且CX/ECX<>0时重复. REPNC当CF=0且CX/ECX<>0时重复.五、程序转移指令───────────────────────────────────────1>无条件转移指令(长转移)JMP无条件转移指令CALL过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内) ( 当且仅当(SF XOR OF)=1时,OP1JA/JNBE不小于或不等于时转移.JAE/JNB大于或等于转移.JB/JNAE小于转移.JBE/JNA小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ等于转移.JNE/JNZ不等于时转移.JC有进位时转移.JNC无进位时转移.JNO不溢出时转移. JNP/JPO奇偶性为奇数时转移.JNS符号位为"0" 时转移.JO溢出转移.JP/JPE奇偶性为偶数时转移.JS符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环. LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT中断指令INTO溢出中断IRET中断返回5>处理器控制指令HLT处理器暂停, 直到出现中断或复位信号才继续.WAIT当芯片引线TEST为高电平时使CPU进入等待状态.ESC转换到外处理器.LOCK封锁总线.NOP空操作.STC置进位标志位.CLC清进位标志位. CMC进位标志取反. STD置方向标志位. CLD清方向标志位. STI置中断允许位. CLI清中断允许位.六、伪指令───────────────────────────────────────DW定义字(2字节). PROC定义过程. ENDP过程结束. SEGMENT定义段. ASSUME建立段寄存器寻址. ENDS段结束.END程序结束.第一、数据寄存器(Data Register)EAX 累加寄存器(accumulator), 常用于运算;用来存放操作数,所有的I/O指令用之与外界设备传送数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编指令机器码总结与验证摘要:本文介绍了汇编指令机器码的含义与作用,并讨论了指令的组成结构即操作码与地址码。

然后全面总结了机器码中的单字节操作码,并利用Debug工具进行了详细的验证。

关键词:指令;机器码一、机器码概述[1]机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。

这种指令集就称为机器码,它是电脑的CPU可直接解读的数据。

一条指令是机器语言的一个语句,是一组有意义的二进制代码。

计算机通过执行指令来处理各种数据。

为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息:a) 操作码b) 操作数的地址c) 操作结果的存储地址d) 下条指令的地址一条指令实际上包括两种信息即操作码和地址码。

操作码用来表示该指令所要完成的操作(如加、减、乘、除、数据传送等),其长度取决于指令系统中的指令条数。

地址码用来描述该指令的操作对象,它或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址(即寄存器名)。

二、机器码详解[2]由上文已知,一条指令一般由操作码和地址码组成。

其中,操作码是指明CPU对内存或寄存器中的数据进行什么样的操作,地址码给出这些数据对象。

下面我们就将指令分为两部分进行研究。

1.操作码操作码一般占用1个字节(8位)或2个字节(16位)。

其中最低比特(记作W)在很多指令中表示目标操作数的位宽,W=0表示字节长(8位)操作数,W=1表示双字节长(16位)操作数。

例如,操作码00000000B(W=0)表示“ADD 8位寄存器,8位寄存器”,而00000001B(W=1)表示“ADD 16位寄存器,16位寄存器”。

2.地址码地址码一般占用1个字节,其中的8个比特位可分为三组,形式一般为“oommmrrr”。

这些分组大致可分为以下四个类型:1) “oo”——表示指令的地址偏移量类型a) 00:如果mmm=110,那么指令后紧跟一个地址偏移量;否则未使用地址偏移量b) 01:指令后紧跟一个8比特无符号地址偏移量c) 10:指令后紧跟一个16比特无符号地址偏移量d) 11:此时mmm表示一个寄存器而不是地址2) “mmm”——表示存储器操作数地址a) 000 : DS:[BX+SI]b) 001 : DS:[BX+DI]c) 010 : SS:[BP+SI]d) 011 : SS:[BP+DI]e) 100 : DS:[SI]f) 101 : DS:[DI]g) 110 : SS:[BP]h) 111 : DS:[BX]3) “rrr”——表示通用寄存器(下列分别表示当W=0;W=1;32位)a) 000:AL:AX:EAXb) 001:CL:CX:ECXc) 010:DL:DX:EDXd) 011:BL:BX:EBXe) 100:AH:SP:ESPf) 101:CH:BP:EBPg) 110:DH:SI:ESIh) 111:BH:DI:EDI4) “sss”——表示段寄存器a) 000 : ESb) 001 : CSc) 010 : SSd) 011 : DSe) 100 : FS (386+)f) 101 : GS (386+)三、操作码总结与验证[3]从上一节可以看出,一条指令的操作码变化有限(8比特操作码只有不超过256个)而且相对地址码更为重要,因此这一节我们重点讨论单字节指令的操作码。

为描述指令类型,我们约定了不同类型寄存器、内存和立即数等操作数的符号,见表1。

表1 操作数符号符号类型说明符号类型说明为了方便验证操作码,我们将在验证时填充地址码为0x00。

下面,我们就按照单字节操作码的比特顺序进行总结与验证。

首先,我们列出机器码为0x0n的16个操作码,见表2。

表2 0x0n机器码及对应指令09 OR reg16/mem16,reg160B OR reg16,reg16/mem16利用Debug工具进行验证,依次输入16条指令的16进制代码(地址码均为0x00),然后使用“-u”查看指令,如图1。

图1 0x0n机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

接下来,我们将重复以16条指令为单位,依次列出指令机器码,并进行验证。

表3 0x1n机器码及对应指令13 ADC reg16,reg16/mem1619 SBB reg16/mem16,reg161B SBB reg16,reg16/mem161F POP DS验证结果见图2。

图2 0x1n机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表4 0x2n机器码及对应指令23 AND reg16,reg16/mem1629 SUB reg16/mem16,reg162B SUB reg16,reg16/mem162F DAS验证结果见图3。

图3 0x2n机器码验证从图中可以看出,我们验证的结果与理论值完全一致,并且指令0x26和0x2E分别是重载段寄存器DS和CS。

表5 0x3n机器码及对应指令33 XOR reg16,reg16/mem1639 CMP reg16/mem16,reg163B CMP reg16,reg16/mem163F AAS验证结果见图4。

图4 0x3n机器码验证从图中可以看出,我们验证的结果与理论值完全一致,并且指令0x36和0x3E分别是重载段寄存器SS和DS。

表6 0x4n机器码及对应指令43 INC BX49 DEC CX4B DEC BX4F DEC DI 验证结果见图5。

图5 0x4n机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表7 0x5n机器码及对应指令53 PUSH BX59 POP CX5B POP BX5F POP DI 验证结果见图6。

图6 0x5n机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表8 0x6n机器码及对应指令63 Not used69 IMUL reg16/mem16,imm166B IMUL reg8/mem8,imm86F OUTSW验证结果见图7。

图7 0x6n机器码验证从图中可以看出,这一组指令在80x86架构CPU中都不存在,所以CPU自动将其翻译为数据。

表9 0x7n机器码及对应指令73 JNB imm879 JNS imm87B JNP imm87F JG imm8 验证结果见图8。

图8 0x7n机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表10 0x8n机器码及对应指令83 Table2 reg8, reg1689 MOV reg16/mem16,reg168B MOV reg16,reg16/mem168F POP reg16/mem16验证结果见图9。

图9 0x8n机器码验证从图中可以看出,我们验证的结果除了80x86架构CPU不存在的0x80-0x83指令之外,其余指令与理论值完全一致。

表11 0x9n机器码及对应指令93 XCHG AX,BX99 CWD9B WAIT9F LAHF验证结果见图10。

图10 0x9n机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表12 0xAn机器码及对应指令A3 MOV [mem16],AXA9 TEST AX,[mem16]AB STOSWAF SCASW验证结果见图11。

图11 0xAn机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表13 0xBn机器码及对应指令B3 MOV BL,imm8B9 MOV CX,imm16BB MOV BX,imm16BF MOV DI,imm16 验证结果见图12。

图12 0xBn机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表14 0xCn机器码及对应指令C3 RET NEARC9 LEAVECB RET FARCF IRET验证结果见图13。

图13 0xCn机器码验证从图中可以看出,我们验证的结果除了80x86架构CPU不存在的0xC0、0xC1、0xC8和0xC9指令之外,其余指令与理论值完全一致。

表15 0xDn机器码及对应指令D3 Table1 reg16D9 ESC imm8DB ESC imm8DF ESC imm8验证结果见图14。

图14 0xDn机器码验证从图中可以看出,指令0xD0、0xD1、0xD2和0xD3在80x86架构CPU中不存在,指令0xD8-0xDF 在80x86架构CPU中代表了不同的指令。

表16 0xEn机器码及对应指令E3 JCXZ imm8E9 JMP imm16EB JMP imm8EF OUT AX,DX 验证结果见图15。

图15 0xEn机器码验证从图中可以看出,我们验证的结果与理论值完全一致。

表17 0xFn机器码及对应指令F3 REPF9 STCFB STIFF Table4 reg16验证结果见图16。

图16 0xFn机器码验证从图中可以看出,我们验证的结果除了80x86架构CPU中不一样的0xF6、0xF7、0xFE和0xFF 指令之外,其余指令与理论值完全一致。

参考文献:[1] 机器语言. [2] 80x86 Opcodes. /ece390/resources/opcodes.html[3] 汇编指令机器码对应表. 。

相关文档
最新文档