汇编-5基础指令与语言_第1页
汇编-5基础指令与语言_第2页
汇编-5基础指令与语言_第3页
汇编-5基础指令与语言_第4页
汇编-5基础指令与语言_第5页
已阅读5页,还剩38页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

80X86汇编语言与C语言-汇编程序员眼中的系统结ObjectCodeProgramDataOSData

EIPx86-32RIPx86- 息

器 如何从C代码生C代 对应的X86-32汇编(AT&T汇编格式intsum(intx,int{intt=x+y;}命令行:gcc–O2S生成汇编文件

movl%esp,%ebpmovl12(%ebp),%eaxaddl8(%ebp),%eaxmovl%ebp,%esppopl%ebp汇编语言数据格inttintt=两个整数(32位)相addladdl两个32位整数相类似于表达式x+=

“l”intintinteax+=操作数结果存3-字节指 0345movlSource,常见指可以被1,2或4个字节来表寄存器:8

类似的C语言表movl temp=

movl$-147,(%eax)*p=-

movl%eax,%edx temp2=temp1;movl%eax,(%edx) *p=temp;movl temp=间接寻 寄存器R指定内存地

movl 寄存器R指定内存起始地常数D给出偏移movlvoidvoidswap(int*xp,int{intt0=*xp;intt1=*xp=*yp=}

pushlmovl%esp,%ebppushl%ebxmovl12(%ebp),%ecxmovl8(%ebp),%edxmovl(%ecx),%eaxmovl(%edx),%ebxmovl%eax,(%edx)movl%ebx,(%ecx)

movl-4(%ebp),%ebxmovl%ebp,%esppopl%ebp

pushl{swap(int{swap(intt0=*xp;t1==}=movl12(%ebp),%ecxmovl8(%ebp),%edxmovl(%ecx),%eaxmovl(%edx),%ebxmovl%eax,(%edx)movl%ebx,(%ecx)movl-4(%ebp),%ebxmovl%ebp,%esppopl%ebp

voidswap(int*xp,int{intt0 intt1=*xp= *yp= }4•••栈Rtn0Old -4Old movl12(%ebp),%ecx#ecx= movl #edx= movl #eax=*yp movl #ebx=*xpmovl%eax,(%edx) #*xp=eaxmovl #*yp= 4

Rtn

movl12(%ebp),%ecx #ecx=ypmovl #edx=

movl(%ecx),%eax#eax=*yp(t1)movl(%edx),%ebx#ebx=*xp(t0)movl%eax,(%edx)#*xp=eaxmovl%ebx,(%ecx)#*yp= 4

Rtn

movl12(%ebp),%ecx #ecx=ypmovl #edx=

movl(%ecx),%eax#eax=*yp(t1)movl(%edx),%ebx#ebx=*xp(t0)movl%eax,(%edx)#*xp=eaxmovl%ebx,(%ecx)#*yp=

4

Rtn

movl12(%ebp),%ecx #ecx=ypmovl #edx=

movl(%ecx),%eax#eax=*yp(t1)movl(%edx),%ebx#ebx=*xp(t0)movl%eax,(%edx)#*xp=eaxmovl%ebx,(%ecx)#*yp=

4

Rtn

movl12(%ebp),%ecx #ecx=ypmovl #edx=

movl(%ecx),%eax#eax=*yp(t1)movl(%edx),%ebx#ebx=*xp(t0)movl%eax,(%edx)#*xp=eaxmovl%ebx,(%ecx)#*yp= 4

Rtn

movl12(%ebp),%ecx #ecx=ypmovl #edx=

movl(%ecx),%eax#eax=*yp(t1)movl(%edx),%ebx#ebx=*xp(t0)movl%eax,(%edx)#*xp=eaxmovl%ebx,(%ecx)#*yp= 4

Rtn

movl12(%ebp),%ecx #ecx=ypmovl #edx=

movl(%ecx),%eax#eax=*yp(t1)movl(%edx),%ebx#ebx=*xp(t0)movl%eax,(%edx)#*xp=eaxmovl%ebx,(%ecx)#*yp= 4

Rtn

movl12(%ebp),%ecx #ecx=ypmovl #edx=

movl(%ecx),%eax#eax=*yp(t1)movl(%edx),%ebx#ebx=*xp(t0)movl%eax,(%edx)#*xp=eaxmovl%ebx,(%ecx)#*yp= Mem[Reg[Rb]+S*Reg[Ri]+ 常量(地址偏移量 基址寄存器:8 索引寄存器: 一般%ebp 比例因1,24or

0xf000+0xf000+0xf000+2*0xf000+SrcE.g.,translationofp=进行xk*yk=1,2,4,or addl=+subl=-imull=*sall=与shll等sarl=shrl=Src逻辑右xorl=^andl=&orl=| incl=+1decl=-1negl=-notl=~int(intx,inty,int{intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+intrval=t2*t5;returnrval;}

pushl%ebpmovl%esp,%ebpmovl8(%ebp),%eaxmovl12(%ebp),%edxsall$4,%edxaddl16(%ebp),%ecxmovl%ebp,%esppopl%ebp

intint(intx,int{intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+t4;intrval=t2*t5;returnrval;}84#=x#=y#=#=#=#=#eax=4+t4+x(t5)#eax=t5*t2(rval)

•••z•••zyxRtnOldint(intx,inty,int{intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+intrval=t2*t5;returnrval;

840

••••••zyxRtnOld}#=x#=y#=#=#=#=leal4(%edx,%eax),%eax

#eax=#eax=t5*t2int(intx,inty,int{intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+intrval=t2*t5;returnrval;

840

••••••zyxRtnOld}#=x#=y#=#=#=#=leal4(%edx,%eax),%eax

#eax=#eax=t5*t2int(intx,inty,int{intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+intrval=t2*t5;returnrval;

840

••••••zyxRtnOld}#=x#=y#=#=#=#=leal4(%edx,%eax),%eax

#eax=#eax=t5*t2int(intx,inty,int{intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+intrval=t2*t5;returnrval;

840

••••••zyxRtnOld}#=x#=y#=#=#=#=leal4(%edx,%eax),%eax

#eax=#eax=t5*t2int(intx,inty,int{intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+intrval=t2*t5;returnrval;

840

••••••zyxRtnOld}#=x#=y#=#=#=#=leal4(%edx,%eax),%eax

#eax=#eax=t5*t2intintlogical(intx,int{intt1=intt2=t1>>intmask=(1<<13)-7;intrval=t2&mask;returnrval;}movlmovl8(%ebp),%eaxxorl12(%ebp),%eaxsarl$17,%eaxandlmovlpopl

=x===t2&intintlogical(intx,int{intt1=intt2=t1>>intmask=(1<<13)-7;intrval=t2&mask;returnrval;}movlmovl8(%ebp),%eaxxorl12(%ebp),%eaxsarl$17,%eaxandlmovlpopl

=x==andl eax=t2&intintlogical(intx,int{intt1=intt2=t1>>intmask=(1<<13)-7;intrval=t2&mask;returnrval;}movlmovl8(%ebp),%eaxxorl12(%ebp),%eaxsarl$17,%eaxandlmovlpopl

=x==andl eax=t2&intintlogical(intx,int{intt1=intt2=t1>>intmask=(1<<13)-7;intrval=t2&mask;returnrval;}movlmovl8(%ebp),%eaxxorl12(%ebp),%eaxsarl$17,%eaxandlmovlpopl213213=8192,213–7=

=x= =t1>>17=t2&8185SizesofCObjects(inCData x86-444444long448111222444888long8char448»Oranyotherx86-64的通用寄存扩展现有的,并增加了8个新%ebp/%rbp不再 寄存X86-32下的

pushl{swap(int{swap(intt0=*xp;t1==}=movl12(%ebp),%ecxmovl8(%ebp),%edxmovl(%ecx),%eaxmovl(%edx),%ebxmovl%eax,(%edx)movl%ebx,(%ecx)movl-4(%ebp),%ebxmovl%ebp,%esppopl%ebp

voidswap(intvoidswap(int*xp,int{intt0=*xp;intt1=*xp=*yp=}

(%rdi),%edx(%rsi),%eax,%edx,不同»First(xp)in%rdi,second(yp)in»64-bit作的数据仍是32

右放入寄存器:rdi,rsi,rdx,rcxr8r9。当参7个以上6个传送方式不变,"右向左放入X86-32下longint类型的voidvoid(longint*xp,longint{longintt0=longintt1=*xp=*yp=

(%rdi),%rdx(%rsi),%rax,%rdx,}}作的数据是64以及movq指令 表示“4X86指令的特立即数寄存器内存数Rb+S*R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论