易语言吧

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3376|回复: 9

[技术文章] 学习易语言要了解的汇编基础

[复制链接]

295

主题

537

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
14490

幽默大师终生成就

威望
0
易币
13868
贡献
0
积分
14490
UID
580
在线时间
464 小时
注册时间
2019-12-5
发表于 2020-3-5 16:26:20 | 显示全部楼层 |阅读模式
Win32汇编
汇编语言是各种CPU提供机器语言的助记符的集合。
00011110000111100011110001110
00011110000111100001110001110
汇编语言->编译器->机器语言  CPU
每一种CPU的汇编语言都不一样,只能通过一种常用的、结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编语言的两个根本目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。
一、通用寄存器 8
Eax 累加器和结果寄存器  累加器可用于乘、除、输入/输出等操作,它的使用频率很高 子程序的返回值一般是存放在Eax里面的
Ebx 数据指针寄存器      它可作为存储器指针来使用
Ecx 循环计数器          在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用cl
                      指明位移的位数
Edx 指针寄存器          在进行乘、除运算时,它可以为默认的操作数参与运算,也可用于存放I/O的端口地址
eaxebxecxedx又被称为数据寄存器,低16位分别成为ax,bx,cx,dx,低8位称为
al,bl,cl,dl,8位称为ah,bh,ch,dh
Ebp 栈指针寄存器         内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部
Esp 堆栈指针寄存器       内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶
堆栈是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
堆,可以看成是一棵树 队列优先,先进先出 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。
栈,先进后出  由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。
堆栈特点:
1、先进后出
2、往低地址开辟空间
3、由操作系统自动分配释放
调用子程序的时候,保存子程序调用完以后要执行的下一条指令的地址
保存参数
读取局部变量



Edi 目的地址寄存器       主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器                         操作数的寻址方式,为以不同的地址形式访问存储单元提供方便Esi 源地址寄存器 EAX EBX ECX EDX  EDI  ESI   EAX存放CALL的返回值  ECX存放循环次数 64cpu  16个通用寄存器rax rbx rcx rdx rbp rsp rdi rsi  r8 r9 r10 r11 r12 r13 r14 r15 二、段寄存器 ECS, 代码段寄存器EDS, 数据段寄存器ESS, 堆栈段寄存器EES, 附加段寄存器EFS, 附加段寄存器EGS  附加段寄存器 20862086   200  086  =2000+086=2086寻址地址=段寄存器*16+偏移地址   三、标志位寄存器 Eflags 1.运算结果标志位。一共6个,包括:CF进位标志位、PF奇偶标志位、AF辅助进位标志位、ZF零标志位、 SF符号标志位、OF溢出标志位。  CF (bit 0) —— 进位标识,算术操作进行了进位和借位,则此位被设置 PF (bit 2) —— 奇偶标识,结果包含奇数个1,则设置此位AF (bit 4) —— 辅助进位标识,结果的第3位像第4位借位,则此位被设置 ZF (bit 6) —— 零标识,结果为零,此位设置SF (bit 7) —— 符号标识,若为负数则设置此位 OF (bit 11) —— 溢出标识,结果像最高位符号位进行借位或者进位,此标志被设置

SF 符号标志位 2.状态控制标志位。一共3个,包括:TF追踪标志位、IF中断允许标志位、DF方向标志位。 四、指令寄存器 EIP  存放下次将要执行的指令在代码段的偏移地址 五、控制寄存器  CR0CR2CR3CR4 六、系统表指针寄存器 IDTR -- 中断描述符表信息GDTR -- 全局描述符表信息IDTR -- 局部描述符表信息 七、任务寄存器 TSS 保存任务的状态信息 八、调试寄存器 dr0 dr7,控制和允许监视进程的调试操作 EAX=变量1[EAX] 32位汇编指令 一、通用数据传送指令 MOV 传送字或者字节MOVSX 先符号扩展,再传送MOVZX 先零扩展,再传送PUSH  把数据压入堆栈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  交换32位寄存器里字节的顺序CMPXCHG 比较并交换操作数(第二个操作数必须为累加器AL/AX/EAXXADD  先交换再累加XLAT  字节查表转换 二、算术运算指令 ADD 加法ADC 带进位的加法INC 1SUB 减法SBB 带借位减法DEC 1NEG 求反CMP 比较(两个操作数做减法,只修改标志位,不回送结果)MUL 无符号乘法IMUL 整数乘法 三、逻辑运算指令 AND 与运算OR 或运算XOR 异或运算NOT 取反TEST 测试(两个操作数做与运算,只修改标志位,不回送结果) 四、程序转移指令 1条件转移指令JZ (JE) OPR  :结果为0转移,测试条件ZF=1JNZ(JNE) OPR :结果不为0转移,测试条件ZF=0JS OPR :结果为负转移,测试条件SF=1JNS OPR :结果为正转移,测试条件SF=0JO OPR :溢出转移JNO OPR :不溢出转移JP OPR :结果为偶转移JNP OPR :结果为奇转移JC OPR :有进位转移JNC OPR :无进位转移 2.无符号比较条件转移指令(以下指令经常是CMP OPD,OPS后面的指令根据比较结果来实现转移)
JB(JNAE) opd :小于或者不大于等于则转移JNB(JAE) opd-不小于或者大于等于则转移JA(NJBE) OPD-大于或者不小于等于则转移JNA(JBE) OPD-不大于或者小于等于则转移 3.带符号比较条件转移指令JL(JNGE) :小于或者不大于等于则转移JNL(JGE):不小于或者大于等于则转移JG(NJLE)-大于或者不小于等于则转移JNG(JLE)-不大于或者小于等于则转移 4、调用子程序与返回指令CALL 子程序调用RET 子程序返回指令 5、条件标志ZF 零标志 -- 当结果为负时,SF=1,否则,SF=0.AF 辅助进位标志---运算过程中第三位有进位值,AF=1,否则,AF=0PF 奇偶标志------当结果操作数中偶数个"1",PF=1,否则,PF=0易语言学习吧提供www.eyy8.vip
SF 符号标志----当结果为负时,SF=1;否则,SF=0.溢出时情形例外CF 进位标志----- 最高有效位产生进位值,例如,执行加法指令时,MSB有进位,CF=1;否则,CF=0.OF 溢出标志-----若操作数结果超出了机器能表示的范围,则产生溢出,OF=1,否则,OF=0 函数的参数地址比EBP的值高,而函数的局部变量地址比EBP的值低,因此参数或局部变量总是通过EBP加减一定的偏移地址来访问的,比如,要访问函数的第一个参数为EBP+8 堆栈中到底存储了什么数据?包括了:函数的参数,函数的局部变量,寄存器的值(用以恢复寄存器),函数的返回地址以及用于结构化异常处理的数据(当函数中有trycatch语句时才有,本文不讨论)。这些数据是按照一定的顺序组织在一起的,我们称之为一个堆栈帧(Stack Frame)。一个堆栈帧对应一次函数的调用。在函数开始时,对应的堆栈帧已经完整地建立了(所有的局部变量在函数帧建立时就已经分配好空间了,而不是随着函数的执行而不断创建和销毁的);在函数退出时,整个函数帧将被销毁。 00111101   11111010    00111000  00111101   11111010    11111111 10111 push -0x1push 0x8push 0x16010003

只要看到TestCMP,那么往往下面接着就是一个跳转push 0x52010001 6A FF 6A 08 68 03 00 01 16 68 01 00 01 52 1尽量避开堆栈寄存器 espebp2尽量避开call3尽量避开跳转4尽量避开特别大的偏移5、选择寄存器赋值(小偏移)、位操作、比较指令(cmptestxor)等小指令6、可选择包含比较特殊的常数的操作指令7、死码一般不能超过8条,尽量大于等于3


0

主题

42

帖子

104

积分

易语言菜鸟

Rank: 2

积分
104
威望
0
易币
62
贡献
0
积分
104
UID
2206
在线时间
3 小时
注册时间
2020-3-5
发表于 2020-3-5 17:17:41 | 显示全部楼层

楼主,大恩不言谢了!易语言吧是最棒的!
回复

使用道具 举报

0

主题

42

帖子

104

积分

易语言菜鸟

Rank: 2

积分
104
威望
0
易币
62
贡献
0
积分
104
UID
2206
在线时间
3 小时
注册时间
2020-3-5
发表于 2020-3-5 17:29:44 | 显示全部楼层

论坛不能没有像楼主这样的人才啊!我会一直支持易语言吧
回复

使用道具 举报

0

主题

19

帖子

2738

积分

VIP超级贵宾

Rank: 8Rank: 8

积分
2738

终生成就赞助会员

威望
198
易币
2323
贡献
0
积分
2738
UID
833
在线时间
112 小时
注册时间
2020-1-3
发表于 2020-3-5 18:21:22 | 显示全部楼层
楼主发贴辛苦了,谢谢楼主分享!我觉得易语言吧是注册对了!
回复

使用道具 举报

12

主题

29

帖子

444

积分

易语言学徒

Rank: 3Rank: 3

积分
444
威望
0
易币
415
贡献
0
积分
444
UID
2149
在线时间
8 小时
注册时间
2020-3-3
发表于 2020-3-5 23:56:57 | 显示全部楼层

楼主太厉害了!楼主,我爱你!我觉得易语言吧真是个好地方!
回复

使用道具 举报

0

主题

1

帖子

5

积分

初识易语言

Rank: 1

积分
5
威望
0
易币
4
贡献
0
积分
5
UID
2242
在线时间
0 小时
注册时间
2020-3-7
发表于 2020-3-7 00:12:03 | 显示全部楼层
支持一下
回复

使用道具 举报

0

主题

25

帖子

28

积分

初识易语言

Rank: 1

积分
28
威望
0
易币
3
贡献
0
积分
28
UID
2647
在线时间
4 小时
注册时间
2020-3-19
发表于 2020-5-16 13:31:25 | 显示全部楼层

这个帖子不回对不起自己!我想我是一天也不能离开易语言吧
回复

使用道具 举报

0

主题

9

帖子

25

积分

初识易语言

Rank: 1

积分
25
威望
0
易币
16
贡献
0
积分
25
UID
7033
在线时间
3 小时
注册时间
2020-6-29
发表于 2020-7-2 20:22:39 | 显示全部楼层
6,虽然有一点感觉头晕眼花
回复

使用道具 举报

0

主题

2339

帖子

9564

积分

VIP超级贵宾

Rank: 8Rank: 8

积分
9564
威望
198
易币
6829
贡献
0
积分
9564
UID
11903
在线时间
36 小时
注册时间
2021-1-23
发表于 2021-5-28 22:57:10 | 显示全部楼层
楼主发贴辛苦了,谢谢楼主分享!我觉得易语言吧是注册对了!
回复

使用道具 举报

0

主题

57

帖子

209

积分

易语言学徒

Rank: 3Rank: 3

积分
209
威望
0
易币
151
贡献
0
积分
209
UID
37517
在线时间
13 小时
注册时间
2023-7-10
发表于 2023-7-10 15:33:31 | 显示全部楼层

楼主发贴辛苦了,谢谢楼主分享!我觉得易语言吧是注册对了!
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【选择右侧内容,快速回复】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

大漠插件注册码无须等1-3号

QQ|一:站内所有资源均来自互联网收集或用户上传分享,本站不拥有此类资源的版权。 作为网络服务提供者,对转载行为的发生不具备充分的监控能力。但是当版权拥有者提出侵权并出示充分的版权证明材料时,易语言吧负有移除转载作品以及停止继续传播的义务。在满足前款条件下采取移除等相应措施后不为此向原发布人承担违约责任,包括不承担因侵权不成立而给原发布人带来损害的赔偿责任。 用户免费分享产生,如果侵犯了你的权益,联系QQ:3066137757|Archiver|手机版|小黑屋|易语言吧

GMT+8, 2024-11-23 16:20 , Processed in 0.238134 second(s), 41 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表