MMX(1)

关于汇编中 lea / move

1.

lea eax, pb    只是将pb的地址取出放到eax中,

lea ebx,[eax+2*1+1] 可以计算[]中的表达式  如果表达式比较复杂,mov基本不可代替。(有没有[]无所谓)

例子:

#include <iostream>
using namespace std;

int main()
{
	int a[10]={4,20};
	int* p=&(a[0]);

	int b=10;
	int *pb=&b;

	int couta=4;
	int coutb=0;

	_asm
	{
		push eax
		push ebx
		push ecx
		push edi

		xor eax, eax
		xor ebx, ebx

		mov eax, pb	
		mov couta, eax

//		mov ebx, offset p
		lea ebx, [b+2]//[eax+4]
		mov coutb, ebx

		pop edi
		pop ecx
		pop ebx
		pop eax

		emms
	}

	cout << "couta=" << hex << couta << dec << pb << endl;
	cout << "coutb=" << hex << coutb << dec << &b << endl;

	cin >> couta;
	return 0;
}

输出:

couta=12ff200012ff20

coutb=12ff220012ff20


lea可以说是计算单个地址+立即数/寄存器


如果有两个地址相加(当然没有任何意义,只是单纯相加),那就一个个取,借助寄存器来赋值。不能直接lea eax, [a+b]或者lea eax,a+b


2.mov eax, offset xxx 没有实现。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值