汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)
Posted web安全工具库
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)相关的知识,希望对你有一定的参考价值。
一、MOV指令
1、将十六进制0x1234数值,赋值给eax寄存器
mov eax,0x1234
![](https://image.cha138.com/20230307/9b71e0baa359445ebb2251de024ccdca.jpg)
2、将十六进制0x123数值,赋值给内存地址为ebx
mov dword [ebx],0x123
![](https://image.cha138.com/20230307/eee7b725fd064164957b31f9bbfdf910.jpg)
3、将edx的高八位赋值给eax的低八位
ax,eax的低16位,al,eax的低8位,ah,eax的高8位,通力bx,bl,bh为ebx的相关数值
mov al, dh
![](https://image.cha138.com/20230307/4a4f40872c594033877dce373b0b770f.jpg)
4、将十六进制0x11数值,复制给内存地址为ebx的第一个字节
mov byte [ebx],0x11
![](https://image.cha138.com/20230307/8fe21b571a534886a243674e22d9da1e.jpg)
二、MOVSX指令,有符号扩展
当我们执行,mov eax,bl的时候,会提示错误,bl是8位,eax是32位,所以需要扩展,这时需要movsx
movsx eax,bl
![](https://image.cha138.com/20230307/047346de4e1b47d895815aac7d59ab73.jpg)
将ebx置为0x12345680,再执行movsx eax,bl,会发现eax变成了FFFFFF80
![](https://image.cha138.com/20230307/d04d9a9b1460436986257aef2e836171.jpg)
因为有符号4字节最大表示的正数是0x7F,0x80就是表示负数了,所以这里执行的结果不一样。
三、MOVZX指令,无符号扩展
假如用MOVZX就不会出现上面的错误,这里全部表示的是正数
movzx eax, bl
![](https://image.cha138.com/20230307/58ce018cb339483eb2d49de8632409a3.jpg)
四、LEA指令,赋址操作
1、mov取的内存的值,而lea的指令取的是址,lea后面必须跟的是寄存器,后面是一个内存
lea eax, ds:[ebx+0x5]
对比
mov eax, ds:[ebx+0x5]
![](https://image.cha138.com/20230307/c79ea0df6c274d3b8ac60b694885231c.jpg)
五、XCHG指令,交换数值
将ebx的值和eax的值进行交换
xchg ebx, eax
![](https://image.cha138.com/20230307/ec16c31df3c64679a13bf33dcad5529e.jpg)
以上是关于汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)的主要内容,如果未能解决你的问题,请参考以下文章