欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编语言基础2

程序员文章站 2024-02-02 16:43:34
...

1,数据传送指令

 mov ebx,12340000h  ;将值0x1234000赋给ebx
 mov eax,[004010000h];将内存地址为0x00401000处的值赋给eax
 mov eax,ebx        ;将ebx里的值赋给eax
 mov [004010000h],12345678h ;将值(0x12345678)赋给内存地址0x00401000
 mov [00401000h],ecx ;将寄存器ecx的值赋给内存地址0x00401000
xchg eax,ebx        ;交换eaxebx里的数据
xchg [00401000h]m,ecx;交换ecx与地址0x00401000处的数据
xchg eax,[00401000h]

push 指令将一个操作数压入堆栈,esp寄存器的值会减4,esp始终指向栈顶。pop指令的效果和它相反。
lea (load effective address)指令,即装入有效地址。它对地址进行操作,而不是数据。
lea edi,[ebp+0000000ch] ;将地址(ebp+0xc)赋给edi寄存器(edi=ebp+0ch)。
2,算术运算指令
(1)add 指令是加法指令,sub指令使用与add相似。使用如下:

   add eax,ecx    ;将两个寄存器的值相加,然后赋给eax 
   add ebx,123    ;相当于c里的,ebx=ebx+123 
   add [00402000h],eax ;将地址为(00402000h)处的值加上eax里的值,赋给该地址 

(2)adc是带进位的加法,在语法上是一样的,只是adc指令在进行了add指令的操作后还要加上CF(carry falg进位标志)值。sbb是带进位的减法。

   adc eax,123 ;相当于eax=eax+123+CF 
   sbb ebx,11  ;ebx=ebx-11-CF

(3)inc与dec,用于给操作数加一或减一。

   inc ecx       ;eax=eax+1 
   inc dword ptr [00402000h];地址(00402000h)指向双字(dword)的变量,将该变量值加一

(4)mul/imul/div/idiv 无符号/有符号乘法,无符号/有符号除法指令 。

   mul ecx            ;当操作数长度为dword(4字节),进行的操作为edx:eax=eax*ecx,将eax与ecx的值相乘,结果的低32位放在eax,高32位放在edx,防止超过数值范围
   mul bh             ;操作数长度为byte(1字节),ax=al*bh
   mul bx             ;长度为word(2字节),dx:ax=ax*bx  
   imul bl/bx/ebx     ;与mul指令相同 
   imul reg1,reg2/mem ;reg1=reg1*reg2/mem  
   imul reg1,reg2/mem,imm ;reg1=reg2*imm,imm是立即数 

   div cl             ;ax/cl,商放在al,余数放在ah  
   div cx             ;dx:ax/cx,商放在ax,余数放在dx  
   div ecx            ;edx:eax/ecx,   
   mov dl,3           ;cl=3 
   mov eax,0ah        ;eax=0xa 
   div cl             ;ax/cl=10/3=3,al=3,ah=1

3,位运算指令

   and  eax,7     ;与运算,eax=eax&7,(7&1)=1,(7&4)=4,(7&16)=0,将操作数换成二进制,对应位进行与操作 
   or   ecx,0ffffffffh; 或运算,ecx=ecx|0xfffffff   
   xor  ax,ax         ;异或运算,ax=ax^ax
   not  esi           ;非运算,esi=~esi  
   shl  ch,4          ;向左移4位,ch=ch<<4,相当于乘以16 
   shr  ecx,1         ;向右移1位,ecx=ecx>>1,相当于除以2  
   rol  al,3          ;al循环左移3ror  al,1          ;al 循环右移1位。当al=0x41,循环右移1位,(01000001)->(10000010),al=0x82
相关标签: 汇编语言