day15.要点回顾和新指令的用法

第15节: 要点回顾和新指令的用法


1、前面我们主要讲了两个问题分别是:
1)数据可以存在哪里,可以在CPU的寄存器里或者在内存中,CPU存储的数据是有限的,如果太大了,可以存到内存中。
2)数据是如何存放的,前面讲到了大端模式和小端模式。
这两个问题弄清楚了,那就知道怎么样处理类似这两的问题的内容了,那么想处理数据我们必须学习新的汇编指令,从这节开始一一介绍。


2、指令分为:
r/m8,r8  r/m16,r16 r/m32/r32  r/m32,imm等我这里就不一一列举了。
r代表通用寄存器、m代表内存、imm代表立即数、
r8代表8位通用寄存器、m8代表8位内存、imm8代表8位立即数(16位和32位也是一样的)


1)MOV指令(移动):
MOV r/m16,r16这个是说可以是通用寄存器16位或16位内存,后面的r16就是16位的通用寄存器,这个例子是将通用寄存器存到通用寄存器里,也可以是内存数据存到通用的寄存器里。
例子:MOV WORD PTR DS:[0x189FFAC0],AX,结果将AX的值存到0x189FFAC0里。


2)ADD指令(加法):
ADD r/m32,r32
例子:ADD EAX,ECX,将EAX跟ECX相加,在olldebug工具中的寄存器窗口将EAX的值改为:1,ECX的值改为:2,当执行相加后EAX=3。


3)SUB指令(减法)
SUB r8,r/m8
例子:SUB AL,BYTE PTR DS:[0x189FFAC0] ,把al的值设置为:3,在把堆栈中的189FFAC0的值设置为:2,最后AL得到的结果是1。


4)AND指令(与运算)
AND r/m32,r32
例子:AND DWORD PTR DS:[0x189FFAC0],EAX 就是说189FFAC0的值和EAX的值进行与运算,最后堆栈中的189FFAC0的结果是0(注意:001 和 0010与运算结果是0)


5)OR指令(或运算)
OR r/m32,r32
例子:OR DWORD PTR DS:[0x189FFAC0],EAX,将EAX设置为:1,将0x189FFAC0设置为:0,最后的结果为1。


6)XOR指令(异或运算)
XOR r/m32,r32
例子:XOR DWORD PTR DS:[0x189FFAC0],EAX,将EAX设置为:1,将0x189FFAC0设置为:1,最后的结果为0。


7)NOT指令(非运算)
NOT r/m32
例子:NOT DWORD PTR DS:[0x189FFAC0]  将0x189FFAC0设置为:0,最后的结果是FFFFFFFF。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随行之旅

python国产化自动化

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值