- 帖子
- 3852
- 积分
- 13044
- 威望
- 16780
- 金钱
- 36761
- 在线时间
- 1139 小时
|
汇编基础一日一学习11
大家好,今天我们来学习下XCHG(Exchange Instruction)指令。它是交换指令。
交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同。其指令格式如下:
XCHG OPRD1,OPRD2
其中的OPRD1为目的操作数,OPRD2为源操作数 .
注意:XCHG不能交换段寄存器且它是不影响标志位的。
该指令的功能和MOV指令不同,后者是一个操作数的内容被修改,而前者是两个操作数都会发生改变。寄存器不能是段寄存器,两个操作数也不能同时为内存变量。
XCHG指令,我们在写壳的时候用的比较多点。那么上面我们已经说了 XCHG指令它的格式是和两个操作数或者是内存单元来进行数据交换。那么我们就来实例的讲解下。。
例如此时eax = 00403020h ebx = 00102033h
XCHG eax, ebx
此时因为XCHG是两个操作数都发生改变,所以此时eax = 00102033h ebx = 00403020h
其实非常好理解的 。。 XCHG还可以使寄存器和内存到单元的数据交换。。 举例
此时eax = 00403020h , 00403011h中的数据为 30h 00h 30h 00h 那么执行
XCHG dword ptr [00403011h], eax
执行指令后00403011h的内存单元数据为 20h 30h 40h 00h , eax = 00300030h
就是这么简单。
好今天因为有事情,可能要晚点上。
小作业:
1.假如此时eax = 00302050h , ebx = 00403000h
xchg ax, bx
问 此时 ax = ? bx = ?
2.假如[00403000h]内存单元数据为 00h 20h 30h 40h ,eax = 00304050h
xchg dword ptr [00403000h], eax
问 此时 eax = ? [00403000]内存单元的数据等于多少?
|
|