学习汇编语言,是为了学习安全技术,为了看懂汇编代码。

根据王爽老师的《汇编语言》书籍,总结以下几点。

当然我们坚持一条原则,少用的知识通过工具查询。


汇编语言入门-总结_学习总结


常用指令:


1、通用数据传送指令.  


MOV 传送字或字节.  

PUSH 把字压入堆栈.  

POP 把字弹出堆栈.  


2. 输入输出端口传送指令.  


IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )  

OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )  

输入输出端口由立即方式指定时, 其范围是 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.  


LSS 传送目标指针,把指针内容装入SS.  

例: LSS DI,string ;把段地址:偏移地址存到SS:DI.  


4. 标志传送指令.  


LAHF 标志寄存器传送,把标志装入AH.  

SAHF 标志寄存器传送,把AH内容装入标志寄存器.  

PUSHF 标志入栈.  

POPF 标志出栈.  

PUSHD 32位标志入栈.  

POPD 32位标志出栈.


5、算术运算指令



ADD 加法.  

ADC 带进位加法.  

INC 加 1.  

SUB 减法.  

SBB 带借位减法.  

DEC 减 1.  

NEC 求反(以 0 减之).  

CMP 比较.(两**作数作减法,仅修改标志位,不回送结果).  

MUL 无符号乘法.  

DIV 无符号除法.  


6、逻辑运算指令   


AND 与运算.  

OR 或运算.  

XOR 异或运算.  

NOT 取反.  

TEST 测试.(两**作数作与运算,仅修改标志位,不回送结果).  

SHL 逻辑左移.  

SHR 逻辑右移.  


7、串指令  


DS:SI 源串段寄存器 :源串变址.  

ES:DI 目标串段寄存器:目标串变址.  


CX 重复次数计数器.  


MOVS 串传送.  

( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )  

CMPS 串比较.  

( CMPSB 比较字符. CMPSW 比较字. )  


8、程序转移指令  


1>无条件转移指令 (长转移)  

JMP 无条件转移指令  

CALL 过程调用  

RET/RETF过程返回.  


2>条件转移指令

JB/JNAE 小于转移.  

JG/JNLE 大于转移.  

JL/JNGE 小于转移.  

JE/JZ 等于转移.  

JNE/JNZ 不等于时转移.  

JNP/JPO 奇偶性为奇数时转移.  

JNS 符号位为 "0" 时转移.  

JP/JPE 奇偶性为偶数时转移.  


3>中断指令  

INT 中断指令  

IRET 中断返回  



常用查询工具:


汇编金手指


汇编语言入门-总结_汇编语言学习_02


汇编指令的帮助手册


汇编语言入门-总结_学习总结_03


JZ这个指令我们不知道什么意思,可以对此进行查询。


汇编语言入门-总结_学习总结_04


常用的导航栏为指令系统、32位指令。


后期我们会通过OllyDebug分析进行深入学习。


"OllyDebug,简称OD,一种反汇编软件,动态追踪工具,Ring 3 级的调试器。

OllyDebug的使用界面是可视化操作。"


汇编语言入门-总结_学习总结_05


参考文章:

https://blog.csdn.net/weixin_53798995/article/details/124136560
https://zhuanlan.zhihu.com/p/38476126