汇编 ADD指令
知识点: 加法汇编指令ADD 一、加法指令 ADD(Addition) 格式 格式: ADD A,B //A=A+B; 功能: 两数相加 1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数B. 2. A和B均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数. //也就是说A与B不能同时是指针 如: add [eax],[ebx] 这类情况是错的 例子: 第三课中的add函数里 有如下2句代码 00401003 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; a 00401006 |. 0345 0C ADD EAX,DWORD PTR SS:[EBP+C] ; b //eax=a+b 二、ADD指令测试 int _tmain(int argc, _TCHAR* argv[]) { int i=0; printf(""); i=i+0x100; i=i+0x111; int *p=&i; __asm { mov eax,0x222 mov ebx,0x100 add ebx,eax //ebx322 // mov ebx,p add [ebx],0x111 //00401048 |. 8003 11 ADD BYTE PTR DS:[EBX],11 ; i=i+11 add i,0x111 //DWORD WORD } /* 0040101C |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; eax=i=0 0040101F |. 05 00010000 ADD EAX,100 ; eax=eax+100=0+100=100 00401024 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ; i=eax=100 00401027 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; ecx=i=100 0040102A |. 81C1 11010000 ADD ECX,111 ; ecx=ecx+111=100+111=0x211 00401030 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX ; i=ecx=0x211 00401033 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] ; edx=&i=ebp-8; 00401036 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ; p=&i 00401039 |. B8 22020000 MOV EAX,222 0040103E |. BB 00010000 MOV EBX,100 00401043 |. 03D8 ADD EBX,EAX ; ebx=ebx+eax=100+222=322 00401045 |. 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4] ; ebx=i=edx=ebp-8 00401048 |. 8003 11 ADD BYTE PTR DS:[EBX],11 ; i=i+11 0040104B |. 8145 F8 11010>ADD DWORD PTR SS:[EBP-8],111 ; i=i+111 */ printf(""); return 0; }