惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
Vercel News
Vercel News
H
Help Net Security
Martin Fowler
Martin Fowler
美团技术团队
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
小众软件
小众软件
T
Tailwind CSS Blog
WordPress大学
WordPress大学

博客园 - Lthis

Linux 用户特殊目录:中文改英文 完整指南(比如“桌面”->“Desktop”) 解决LKM编译报错:include/linux/compiler_types.h:258:20: warning: ‘asm’ operand 2 probably does not match constraints ubuntu 14.04 LTS root用户登录 IDA远程调试出现"The file can't be loaded by the debugger plugin."云云 【转】(总结)CentOS Linux下VNC Server远程桌面配置详解 【转】记使用Kali linux 2.0的一些坑 【转】目前常见的加密壳列表 winhex中文显示乱码问题 【收集】在OD中跑会出错,单独运行没问题 linux 端口 【转】第一课寄存器与寻址 【转】snort 【转】snort.conf分析(中文) 【转】snort 笔记2 ----- 规则编写 【转】Snort语法规则说明及实例讲解 【转】Snort 命令参数详解 Edit控件设置多行显示的方法 POST教程笔记 - Cookie方式登录网站 POST教程笔记 - POST方式登录网站
【转】第二课.汇编语言-8086指令、典型函数调用约定
Lthis · 2015-11-11 · via 博客园 - Lthis

www.jmpoep.com

第二课.汇编语言-8086指令、典型函数调用约定
代课:BambooQJ
论坛:WwW.JmpOep.CoM


一.8086 指令
1.数据传送指令
MOV
功能: 把源操作数送给目的操作数
语法: MOV 目的操作数,源操作数
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data


XCHG
功能: 交换两个操作数的数据
语法: XCHG
格式: XCHG r1,r2 XCHG m,r XCHG r,m


PUSH,POP
功能: 把操作数压入或取出堆栈
语法: PUSH操作数POP 操作数
格式: PUSH r PUSH M PUSH data POP r POP m


PUSHF,POPF,PUSHA,POPA
功能:堆栈指令群
格式: PUSHF POPF PUSHA POPA


LEA,LDS,LES
功能: 取地址至寄存器
语法: LEA r,m LDS r,m LES r,m
Lea eax,[esp] = mov eax,[esp]
Lea eax,[esp+4] != mov eax,[esp+4]


XLAT(XLATB)
功能:查表指令
语法: XLAT XLAT m
MOV BX,2000H ;BX←表首地址
MOV AL,0BH ;AL←序号
XLAT ;查表转换

2.算数运算指令
ADD,ADC
功能: 加法指令
语法: ADD OP1,OP2 ADC OP1,OP2
格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data
影响标志: C,P,A,Z,S,O


SUB,SBB
功能:减法指令
语法: SUB OP1,OP2 SBB OP1,OP2
格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data
影响标志: C,P,A,Z,S,O


INC,DEC
功能: 把OP的值加一或减一
语法: INC OP DEC OP
格式: INC r/m DEC r/m
影响标志: P,A,Z,S,O


MUL,IMUL
功能: 乘法指令
语法: MUL OP IMUL OP
格式: MUL r/m IMUL r/m
影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)


DⅣ,IDⅣ
功能:除法指令
语法: DⅣ OP IDⅣ OP
格式: DⅣ r/m IDⅣ r/m


3.逻辑运算指令
NEG
功能: 将OP的符号反相(取二进制补码)
语法: NEG OP
格式: NEG r/m
影响标志: C,P,A,Z,S,O


CBW,CWD
功能:有符号数扩展指令
语法: CBW CWD


AAA,AAS,AAM,AAD
功能: 非压BCD码运算调整指令
语法: AAA AAS AAM AAD
影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)


DAA,DAS
功能:压缩BCD码调整指令
语法: DAA DAS
影响标志: C,P,A,Z,S


4.位运算集
AND,OR,XOR,NOT,TEST
功能: 执行BIT与BIT之间的逻辑运算
语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位


SHR,SHL,SAR,SAL
功能:移位指令
语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
影响标志: C,P,Z,S,O


ROR,ROL,RCR,RCL
功能: 循环移位指令
语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL
影响标志: C,P,Z,S,O


5.程序流程控制集
CLC,STC,CMC
功能: 设定进位标志
语法: CLC STC CMC
标志位: C


CLD,STD
功能: 设定方向标志
语法: CLD STD
标志位: D


CLI,STI
功能: 设定中断标志
语法: CLI STI
标志位: I


CMP
功能: 比较OP1与OP2的值
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O
为第一个操作减去第二个操作数,
但不影响第两个操作数的值
它影响flag的CF,ZF,OF,AF,PF
我们怎么判断大小呢?
若执行指令后
ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0
若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2


JMP
功能: 跳往指定地址执行
语法: JMP 地址
JXX
功能: 当特定条件成立则跳往指定地址执行
语法: JXX 地址
注:
A: ABOVE,当C=0,Z=0时成立
B: BELOW,当C=1时成立
C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立
E: EQUAL,当Z=1时成立
G: GREATER(大于),当Z=0且S=0时成立
L: LESS(小于),当S不为零时成立
N: NOT(相反条件),需和其它符号配合使用
O: OVERFLOW,O=1时成立
P: PARITY,P=1时成立
PE: PARITY EVEN,P=1时成立
PO: PARITY ODD,P=0时成立
S: SIGN,S=1时成立
Z: ZERO,Z=1时成立


LOOP
功能: 循环指令集
语法: LOOP 地址


LOOPE(Z)
地址 LOOPNE(Z) 地址
标志位: 无


CALL,RET
功能:子程序调用,返回指令
语法: CALL 地址 RET RET n
标志位: 无


INT,IRET
功能: 中断调用及返回指令
语法: INT n IRET
标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器
串操作集


MOVSB,MOVSW,MOVSD
功能: 字符串传送指令
语法: MOVSB MOVSW MOVSD
标志位: 无


CMPSB,CMPSW,CMPSD
功能: 字符串比较指令
语法: CMPSB CMPSW CMPSD
标志位: C,P,Z,S,O


SCASB,SCASW
功能: 字符串搜索指令
语法:SCASBSCASW
标志位: C,P,Z,S,O


LODSB,LODSW,STOSB,STOSW
功能: 字符串载入或存贮指令
语法:LODSBLODSWSTOSBSTOSW
标志位: 无


REP,REPE,REPNE
功能: 重复前缀指令集
语法: REP 指令S REPE 指令S REPNE 指令S
标志位: 依指令S而定

二.常见函数调用约定
常见三种调用约定
Fastcall Cdecl StdCall
代表: GCC C/C++/java Win系统API
Xxx (1,2,3)
Push 3
Push 2
Push 1
Call xxx