当前位置:网站首页>汇编语言学习一(有栈协程铺垫,32位寄存器和相关指令学习,未完待续06/29)
汇编语言学习一(有栈协程铺垫,32位寄存器和相关指令学习,未完待续06/29)
2022-06-30 06:47:00 【谢白羽】
- 背景举例
操作举例:把ebx的内容移动到eax中
机器指令:由0和1组成的序列
汇编指令:mov eax ,ebx (寄存器)
一、进制
16进制
89D8
1000 1001 1101 1000

二、寄存器介绍
(1)数据寄存器
- 寄存器介绍
CPU上的一个元件,CPU的组成部分之一,读写速度非常快
1)数据寄存器介绍
保存操作数,保存需要传递的数据(0和1),保存计算结果
2)数据寄存器分类
1)EAX:累加寄存器,也称之为累加器。举例1+1=2,会把2放到eax里面
2)EBX:基地址寄存器,存放地址的寄存器
3)ECX:计数器寄存器,比如说写一个for循环,循环5次,5这个放在计数寄存器
4)EDX:数据寄存器,一般放需要的数据,for循环有个值是5,一般放在EDX
EAX,EBX,ECX,EDX为32位寄存器
AX,BX,CX,DX位16位寄存器
低八位:al
高八位:ah
- 使用指令结果展示
1)mov eax , 0x100
2)mov ax ,0x10 (16位寄存器)
3)mov ah,0x1 (高8位)
(2)指针寄存器
1)指针寄存器分类
操作栈的寄存器
ESP:保存指向栈顶的指针
EBP:保存指向栈底的指针
- 补充:栈的定义
保存栈的参数和变量
2)操作指针寄存器实例
1)push eax前
eax的值: 0019FFCC
堆栈信息:(0019FF70存的是0019FF80,栈底的地址)
2)push eax后
栈数据的变化:(由于是32位的exe,0019FF70栈顶向栈底偏移4个字节的长度,就是0019FF6C)
0019FF6C变为栈顶指针,栈顶指针存的数据变成原先eax的值0019FFCC
(3)变址寄存器
1)变址寄存器介绍
指寄存器ESI,EDI,SI,DI的寄存器,主要用于存放存储单元在段内的偏移量
2)作用介绍(了解一下,没啥特点)
ESI:存放地址的寄存器
EDI:存放地址的寄存器

(4)指令指针寄存器
EIP寄存器:由存断点的位置表示出来(保存CPU下一次将要执行代码的地址)
当执行到004013A5 68 D41E4000 push TraceMe.004040D0,push指令会把下一步执行代码的地址压栈,原先栈顶指针0019FF6C就变成0019FF68,且值变为004040D0,这就是EIP寄存器的作用
(5)标志寄存器
1)标志寄存器介绍和作用
EFL标志寄存器:也叫flag寄存器,占16位的大小
2)举例标志寄存器中:ZF寄存器的作用
(做运算就会影响ZF位)
3)举例截图说明
EFL:246的16进制
1001000110
sub esp,0x58 (由于esp减0x58不为0,ZF位置为0;当结果为0,ZF就置为1)
(6)段寄存器
1)段寄存器作用
因为对内存的分段管理而设置的。计算机需要对内存分段,用来给不同的程序使用
- 截图(红色方框部分)

2)段寄存器分类(不止6个,只是OD显示了6个)
ES:
CS:
SS:
DS:
FS:
GS:
3)段寄存器使用举例
mov dword ptr ds:[0x405528] , edx
解释:
把edx的值移动到ds.base+0x405528这个地址里面
4)段寄存器简单拆分

①可见部分仅仅显示了16位,例如上图中的002B的2B
②不可见部分的Base:段开始的地方,举例比如说程序使用的内存是分段的,从1到10是一整段,像base就是1,+0x405528就是10,1到10就是一个程序用的一整段;上述举例的意思就是:edx的值放在一段地址里面
③Limit: 比如从1到10,11到20,那么10就是limit
④Attribute:属性,定义了这个段是否可读可写可执行
三、指令介绍
(1)数据传送指令(mov指令)
- 使用举例
move ebp,esp //把栈顶的数据移动到栈底
1)移动前
ESP:0019FF74
EBP:0019FF80
2)移动后
- 注意点:
1)位数大小一样的才能相互移动
2)不能用寄存器给立即数赋值
mov 123,esp
(2)加减运算指令
- 指令分类
add:加法
sub:减法 - 使用举例:
mov eax,0x0
add eax, 0x8 //eax变成0x0000008了
(3)逻辑运算
- 逻辑运算分类
逻辑与:and,同为1才为1
逻辑或:or,只要一个为1,就是1
逻辑异或: xor,同为0,异为1
逻辑非:not,0变成1,1变成0 - 使用举例
mov eax , 1
and eax , 2 //现在eax就是0
(4)移位指令
(5)test、cmp指令
(6)push、pop指令
(7)jmp、nop指令
(8)jcc指令
(9)call、retn指令
边栏推荐
猜你喜欢

记录一次腾讯测试开发工程师自动化接口测试实践经验

1.3 - Code System

【转】存储器结构、cache、DMA架构分析

RT thread migration to s5p4418 (III): static memory pool management

SOC_ AHB_ SD_ IF

Connect to remote server

Gazebo installation, uninstall and upgrade

ETL为什么经常变成ELT甚至LET?

Loading class `com. mysql. jdbc. Driver‘. This is deprecated. The new driver class is `com. mysql. cj. jdb

The most complete sentence in history
随机推荐
Idea run SQL file
Picture.....
【我的创作纪念日】一周年随笔
MySQL中的InnoDB引擎
力扣------替换空格
oracle
NFS mount
Go installation and configuration (1)
Connect to remote server
HuaWei满级大牛首次分享出这份598页网络协议全彩手册
【模糊神经网络】基于模糊神经网络的移动机器人路径规划
A small template (an abstract class, a complete process is written in a method, the uncertain part is written in the abstract method, and then the subclass inherits the abstract class, and the subclas
Relevant database questions.
原来你是这样的数组,终于学会了
Control method of UAV formation
Write a C program to judge whether the system is large end byte order or small end byte order
Basic questions (I)
Simple example of class template
IO stream (file class introduction)
1.7 - CPU的性能指标


