汇编

本文介绍了汇编语言的基础知识,包括寄存器类型如通用、索引、段寄存器,以及32位寄存器的扩展。此外,还详细阐述了标志寄存器的重要角色,如零标志、溢出标志和进位标志。文章还列举了常用的汇编指令,并重点讲解了跳转指令及其条件。最后,讨论了进位计数制,特别是二进制、八进制和十六进制之间的转换关系。

汇编是一门计算机程序设计语言,后者一共分为三类语言:机器语言、高级语言、汇编语言。

使用字母和符号来表示机器语言的命令,用十进制或十六进制来表示数据,这样的计算机程序设计语言便是汇编语言

寄存器

是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。

(如同一个有限的小盒子,可以放名字,数字,一段话)

通常大小为32位,但也有一些是8或16位的。

1、   寄存器的区分

单字节(8位)寄存器

单字(16位)寄存器通过功能区分:

通用寄存器,索引寄存器,段寄存器,指令指针寄存器

双字(32位)寄存器 2 字= 4 字节= 32 位, EAX、EBX、ECX、EDX、EDI……如果16位寄存器前面加了‘E’,就代表它们是32位寄存器。

(一个字=2字节=16位)

2、标志寄存器

标志寄存器代表某种状态。在逆向工程中,你了解了标志寄存器就能知道程序在这一步是否会跳转,标志寄存器就是一个标志,只能是0或者1,它们决定了是否要执行某个指令。我们只了解三个:ZF、OF、CF。分别是Z-Flag(零标志),TheO-Flag(溢出标志),The C-Flag(进位标志)。

3、段偏移

段:偏移量 = 把它们放在一起就是内存中一个具体的地址。

4、栈

栈是内存里可以存放稍后会用到的东西的地方。

5、指令(字母表排序)

所有的值通常是以16进制形式储存的。

ADD (加)

AND (逻辑与)

CALL (调用)

CMP (比较)

DEC (自减)

DIV (除)

IDIV (整除)

IMUL (整乘)

INC (自加)

INT目标数

LEA (有效地址传送)

MOV (传送)

MUL (乘法)

NOP (无操作)

OR (逻辑或)

POP 目的地址

PUSH语法:PUSH 值

RET (返回)

SUB (减)

TEST

XOR语法:XOR 目的数,源数

 

这些都是最重要的跳转指令和触发条件(重要用*标记,最重要用**标记):

指令                条件                    条件

JA*          -    如果大于就跳转(无符号)      - CF=0 and ZF=0

JAE          -    如果大于或等于就跳转(无符号)- CF=0

JB*          -    如果小于就跳转(无符号)   - CF=1

JBE          -    如果小于或等于就跳转(无符号)- CF=1 or ZF=1

JC           -    如果CF被标记就了跳转       - CF=1

JCXZ         -    如果CX等于0就跳转      - CX=0

JE**         -    如果相等就跳转        - ZF=1

JECXZ        -    如果ECX等于0就跳转       - ECX=0

JG*          -    如果大于就跳转(有符号)   - ZF=0 and SF=OF (SF = Sign Flag)

JGE*         -    如果大于或等于就跳转(有符号) - SF=OF

JL*          -    如果小于就跳转(有符号)    - SF != OF (!= is not)

JLE*         -    如果小于或等于就跳转(有符号 - ZF=1 and OF != OF

JMP**        -    跳转             - 强制跳转

JNA          -    如果不大于就跳转(无符号)   - CF=1 or ZF=1

JNAE         -    如果不大于等于就跳转(无符号) - CF=1

JNB          -    如果不小于就跳转(无符号)   - CF=0

JNBE         -    如果不小于等于就跳转(无符号) - CF=0 and ZF=0

JNC          -    如果CF未被标记就跳转     - CF=0

JNE**        -    如果不等于就跳转       - ZF=0

JNG          -    如果不大于就跳转(有符号)   - ZF=1 or SF!=OF

JNGE         -    如果不大于等于就跳转(有符号) - SF!=OF

JNL          -    如果不小于就跳转(有符号)   - SF=OF

JNLE         -    如果不小于等于就跳转(有符号) - ZF=0 and SF=OF

JNO          -    如果OF未被标记就跳转     - OF=0

JNP          -    如果PF未被标记就跳转     - PF=0

JNS          -    如果SF未被标记就跳转      - SF=0

JNZ          -    如果不等于0就跳转      - ZF=0

JO           -    如果OF被标记就跳转     - OF=1

JP           -    如果PF被标记就跳转     - PF=1

JPE          -    如果是偶数就跳转       - PF=1

JPO          -    如果是奇数就跳转       - PF=0

JS           -    如果SF被标记就跳转     - SF=1

JZ           -    如果等于0就跳转      - ZF=1

6、逻辑操作符

学习汇编的目的及感想:

汇编语言在我接触我便觉得异常复杂,再结合了书籍和网课的讲解,通过在慕课上的咨询,我大致囫囵吞枣了一番,深入了解却还未参透。不过通过用汇编语言编制程序可以更加清晰地知道计算机是如何实现各种复杂工作的完成。而在计算机系统中,某些功能必须用汇编语言程序来实现,比如:机器自检,系统初始化,实际的输入输出设备的操作。并且汇编语言的效率也更高。

新习得:

进位计数制:使用一定个数的数码的组合来表示数字。

每个数码排在不同位置,所表示的数值大小不相同。

Eg:222,从右边开始,第一个2是表示两个1,第二个2是表示两个10,第三个2是表示两个100.

将各个位置所表示的基本数值称为位权,简称权。

每个数位上能使用不同数码的个数称为基数。

Eg:十进制有十个数码0~9,基数为10,二进制基数为2.

(每个数位能取到的最大数码值=基数-1)

计算机中数据一般采用二进制数,因为容易表示和存储,且适合于逻辑值的表达和运算。

二进制与8进制与16进制之间的转换关系:

3位二进制数与一位8进制数对应,4位二进制数与一位16进制数对应。

B Binary二进制数

Q或O Octal八进制数

D Decimal十进制数

H Hexadecimal十六进制数

!各种数制的转换

十进制整数到二进制数

1、减权定位法2、除基取余法(同样适用于其他进制转换)

十进制小数到二进制数

1、减权定位法2、乘基取整法

二进制整数到十进制数

1、按权相加法2、逐次乘基相加法

二进制小数到十进制数

1、按权相加法2、逐次除基相加法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值