汇编和机器码的对应表

合集下载

北京大学计算机系统导论示例

北京大学计算机系统导论示例
ISA 汇编码与机器码的形式 例: rmmovl rA, D(rB) --------- icode:ifun rA rB D 要求: 搞清楚指令的功能(具体执行的流程),用到的符号,它们表示的意义,书 写的顺序,在机器码中所占的字节大小 特别注意转移类指令和访存类指令,尤其是二者都有的与栈操作相关指令 其他细节: 跳转地址、偏移量等常数在机器码中的表示:小端法 mov 类指令对操作数的限制:关于存储器和立即数 机器表示和汇编表示寄存器顺序可能不同:如 rmmovl 和 mrmovl 哪些指令修改了哪些条件码
总结 RISC 和 CISC 区别 // 了解 Y86 和 I法 HCL 逻辑门、MUX、ALU、D 触发器、Register file、Memory block、
注意: 逻辑门连接时是否会引起信号矛盾 具体的结构单元:每根线的位置,表示的数据位数(1,5, 32 etc),其上信 号含义,信号传递方向,是否受时钟控制 组合电路和时序电路 HCL 编程 可以做几道书上的练习题找找感觉,再看看 Lab 注意: 硬件控制语言与高级语言的有何异同:比如多个 cases 的写法,集合 SEQ 所有指令各阶段的具体工作 注意: 要严格按书上规范写,注意每阶段用到哪些量,以及不同步骤的顺序 主部分书上给出了一部分,还有一部分是练习,一定要自己重新写一遍,考试 的时候默写就会很顺了 硬件流程图最好走一遍 这一章书上的代码段,图片,表格和练习题(课后题不要求,我觉得练习题就够 了) 如果时间不够可以先跳过 HCL 代码段和习题,这部分我觉得只要认真做 AttackLab 就 可以基本掌握

汇编指令对照表

汇编指令对照表

汇编指令对照表汇编指令对照表指令功能指令功能指令功能AAA调整加JA⾼于跳转SAHF恢复标志低⼋AAD调整除JB低于跳转SAL算术左移AAM调整乘JBE不⾼于跳转SALC AAS调整减JCXZ计数⼀六零跳转SAR算术右移ADC进位加JE相等跳转SBB借位减ADD加JECXZ计数三⼆零跳转SCASB扫描字节串AND与JG⼤于跳转SCASD扫描双字串ARPL调整优先级JL⼩于跳转SCASW扫描字串 JMP跳转SETA⾼于置位BOUND检查数组JMPE跳转扩展SETB低于置位BSF位右扫描JNB不低于跳转SETE相等置位BSR位左扫描JNE不等跳转SETG⼤于置位BSWAP交换字节JNG不⼤于跳转SETL⼩于置位BT位测试JNL不⼩于跳转SETNA不⾼于置位BTC位测试求反JNO不溢出跳转SETNB不低于置位BTR位测试清零JNP⾮奇偶跳转SETNE不等置位BTS位测试置⼀JNS⾮负跳转SETNG不⼤于置位 JO溢出跳转SETNL不⼩于置位CALL过程调⽤JP奇偶跳转SETNO不溢出置位CBW转换字节JS负号跳转SETNP⾮奇偶置位CDQ转换双字LAHF加载标志低⼋SETNS⾮负置位CLC进位清零LAR加载访问权限SETO溢出置位CLD⽅向清零LDS加载数据段SETP奇偶置位CLI中断清零LEA加载有效地址SETS负号置位CLTS任务清除LEAVE清除过程堆栈SGDT保存全局描述符CMC进位求反LES加载附加段SHL逻辑左移CMOVA⾼于传送LFS加载标志段SHLD双精度左移CMOVB低于传送LGDT加载全局描述符SHR逻辑右移CMOVE相等传送LGS加载全局段SHRD双精度右移CMOVG⼤于传送LIDT加载中断描述符SIDT保存中断描述符CMOVL⼩于传送LMSW加载状态字SLDT保存局部描述符CMOVNA不⾼于传送LOADALL加载所有SMI CMOVNB不低于传送LOADALL286加载所有286SMINT CMOVNE不等传送LOCK锁SMINTOLD CMOVNG不⼤于传送LODSB加载源变址字节串SMSW保存状态字CMOVNL不⼩于传送LODSD加载源变址双字串STC进位设置CMOVNO不溢出传送LODSW加载源变址字串STD⽅向设置CMOVNP⾮奇偶传送LOOP计数循环STI中断设置CMOVNS⾮负传送LOOPE相等循环STOSB保存字节串CMOVO溢出传送LOOPNE不等循环STOSD保存双字串CMOVP奇偶传送LOOPNZ⾮零循环STOSW保存字串CMOVS负号传送LOOPZ为零循环STR保存任务CMP⽐较LSL加载段界限SUB减CMPSB⽐较字节串LSS加载堆栈段SYSCALL系统调⽤CMPSD⽐较双字串LTR加载任务SYSENTER系统进⼊CMPSW⽐较字串MONITOR监视SYSEXIT系统退出CMPXCHG⽐较交换MOV传送SYSRET系统返回CMPXCHG486⽐较交换486MOVSB传送字节串TEST数测试CMPXCHG8B⽐较交换8字节MOVSD传送双字串UD0未定义指令0 CPUID CPU标识MOVSW传送字串UD1未定义指令1 CWD转换字MOVSX符号传送UD2未定义指令2 CWDE扩展字MOVZX零传送UMOV  MUL乘VERW校验写DAA调整加⼗MWAIT WAIT等DAS调整减⼗NEG求补WBINVD回写⽆效⾼速缓存DEC减⼀NOP空WRMSR写专⽤模式DIV除NOT⾮WRSHR  OR或XADD交换加ENTER建⽴堆栈帧OUT端⼝输出XBTS HLT停OUTSB端⼝输出字节串XCHG交换IDIV符号整除OUTSD端⼝输出双字串XLAT换码IMUL符号乘法OUTSW端⼝输出字串XOR异或IN端⼝输⼊POP出栈XSTORE INC加⼀POPA全部出栈 INSB端⼝输⼊字节串POPF标志出栈 INSD端⼝输⼊双字串PUSH压栈 INSW端⼝输⼊字串PUSHA全部压栈 PUSHF标志压栈 RCL进位循环左移 RCR进位循环右移 RDMSR读专⽤模式 RDPMC读执⾏监视计数 RDSHR RDTSC读时间戳计数 RDTSC读时间戳计数 REP重复 REPE相等重复 REPNE不等重复 RET过程返回 RETF远过程返回 RETN近过程返回 ROL循环左移 ROR循环右移 RSM恢复系统管理 指令功能指令功能指令功能EMMS媒体空MMX状态FMUL浮点乘MOVED媒体双字传送F2XM1浮点栈顶绝对值FMULP浮点乘出栈MOVEQ媒体四字传送FADD浮点加FNCLEX浮点不检查错误清除PACKSSDW媒体符号双字压缩FADDP浮点加出栈FNDISI浮点不检查禁⽌中断PACKSSWB媒体符号字压缩FBLD浮点加载⼗数FNENI浮点不检查禁⽌中断⼆PACKUSWB媒体⽆符号字压缩FBSTP浮点保存⼗数出栈FNINIT浮点不检查初始化PADDB媒体截断字节加FCHS浮点正负求反FNOP浮点空PADDD媒体截断双字加FCLEX浮点检查错误清除FNSAVE浮点不检查保存状态PADDSB媒体符号饱和字节加FCMOVB浮点低于传送FNSTCW浮点不检查保存控制器PADDSIW FCMOVBE浮点不⾼于传送FNSTENV浮点不检查保存环境PADDSW媒体符号饱和字加FCMOVE浮点相等传送FNSTSW浮点不检查保存状态器PADDUSB媒体⽆符号饱和字节加FCMOVNB浮点不低于传送FPATAN浮点部分反正切PADDUSW媒体⽆符号饱和字加FCMOVNBE浮点⾼于传送FPREM浮点部分余数PADDW媒体截断字加FCMOVNE浮点不等传送FPREM1浮点部分余数⼆PAND媒体与FCMOVNU浮点有序传送FPTAN浮点部分正切PANDN媒体与⾮FCMOVU浮点⽆序传送FRNDINT浮点舍⼊求整PAVEB FCOM浮点⽐较FRSTOR浮点恢复状态PCMPEQB媒体字节⽐等FCOMI浮点⽐较加载标志FSAVE浮点检查保存状态PCMPEQD媒体双字⽐等FCOMIP浮点⽐较加载标志出栈FSCALE浮点⽐例运算PCMPEQW媒体字⽐等FCOMP浮点⽐较出栈FSETPM浮点设置保护PCMPGTB媒体字节⽐⼤FCOMPP浮点⽐较出栈⼆FSIN浮点正弦PCMPGTD媒体双字⽐⼤FCOS浮点余弦FSINCOS浮点正余弦PCMPGTW媒体字⽐⼤FDECSTP浮点栈针减⼀FSQRT浮点平⽅根PDISTIB FDISI浮点检查禁⽌中断FST浮点保存PMACHRIW FDIV浮点除FSTCW浮点检查保存控制器PMADDWD FDIVP浮点除出栈FSTENV浮点检查保存环境PMAGW FDIVR浮点反除FSTP浮点保存出栈PMULHRIW FDIVRP浮点反除出栈FSTSW浮点检查保存状态器PMULHRWC FENI浮点检查禁⽌中断⼆FSUB浮点减PMULHW FFREE浮点释放FSUBP浮点减出栈PMVGEZB FFREEP浮点释放出栈FSUBR浮点反减PMVLZB FIADD浮点加整数FSUBRP浮点反减出栈PMVNZB FICOM浮点⽐较整数FTST浮点⽐零PMVZB FICOMP浮点⽐较整数出栈FUCOM浮点⽆序⽐较POR媒体或FIDIV浮点除整数FUCOMI浮点反⽐加载标志PSLLD媒体双字左移FIDIVR浮点反除FUCOMIP浮点反⽐加载标志出栈PSLLQ媒体四字左移FILD浮点加载整数FUCOMP浮点⽆序⽐较出栈PSLLW媒体字左移FIMUL浮点乘整数FUCOMPP浮点⽆序⽐较出栈⼆PSRAD媒体双字算术右移FINCSTP浮点栈针加⼀FWAIT浮点等PSRAW媒体字算术右移FINIT浮点检查初始化FXAM浮点检查PSRLD媒体双字右移FIST浮点保存整数FXCH浮点交换PSRLQ媒体四字右移FISTP浮点保存整数出栈FXTRACT浮点分解PSRLW媒体字右移FISTTP FYL2X浮点求L2X PSUBB媒体截断字节减FISUB浮点减整数FYL2XP1浮点求L2XP1PSUBSB媒体符号饱和字节减FISUBR浮点反减整数 PSUBSIW FLD浮点加载数 PSUBSW媒体符号饱和字减FLD1浮点加载⼀ PSUBUSB媒体⽆符号饱和字节减FLDCW浮点加载控制器 PSUBUSW媒体⽆符号饱和字减FLDENV浮点加载环境 PSUBW媒体截断字减FLDL2E浮点加载L2E PUNPCKHBW媒体字节⾼位解压FLDL2T浮点加载L2T PUNPCKHDQ媒体双字⾼位解压FLDLG2浮点加载LG2 PUNPCKHWD媒体字⾼位解压FLDLN2浮点加载LN2 PUNPCKLBW媒体字节低位解压FLDPI浮点加载PI PUNPCKLDQ媒体双字低位解压FLDZ浮点加载零 PUNPCKLWD媒体字低位解压创建时间:2020.05.27 更新时间:。

8086指令与机器码对应

8086指令与机器码对应
W.F.R/M
SUB
B.T.R/M
SUB
W.T.R/M
SUB
AL,
SUB
AX,
CS:
DAS
2
3
CMP
B.F.R/M
CMP
W.F.R/M
CMP
B.T.R/M
CMP
W.T.R/M
CMP
AL,
CMP
AX,
DS:
AAS
3
4
DEC AX
DEC CX
DEC DX
DEC BX
DEC SP
DEC BP
DEC SI
DEC DI
BX
011
100
[SI]
[SI+D8]
[SI+D16]
AH
SP
100
101
[DI]
[DI+D8]
[DI+D16]
CH
BP
101
110
[D16]
[BP+D8]
[BP+D16]
DH
SI
110
111
[BX]
[BX+D8]
[BX+D16]
BH
DI
111
↑R/M
→MOD
00
01
10
11
↑R/M
←MOD
段寄存器
8086/8088
指令与机器码转换对照表
\L
H\
0
1
2
3
4
5
6
7
L/
/H
0
ADD
B.F.R/M
ADD
W.F.R/M
ADD
B.T.R/M

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。

计算机机器码转换方法

计算机机器码转换方法

计算机机器码转换方法
计算机机器码是一种二进制代码,通常用于指令执行和数据处理。

但是,对于人类来说,机器码并不直观和易于理解。

因此,需要将机器码转换成更易于阅读和理解的形式。

下面是一些常见的机器码转换方法:
1. 十六进制表示法:将每个二进制数位组成四位二进制数,然
后将这些四位二进制数转换成对应的十六进制数。

例如,二进制数11011010可以表示为0xDA,其中D对应二进制数1101,A对应二进
制数1010。

2. 汇编指令:将机器码转换成对应的汇编指令。

汇编指令是一
种更易于理解的低级语言,可以直接在计算机上执行。

例如,机器码10110000可以转换成指令MOV AL, 0。

3. 反汇编:将机器码反编译成更易于阅读和理解的汇编指令。

反汇编是一种将机器码转换为汇编指令的过程,通常使用专门的反汇编工具。

4. 机器码分析:通过分析机器码的结构和功能,理解其作用和
含义。

这种方法需要深入了解计算机体系结构和指令集。

总之,机器码转换方法可以帮助我们更好地理解和分析计算机程序的执行过程,对于计算机科学和工程领域的从业人员来说,是一种必要的技能。

- 1 -。

暴力破解中所用到的汇编指令机器码知识

暴力破解中所用到的汇编指令机器码知识

关于暴力破解中所用到的汇编指令机器码知识
我们在暴力破解中修改的对象基本上都是条件跳转指令(如 JZ、JNZ、JG。

等等)和无条件跳转指令JMP,对于其它地方的修改多数都是改成NOP,所以这里主要讲一下跳转指令对应的机器码。

在80X86 体系的CPU中,成对条件跳转指令(指的是判断条件刚好相反)如下所示:
JZ<-->JNZ
JE<-->JNE
JB(JNAE)<-->JNB(JAE)
JC<-->JNC
JA(JNBE)<-->JNA(JBE)
JG(JNLE)<-->JNG(JLE)
JL(JNGE)<-->JNL(JGE)
JS<-->JNS
JP(JPE)<-->JNP(JPO)
JO<-->JNO
80X86体系CPU中的条件跳转指令分为单字节和双字节指令两种,分别对应8BIT和16BIT跳转;而与条件跳转指令相匹配的无条件跳转指令 JMP也有单字节和双字节指令两种,分别对应8BIT和16BIT跳转,当我们需要将条件跳转指令改成相应的无条件跳转指令时,因为要保持修改前后机器码长度的一致性,所以要注意被修改的条件跳转指令是单字节还是双字节指令,从而用相应字节的JMP机器码来代替,下表列出了暴力破解中条件跳转指令的修改方法:
关于跟踪程序时如何在Softice中动态改变条件跳转指令的执行方向:
还有一种方法是用鼠标点击寄存器窗口的EIP,然后直接输入目标代码的IP地址就可以了,不过使用这个方法时要小心,否则使程序跑飞就完蛋了!。

51指令机器码对照表

51指令机器码对照表

微机原理与接口技术──51指令机器码MCS-51单片机指令编码一、数据传送指令助记符指令机器指令编码MOV A,Rn 1 1 1 0 1 r r rMOV A,direct 1 1 1 0 0 1 0 1 直接地址MOV A,@Ri 1 1 1 0 1 0 1 iMOV A,#data 0 1 1 1 0 1 0 0 立即数MOV Rn,A 1 1 1 1 1 r r rMOV Rn, direct 1 0 1 0 1 r r r 直接地址MOV Rn, #data 0 1 1 1 1 r r r 立即数MOV direct,A 1 1 1 1 0 1 0 1 直接地址MOV direct,Rn 1 0 0 0 1 r r r 直接地址MOV direct,direct 1 0 0 0 0 1 0 1 直接地址(源) 直接地址(目)MOV direct,@Ri 1 0 0 0 0 1 1 i 直接地址MOV direct,#data 0 1 1 1 0 1 0 1 直接地址 立即数MOV @Ri,A 1 1 1 1 0 1 1 rMOV @Ri,direct 1 0 1 0 0 1 1 i 直接地址MOV @Ri,#data 0 1 1 1 0 1 1 i 立即数MOV DPTR,#data16 1 0 0 1 0 0 0 0 高位立即数 低位立即数MOVX A,@DPTR 1 1 1 0 0 0 0 0MOVX A,@Ri 1 1 1 0 0 0 1 iMOVX @DPTR,A 1 1 1 1 0 0 0 0MOVX @Ri,A 1 1 1 1 0 0 1 i微机原理与接口技术──51指令机器码MOVC A,@ A+PC 1 0 0 0 0 0 1 1MOVC A,@ A+DPTR 1 0 0 1 0 0 1 1SWAP A 1 1 0 0 0 1 0 0XCHD A,@Ri 1 1 0 1 0 1 1 iXCH A,Rn 1 1 0 0 1 r r rXCH A,direct 1 1 0 0 0 1 0 1 直接地址XCH A,@Ri 1 1 0 0 0 1 1 iPUSH direct 1 1 0 0 0 0 0 0 直接地址POP direct 1 1 0 1 0 0 0 0 直接地址二、算术运算指令助记符指令机器指令编码ADD A,Rn 0 0 1 0 1 r r rADD A,direct 0 0 1 0 0 1 0 1 直接地址ADD A,@Ri 0 0 1 0 0 1 1 iADD A,#data 0 0 1 0 0 1 0 0 立即数ADDC A,Rn 0 0 1 1 1 r r rADDC A,direct 0 0 1 1 0 1 0 1 直接地址ADDC A,@Ri 0 0 1 1 0 1 1 iADDC A,#data 0 0 1 1 0 1 0 0 立即数SUBB A, Rn 1 0 0 1 1 r r rSUBB A, direct 1 0 0 1 0 1 0 1 直接地址SUBB A, @Ri 1 0 0 1 0 1 1 iSUBB A, #data 1 0 0 1 0 1 0 0 立即数DA A 1 1 0 1 0 1 0 0微机原理与接口技术──51指令机器码INC A 0 0 0 0 0 1 0 0INC Rn 0 0 0 0 1 r r rINC direct 0 0 0 0 0 1 0 1 直接地址INC @Ri 0 0 0 0 0 1 1 iINC DPTR 1 0 1 0 0 0 1 1DEC A 0 0 0 1 0 1 0 0DEC Rn 0 0 0 1 1 r r rDEC direct 0 0 0 1 0 1 0 1 直接地址DEC @Ri 0 0 0 1 0 1 1 iMUL AB 1 0 1 0 0 1 0 0DIV AB 1 0 0 0 0 1 0 0三、逻辑运算指令助记符指令机器指令编码ANL A,Rn 0 1 0 1 1 r r rANL A,direct 0 1 0 1 0 1 0 1 直接地址ANL A,@Ri 0 1 0 1 0 1 1 iANL A,#data 0 1 0 1 0 1 0 0 立即数ANL direct,A 0 1 0 1 0 0 1 0 直接地址ANL direct,#data 0 1 0 1 0 0 1 1 直接地址 立即数ORL A,Rn 0 1 0 0 1 r r rORL A,direct 0 1 0 0 0 1 0 1 直接地址ORL A,@Ri 0 1 0 0 0 1 1 iORL A,#data 0 1 0 0 0 1 0 0 立即数ORL direct,A 0 1 0 0 0 0 1 0 直接地址微机原理与接口技术──51指令机器码ORL direct,#data 0 1 0 0 0 0 1 1 直接地址 立即数XRL A,Rn 0 1 1 0 1 r r rXRL A,direct 0 1 1 0 0 1 0 1 直接地址XRL A,@Ri 0 1 1 0 0 1 1 iXRL A,#data 0 1 1 0 0 1 0 0 立即数XRL direct,A 0 1 1 0 0 0 1 0 直接地址XRL direct,#data 0 1 1 0 0 0 1 1 直接地址 立即数CLR A 1 1 1 0 0 1 0 0CPL A 1 1 1 1 0 1 0 0RL A 0 0 1 0 0 0 1 1RLC A 0 0 1 1 0 0 1 1RR A 0 0 0 0 0 0 1 1RRC A 0 0 0 1 0 0 1 1四、控制转移指令助记符指令机器指令编码AJMP addrl1 a10 a9a80 0 0 0 1 a7a6a5a4a3a2a1aSJMP rel 1 0 0 0 0 0 0 0 相对地址 relLJMP addr 16 0 0 0 0 0 0 1 0 a15 ...a8a7...aJMP @A+DPTR 0 1 1 1 0 0 1 1JZ rel 0 1 1 0 0 0 0 0 相对地址 relJNZ rel 0 1 1 1 0 0 0 0 相对地址 relCJNE A,direct,rel 1 0 1 1 0 1 0 1 直接地址 相对偏移量 CJNE A,#data,rel 1 0 1 1 0 1 0 0 立即数 相对偏移量 CJNE Rn,#data,rel 1 0 1 1 1 r r r 立即数 相对偏移量 CJNE @Ri,#data,rel 1 0 1 1 0 1 1 i 立即数 相对偏移量 DJNZ Rn,rel 1 1 0 1 1 r r r 相对地址 rel微机原理与接口技术──51指令机器码DJNZ direct,rel 1 1 0 1 0 1 0 1 直接地址 相对地址 relACALL addrl1 a10 a9a81 0 0 0 1 a7a6... a1aLCALL addr 16 0 0 0 1 0 0 1 0 a15 ...a8a7...aRET 0 0 1 0 0 0 1 0RETI 0 0 1 1 0 0 1 0NOP 0 0 0 0 0 0 0 0五、位操作指令助记符指令机器指令编码MOV C,bit 1 0 1 0 0 0 1 0 位地址MOV bit,C 1 0 0 1 0 0 1 0 位地址CLR C 1 1 0 0 0 0 1 1CLR bit 1 1 0 0 0 0 1 0 位地址CPL C 1 0 1 1 0 0 1 1CPL bit 1 0 1 1 0 0 1 0 位地址SETB C 1 1 0 1 0 0 1 1SETB bit 1 1 0 1 0 0 1 0 位地址ANL C,bit 1 0 0 0 0 0 1 0 位地址ANL C,bit 1 0 1 1 0 0 0 0 位地址ORL C,bit 0 1 1 1 0 0 1 0 位地址ORL C,/bit 1 0 1 0 0 0 0 0 位地址JC rel 0 1 0 0 0 0 0 0 相对地址 relJNC rel 0 1 0 1 0 0 0 0 相对地址 relJB bit,rel 0 0 1 0 0 0 0 0 位地址 相对地址 rel JNB bit,rel 0 0 1 1 0 0 0 0 位地址 相对地址 rel JBC bit,rel 0 0 0 1 0 0 0 0 位地址 相对地址 rel。

hex文件解析(最重要全面)

hex文件解析(最重要全面)

1.汇编程序:ORG 0000HAJMP MAINORG 000BHAJMP TOINTORG 0100HMAIN:CLR P1.0MOV TMOD,#01HMOV TH0, #0FEHMOV TL0, #0CHMOV IE, #28HSETB TR0LOOP:SJMP LOOPORG 0300HTOINT:SETB P1.0CLR P1.0MOV TH0,#0FEHMOV TL0,#0CHRETIEND2.对应hex文件::0300000002030B ED:0C030B00787FE4F6D8FD75810702000041:020*********DD:02000B00610092:10010000C290758901758CFE758A0C75A828D28CF1:020*******FE6F:0B030000D290C290758CFE758A0C3202:00000001FF3.对hex文件结合汇编程序的解析::0300000002030B ED%在0000H地址上,存储指令LJMP 030BH.程序跳转到地址030BH处。

:0C030B00787FE4F6D8FD75810702000041%在030BH地址上,存储指令如下:%787F,(双字节指令),MOV Rn,#7F;(数据传送指令)%E4F6,(双字节指令),CLR F6;(F6位置清零)%D8FD,(双字节指令), DJNZ Rn,rel;%758107,(三字节指令),MOV 81,#07H;%020000,(三字节指令),LJMP 0000H;这两句程序和汇编程序本身没有关系,其实质为预先固化的程序,使得后面写入的程序从0000H开始执行。

:020*********DD% AJMP MAIN:02000B00610092% AJMP TOINT,000BH是中断地址的入口,中断响应程序存于此地址,中断响应以后开始执行中断服务程序,中断服务程序地址是0300H。

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
子程序调用

关于暴力破解中所用到的汇编指令机器码知识

关于暴力破解中所用到的汇编指令机器码知识

我们在暴力破解中修改的对象基本上都是条件跳转指令(如JZ、JNZ、JG。

等等)和无条件跳转指令JMP,对于其它地方的修改多数都是改成NOP,所以这里主要讲一下跳转指令对应的机器码。

在80X86 体系的CPU中,成对条件跳转指令(指的是判断条件刚好相反)如下所示:JZ <--> JNZJE <--> JNEJB(JNAE) <--> JNB(JAE)JC <--> JNCJA(JNBE) <--> JNA(JBE)JG(JNLE) <--> JNG(JLE)JL(JNGE) <--> JNL(JGE)JS <--> JNSJP(JPE) <--> JNP(JPO)JO <--> JNO80X86体系CPU中的条件跳转指令分为单字节和双字节指令两种,分别对应8BIT和16BIT跳转;而与条件跳转指令相匹配的无条件跳转指令JMP也有单字节和双字节指令两种,分别对应8BIT和16BIT跳转,当我们需要将条件跳转指令改成相应的无条件跳转指令时,因为要保持修改前后机器码长度的一致性,所以要注意被修改的条件跳转指令是单字节还是双字节指令,从而用相应字节的JMP机器码来代替,下表列出了暴力破解中条件跳转指令的修改方法:8位跳转指令修改方法汇编指令机器码相反汇编指令机器码测试标志位改后的机器码对应汇编指令JZ ???????? JE ???????? 74 XXJNZ ????????JNE ????????75 XX Z = 0 或1EB XX JMP ????????JB ???????? JNAE ???????? 72 XXJNB ????????JAE ????????73 XX C = 0 或1JC ???????? 72 XX JNC ???????? 73 XX C = 0 或1JA ???????? JNBE ???????? 77 XXJNA ????????JBE ????????76 XXZ OR C = 0 或1JG ???????? JNLE ???????? 7F XXJNG ????????JLE ????????7E XX(S XOR O) ORZ = 0 或1JL ???????? JNGE ???????? 7C XXJNL ????????JGE ????????7D XXS XOR O = 0或1JS ???????? 78 XX JNS ???????? 79 XX S = 0 或1JP ???????? JPE ???????? 7A XXJNP ????????JPO ????????7B XX P = 0 或1JO ???????? 70 XX JNO ???????? 71 XX O = 0 或116位跳转指令修改方法汇编指令机器码相反汇编指令机器码测试标志位修改后的机器码对应的汇编指令JZ ???????? JE ???????? 0F 84XXJNZ ????????JNE ????????0F 85 XX Z = 0 或190 EB XXNOPJMP ????????JB ???????? JNAE ???????? 0F 82XXJNB ????????JAE ????????0F 83 XX C = 0 或1JC ???????? 0F 82XXJNC ???????? 0F 83 XX C = 0 或1JA ???????? JNBE ???????? 0F 87XXJNA ????????JBE ????????0F 86 XX Z OR C = 0 或1JG ???????? JNLE ???????? 0F 8FXXJNG ????????JLE ????????0F 8EXX(S XOR O) OR Z= 0 或1JL ???????? JNGE ???????? 0F 8CXXJNL ????????JGE ????????0F 8DXXS XOR O = 0 或1JS ???????? 0F 88XXJNS ???????? 0F 89 XX S = 0 或1JP ???????? JPE ???????? 0F 8AXXJNP ????????JPO ????????0F 8BXXP = 0 或1JO ???????? 0F 80XXJNO ???????? 0F 81 XX O = 0 或1关于跟踪程序时如何在Softice中动态改变条件跳转指令的执行方向:其实这个问题我已经在“破解常见问题/技巧”中仔细讲过,可还是老有人来问,现在再次将相应的Softice列出来!跳转指令测试标志Softice命令JZ、JNZ、JE、JNE Z=0或1 R FL=ZJB、JNB、JAE、JNAE、JC、JNC C=0或1 R FL=CJA、JNBE Z OR C = 0 R FL=+Z 或R FL=+C 或R FL=+Z+C JNA、JBE Z OR C = 1 R FL=-Z-CJG、JNLE (S XOR O)OR Z = 0R FL=+Z 或R FL=+S-O 或RFL=-S+O 或R FL=+S-O+Z 或RFL=-S+-O+ZJNG、JLE (S XOR O)OR Z = 1R FL=+S+O-Z 或R FL=-S-O-ZJGE、JNL S XOR O =R FL=+S-O 或R FL=-S+OJL、JNGE S XOR O =1R FL=+S+O 或R FL=-S-OJS、JNS S=0或1 R FL=SJO、JNO O=0或1 R FL=OJP、JPE、JNP、JPO P=0或1 R FL=P还有一种方法是用鼠标点击寄存器窗口的EIP,然后直接输入目标代码的IP地址就可以了,不过使用这个方法时要小心,否则使程序跑飞就完蛋了!。

ASM指令机器码对照表

ASM指令机器码对照表

一、汇编速查MOV AA,BB 将BB 放到AA 里CALL 调用子程序(相当于BASIC 的GOSUB)RET 与RETF 返回程序(相当于BASIC 的RETURN)CMP XX,YY 比较XX 与YYJZ 若相等则转移JNZ 若不相等则转移JB 若小于则转移JG 若大于则转移JMP 无条件转移J??? (各种转移指令)LOOP 循环直到CX为0INT XX 类似CALL 的中断涵数PUSH 推入栈(STACK)ESP:PUSH AXPOP 出栈ESP:POP CXXCHG 交换ESP:XCHG AX,BXIN、OUT 与PORT有关的IN/OUTXLAT 查表LEA 段内偏移量。

ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的寄存器AHPUSHF、POPF将棋标入/出栈ADD ESP ADD AX,CX (AX=AX+CX)ADC 加入棋标C的ADDINC ESP INC AX(AX=AX+1)AAA 加法校正SUB、SBB 减法DEC ESP:DEC AX(AX=AX-1)NEG 去补,MUL、IMUL 乘DIV、IDIV 除SHR、SAR、SHL 算术、逻辑位移R=RIGHT L=LEFTOR、XOR、AND 逻辑运算ESP :XOR AX,AX(AX=0)直接标志转移指令格式机器码测试条件如...则转移JC 72 C=1 有进位JNS 79 S=0 正号JNC 73 C=0 无进位JO 70 O=1 有溢出JZ/JE 74 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段间间接转移Jmp dword (IP)←(EA)(CS)←(EA+2)二、断点设置表一般处理:bpx hmemcpy(万能断点)bpx MessageBox bpx MessageBoxExAbpx MessageBeep bpx SendMessagebpx GetDlgItemT ext bpx GetDlgItemIntbpx GetWindowText bpx GetWindowWordbpx GetWindowInt bpx DialogBoxParamAbpx CreateWindow bpx CreateWindowExbpx ShowWindow bpx UpdateWindowbmsg xxxx wm_move bmsg xxxx wm_gettext bmsg xxxx wm_command bmsg xxxx wm_activate bmsg xxxx wm_create bmsg xxxx wm_destroy时间相关:bpint 21 if ah==2A (DOS)bpx GetLocalTimebpx GetFileTimebpx GetSystemtimeCD-ROM 或磁盘相关:bpint 13 if ah==2 (DOS) bpint 13 if ah==3 (DOS) bpint 13 if ah==4 (DOS)bpx GetFileAttributesA bpx GetFileSizebpx GetDriveType bpx GetLastErrorbpx ReadFilebpio -h (Your CD-ROM Port Address) R软件狗相关:bpio -h 278 R bpio -h 378 R文件访问相关:bpint 21 if ah==3dh (DOS) bpint 31 if ah==3fh (DOS) bpint 21 if ah==3dh (DOS)bpx ReadFile bpx WriteFilebpx CreateFile bpx SetFilePointerbpx GetSystemDirectoryINI 初始化文件相关:bpx GetPrivateProfileString bpx GetPrivateProfileIntbpx WritePrivateProfileString bpx WritePrivateProfileInt注册表相关:bpx RegCreateKey bpx RegDeleteKeybpx RegCloseKey bpx RegOpenKeybpx RegQueryvalue注册标志相关: bpx cs:eip if EAX==0内存标准相关: bpmb cs:eip rw if 0x30:0x45AA==0显示相关: bpx 0x30:0x45AA do "d 0x30:0x44BB"bpx CS:0x66CC do "? EAX"利用S命令设断:S [-cu][address L length data-list]address :搜索的起始地址length :搜索的长度(字节长)data-list :可以是一系列字节,也可以是字符串, 字符串可以用单引号或双引号括住例如:S 30:0 L ffffffff '********'三、经典句式1 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????test eax eaxjz(jnz)2 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????jne(je)3 mov eax [ ]mov edx [ ]cmp eax,edxjnz(jz)或者begin: mov al [ ]mov cl [ ]cmp al,cljnz(jz)mov al [ +1]mov cl [ +1]cmp al,cljnz(jz)cmp eax ecx (eax为计数器)jnl beginmov al 014 lea edi [ ]lea esi [ ]repz cmpsdjz(jnz)5 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????setz (setnz) al (bl,cl…)6 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????test eax eaxsetz (setnz) bl,cl…7 call 00?????? ***push eax (ebx,ecx…)……call 00??????pop eax (ebx,ecx…)test eax eaxjz(jnz)intel x86 类NOP 指令列表(修订版)bkbll(bkbll@)2003/09/10这篇文章是无聊的时候写的, 因为看到phrack 61上面的fake-nop的东东, 觉得有意思.后来又受到eyas(cooleyas@)的启发,从intel指令手册上找了找,下面是我试验通过可以替换NOP的指令.注1: 这里不考虑双字节或以上的指令的fake-nop编码.注2: eyas加了xchg指令.16进制机器码x86汇编指令指令意义可能影响的寄存器或标志位-------------- ------------- ------------------- ---------------------------06 PUSHL %es es进栈esp0E PUSHL %cs cs进栈esp16 PUSHL %ss ss进栈esp1E PUSHL %ds ds进栈esp27 DAA 加法小数位调整AF CF PF SF ZF AL2F DAS 减法小数位调整AF CF PF SF ZF AL37 AAA 加法的ASCII调整AF CF AL3F AAS 减法小数位调整AF CF AL40 INC %eax %eax加1 AF OF PF SF ZF eax41 INC %ecx %ecx加1 AF OF PF SF ZF ecx42 INC %edx %edx加1 AF OF PF SF ZF edx43 INC %ebx %ebx加1 AF OF PF SF ZF ebx44 INC %esp %esp加1 AF OF PF SF ZF esp45 INC %ebp %ebp加1 AF OF PF SF ZF ebp46 INC %esi %esi加1 AF OF PF SF ZF esi47 INC %edi %edi加1 AF OF PF SF ZF edi48 DEC %eax %eax减1 AF OF PF SF ZF eax49 DEC %ecx %ecx减1 AF OF PF SF ZF ecx 4A DEC %edx %edx减1 AF OF PF SF ZF edx 4B DEC %ebx %ebx减1 AF OF PF SF ZF ebx 4C DEC %esp %esp减1 AF OF PF SF ZF esp 4D DEC %ebp %ebp减1 AF OF PF SF ZF ebp 4E DEC %esi %esi减1 AF OF PF SF ZF esi4F DEC %edi %edi减1 AF OF PF SF ZF edi50 PUSHL %eax eax进栈esp51 PUSHL %ecx ecx进栈esp52 PUSHL %edx edx进栈esp53 PUSHL %ebx ebx进栈esp54 PUSHL %esp esp进栈esp55 PUSHL %ebp ebp进栈esp56 PUSHL %esi esi进栈esp57 PUSHL %edi edi进栈esp90 NOP (NULL) (NULL)91 XCHG %ecx,%eax 交换寄存器内容eax,ecx92 XCHG %edx,%eax 交换寄存器内容edx,eax93 XCHG %ebx,%eax 交换寄存器内容ebx,eax95 XCHG %ebp,%eax 交换寄存器内容ebp,eax96 XCHG %esi,%eax 交换寄存器内容esi,eax97 XCHG %edi,%eax 交换寄存器内容edi,eax98 CBW 将byte的AL转换成word的EAX EAX9B WAIT 等待CPU处理完数据(NULL)D6 无效指令(NULL) (NULL)F5 CMC 转换CF标志位(开关) CFF8 CLC 清CF位(CF=0) CFF9 STC 设置CF位(CF=1) CFFC CLD 设置DF位(DF=1) DFFD STD 清理DF位(DF=0) DF1. 上面利用XCHG/PUSHL/INC/DEC的方法程序应该不会出错, 可以正常到目的, 但寄存器内容被改变了.inc eax就改变了eax的值,只能算无奈的办法.2. 利用改变标志寄存器位是个不错的想法, 基本上不会影响流程, 但看到还是改变了CPU的东西还是不满意.3. \x90(NOP),\x9b(wait),\xd6(bad) 这三个指令不错, 都不会改变程序的流程, 又不会改变寄存器的东东.这里尤其指明的是\xd6指令, 在intel手册上没查到对应什么指令, 但在linux下和windows下发现系统对于这个是继续执行下一条指令,和NOP相似.在我看来,上面这些指令利用顺序优先级最好是:\x90(NOP) > \xd6 > \x9b > 改变标志寄存器的操作指令> INC/DEC/PUSHL/XCHG//thx to eyas。

汇编和机器码的对应表

汇编和机器码的对应表

8086汇编和机器码的对应表(总11页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--单片机指令功能一览表助记符代码说明MOV A,Rn E8~EF 寄存器AMOV A,direct E5 dircet 直接字节送AMOV A,@Ri ER~E7 间接RAM送AMOV A,#data 74 data 立即数送AMOV Rn,A F8~FF A送寄存器MOV Rn,dircet A8~AF dircet 直接字节送寄存器MOV Rn,#data 78~7F data 立即数送寄存器MOV dircet,A F5 dircet A送直接字节MOV dircet,Rn 88~8F dircet 寄存器送直接字节MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节MOV dircet,@Ro 86~87 间接RAM送直接字节MOV dircet,#data 75 dircet data 立即数送直接字节MOV @Ri,A F6~F7 A送间接RAMMOV @Ri,#data 76~77 data 直接字节送间接RAM MOV @Ri,#data 76~77 data 立即数送间接RAM MOV DPTR,#data16 90 data 15~8 16位常数送数据指针 data7~0MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮器字节选AMOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送AMOVX A,@Ri E2~E3 送外部数据(8位地址)送A MOVX A,@DPTR E0 送外部数据(16位地址)送AMOVX @Ri,A F2~F3 A送外部数据(8位地址)MOVX @DPTR,A F0 A送外部数据(16位地址)PUSH dircet C0 dircet 直接字节进栈,SP加1 POP 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,Rn 28~2F 寄存器加到AADD A,dircet 25 dircet 直接字节加到AADD A,@Ri 26~27 间接RAM加到AADD A,#data 24data 立即数加到AADD A,Rn 38~3F 寄存器和进位位加到A ADD A,dircet 35dircet 直接字节和进位位加到A ADD A,@Ri 36~37 间接字节和进位位加到A ADD A,data 34 data 立即数和进位位加到A ADD A,Rn 98~9F A减去寄存器和进位位ADD A,dircet 95 dircet A减去直接字节和进位位ADD A,@Ri 36~37 间接RAM和进位位加到A ADD A,data 34 data 立即数和进位位加到A SUBB A,Rn 98~9F A减去寄存器和进位位SUBB A,dircet 95 dircet A减去直接字节和进位位SUBB A,@Ri 96~97 A减去间接RAM和进位位SUBB A,#data 94 data A减去立即数和进位位INC A 04 A加1INC Rn 08~0F 寄存器加1INC dircet 05 dircet 直接字节加1INC @Ri 06~07 间接RAM加1DEC A 14 A减1DEC Rn 18~1F 寄存器减1DEC dircet 15 dircet 直接字节减1DEC @Ri 16~17 间接RAM减1INC DPTR A3 数据指针加1MUL AB A4 A乘以BDIV AB 84 A除以BDA A D4 A的十进制加法调整逻辑操作ANL A,Rn 58~5F 寄存器“与”到AANL A,dircet 55 dircet 直接字节“与”到AANL A,@Ri 56~57 间接RAm“与”到AANL A,#data 54 data 立即数“与”到AANL dircet A 52 dircet A“与”到直接字节ANL dircet,#data 53 dircet data 立即数“与”到直接字节ORL A,Rn 48~4F 寄存器“或”到AORL A,dircet 45 dircet 直接字节“或”到AORL A,@Ri 46~47 间接RAM“或”到AORL A,#data 44 data 立即数“或”到AORL dircet,A 42 dircet A“或”到直接字节ORL dircet,#data 43 dircet data 立即数“或”到直接字节XRL A,Rn 68~6F 寄存器“异或”到AXRL A,dircet 65 dircet 直接字节“异或”到AXRL A,@Ri 66~67 间接RAM“异或”到AXRL A,#data 64 data 立即数“异或”到AXRL dircet A 62 dircet A“异或”到直接字节XRL dircet,#data 63 dircet data 立即数“异或”到直接字节CLR A E4 清零CPL A F4 A取反RL A 23 A左环移RLC A 33 A通过进位左环移RR A 03 A右环移RRC A 13 A通过进位右环移控制程序转移ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用LCALL addr 16 12 addr(15~8) 长子程序调用addr(7~0)RET 22 子程序调用返回RETI addr 11 32 中断调用返回AJMP addr 11 △1 addr(a7~a6) 绝对转移LJMP addr 16 02addr(15~8) 长转移addr(7~0)SJMP rel 80 rel 短转移,相对转移JMP @A+DPTR 73 相对于DPTR间接转移JZ rel 60 rel A为零转移JNZ rel 70 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,不为零则转移NOP 00 空操作*=a10a9a8l△=a10a9a80 布尔变量操作CLR C C3 清零进位CLR bit C2 清零直接位SETB C D3 置位进位SETB bit D2 置位直接位CPL C B3 进位取反CPL bit B2 直接位取反ANL C,bit 82 dit 直接数“与”到进位ANL C,/bit B0 直接位的反“与”到进位ORL C,bit 72 bit 直接位“或”到进位ORL C,/bit A0 bit 直接位的反“或”到进位MOV C,bit A2 bit 直接位送进位MOV bit,C 92 bit 进位送直接位JC rel 40 rel 进位位为1转移JNC rel 50 rel 进位位为0转移JB bit,rel 20 bit rel 直接位为1相对转移JNB bit,rel 30 bit rel 直接位为0相对转移JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位0人 | 分享到:阅读(213)| 评论(0)| 引用(0) |举报。

Intel8086ASMCode汇编指令的机器码

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-highR EG/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)。

汇编指令和机械码的对应表

汇编指令和机械码的对应表

汇编指令和机械码的对应表2021-04-20 21:07:19 阅读259 评论0 字号:大中小定阅一、汇编速查MOV AA,BB 将BB 放到AA 里CALL 调用子程序(相当于BASIC 的GOSUB)RET 与RETF 返回程序(相当于BASIC 的RETURN)CMP XX,YY 比拟XX 与YYJZ 假设相等那么转移JNZ 假设不相等那么转移JB 假设小于那么转移JG 假设大于那么转移JMP 无条件转移J (各种转移指令)LOOP 循环直到CX为0INT XX 类似CALL 的中断涵数PUSH 推入栈〔STACK〕ESP:PUSH AXPOP 出栈ESP:POP CXXCHG 交换ESP:XCHG AX,BXIN、OUT 与PORT有关的IN/OUTXLAT 查表LEA 段内偏移量。

ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的存放器AHPUSHF、POPF将棋标入/出栈ADD ESP ADD AX,CX 〔AX=AX+CX〕ADC 参加棋标C的ADDINC ESP INC AX〔AX=AX+1〕AAA 加法校正SUB、SBB 减法DEC ESP:DEC AX〔AX=AX-1〕NEG 去补,MUL、IMUL 乘DIV、IDIV 除SHR、SAR、SHL 算术、逻辑位移R=RIGHT L=LEFT OR、XOR、AND 逻辑运算ESP :XOR AX,AX〔AX=0〕直接标志转移指令格式机器码测试条件如...那么转移JC 72 C=1 有进位JNS 79 S=0 正号JNC 73 C=0 无进位JO 70 O=1 有溢出JZ/JE 74 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段间间接转移Jmp dword (IP)←(EA)(CS)←(EA+2)********************************************************************************************************************************汇编指令与机器码的相互转换(转载)查看上面的网址。

汇编语言转换成机器码 -回复

汇编语言转换成机器码 -回复

汇编语言转换成机器码-回复标题:汇编语言转换成机器码的详尽解析【汇编语言转换成机器码】在计算机科学领域,程序设计语言与计算机硬件之间的桥梁由汇编语言和机器码共同搭建。

汇编语言是一种低级编程语言,它能直接对应到计算机硬件的操作,而机器码则是计算机硬件可以直接执行的二进制指令集。

下面将详细阐述这一过程,从汇编语言编写、汇编器的工作机制到最终生成机器码的具体步骤。

一、汇编语言基础汇编语言是计算机硬件操作的一种符号化表示,它的语句通常与特定计算机架构的指令集一一对应。

例如,在x86架构中,“mov ax, bx”这条汇编指令代表将寄存器bx中的值移动到寄存器ax中。

这种指令简洁明了,易于理解,且直接反映了底层硬件操作。

二、汇编过程详解1. 源代码阶段:程序员使用汇编语言编写源代码,如上述的“mov ax, bx”。

每条汇编指令都对应一个或多个机器码。

2. 汇编阶段:源代码经过汇编器(Assembler)处理,这是一个将人类可读的汇编语言转化为机器可以理解的机器码的过程。

汇编器会根据预定义的指令集架构(Instruction Set Architecture,ISA)进行翻译,每个汇编指令都会被转换为相应的二进制机器码。

3. 符号表生成:汇编器还会创建一个符号表,记录源代码中定义的各种符号(如变量名、标签等)及其对应的内存地址,以便后续链接阶段使用。

4. 目标文件生成:经过汇编后,得到的目标文件(Object File)包含已转换为机器码的指令以及符号表信息,但此时还不能直接运行,因为目标文件可能引用了其他模块或者库函数,需要进一步链接。

三、链接过程与机器码生成1. 链接阶段:目标文件通过链接器(Linker)与其他目标文件或库文件进行链接,解决符号引用问题,形成可执行文件(Executable File)。

在这个过程中,所有模块的机器码被整合在一起,并确定了最终的内存布局。

2. 机器码确认:至此,所有的汇编语言指令都已经成功地转换成了机器码。

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

单片机指令功能一览表
助记符代码说明
MOV A,Rn E8~EF寄存器A
MOV A,direct E5 dircet直接字节送A
MOV A,@Ri ER~E7间接RAM送A
MOV A,#data74 data立即数送A
MOV 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送间接RAM
MOV@Ri,#data76~77 data直接字节送间接RAM MOV@Ri,#data76~77 data立即数送间接RAM MOV DPTR,#data1690 data 15~816位常数送数据指针
data7~0
MOVC A,@A+DPTR93由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVC A,@A+PC83由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3送外部数据(8位地址)送A
MOVX A,@DPTR E0送外部数据(16位地址)送A
MOVX@Ri,A F2~F3A送外部数据(8位地址)MOVX@DPTR,A F0A送外部数据(16位地址)PUSH dircet C0 dircet直接字节进栈,SP加1
POP dircet D0 dircet直接字节退栈,SP减1
XCH A,Rn C8~CF交换A和寄存器
XCH A,dircet C5 dircet交换A和直接字节
XCH A,@Ri C6~C7交换A和间接RAM
XCH A,@Ri D6~D7交换A和间接RAM的低位SWAP A C4
算术操作(A的二个半字节交换)
ADD A,Rn28~2F寄存器加到A
ADD A,dircet25 dircet直接字节加到A
ADD A,@Ri26~27间接RAM加到A
ADD A,#data24data立即数加到A
ADD 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加1
INC Rn08~0F寄存器加1
INC dircet05 dircet直接字节加1
INC@Ri06~07间接RAM加1
DEC A14A减1
DEC Rn18~1F寄存器减1
DEC dircet15 dircet直接字节减1
DEC@Ri16~17间接RAM减1
INC DPTR A3数据指针加1
MUL AB A4A乘以B
DIV AB84A除以B
DA A D4A的十进制加法调整
逻辑操作
ANL A,Rn58~5F寄存器“与”到A
ANL A,dircet55 dircet直接字节“与”到A
ANL A,@Ri56~57间接RAm“与”到A
ANL A,#data54 data立即数“与”到A
ANL dircet A52 dircet A“与”到直接字节
ANL dircet,#data53 dircet data立即数“与”到直接字节ORL A,Rn48~4F寄存器“或”到A
ORL A,dircet45 dircet直接字节“或”到A
ORL A,@Ri46~47间接RAM“或”到A
ORL A,#data44 data立即数“或”到A
ORL dircet,A42 dircet A“或”到直接字节
ORL dircet,#data43 dircet data立即数“或”到直接字节XRL A,Rn68~6F寄存器“异或”到A
XRL A,dircet65 dircet直接字节“异或”到A
XRL A,@Ri66~67间接RAM“异或”到A
XRL A,#data64 data立即数“异或”到A
XRL 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) |举报。

相关文档
最新文档