一. 考核实操
二.笔记
p8.内存地址-堆栈
1.2.计算机的寻址方式
-
[立即数]
(1) mov指令实现向内存中读写数据
例:
mov eax,dword ptr ds[内存编号]
mov dword ptr ds[内存编号],eax
(2)lea实现获取内存编号
例:lea dword ptr ds[内存编号],eax
-
[任意寄存器]
(1)读
mov eax,地址编号
mov ecx,dword ptr ds[eax] 在ecx中得到地址
(2)写
mov eax,0x11FFD8
mov dword ptr ds[eax],0x12345678 把12345678写入编号为0x11FF78的内存中。
(3)获取内存编号
lea eax,dword ptr ds:[edx] 把edx中的数据代表的内存的内存编号写入eax,区别于
mov eax,dword ptr ds:[edx] 把edx中的数据代表的内存中的值存入eax
-
[reg+立即数(十六进制)]
语法同上,立即数的作用为将结果地址在原地址的基础上加改立即数
-
[reg+reg*{1,2,4,8}(大括号中1248不可改变)]
与3类似,线性关系
-
[reg+reg*{1,2,4,8}+立即数]
同上
2.堆栈
一种临时存储大量数据的方式
-
压入数据
设置栈底,栈顶
(1)mov dword ptr ds:[edx-4],0xAAAAAAAA
sub edx,4
(2) sub edx,4
mov dword ptr ds[edx],0xAAAAAAAA
(3)mov dword ptr ds:[edx-4,]0xddddddd
lea edx,dword ptr ds:[edx-4]
(4) lea edx,dword ptr ds:[edx-4]
mov dword ptr ds:[edx,]0xddddddd
2.读取第n个数
通过栈底加偏移或栈顶加偏移
3.弹出
压入的逆过程
4.push即压入数据整个过程
pop即弹出数据
此时默认ESP为栈顶ebp为栈底
push立即数时减四位,push寄存器时至少从十六位开始,减的数字与寄存器的宽度有关32位寄存器减4,16位减2,内存同理
pushed将八个寄存器都存入堆栈,此时可任意修改,若要恢复寄存器原本的值,则使用poped
p9.标志寄存器 32位
1.进位标志CF
如果运算结果的最高位产生了一个借位或进位那么,其值为1,否则为0
针对无符号运算,超过FF则溢出
2.奇偶标志PF
用于反映运算结果中“1”个数的奇偶性“1”有偶数个则为1否则为0。
3.辅助进位标志AF
以下两种情况为1,否则为零
(1)在字操作时,发生低字节向高字节进位或借位
(2)在字节操作时,发生低四位向高四位进位或借位
4.零标志ZF
用来反映运算结果是否为0,为零则ZF为1,否则为0
注:mov不改变标志位,仅为赋值,xor可影响寄存器
5.符号标志SF
反映运算结果的符号位,他与运算结果的最高位(二进制)相同
6.溢出标志OF
反映有符号加减运算所得结果是否溢出溢出为1,否则为0.
针对有符号运算,正数+正数超过7F,负数+负数超过FF,则溢出
正数加负数永不溢出
两边不同为内存,宽度一样
ADC带进位加法
sbb带借位减法
xchg交换数据
两边都为内存
movs