| Profilo di jiyu人生路漫漫,快乐先行FotoBlogElenchi | Guida |
|
07 maggio 关于汇编语言内存寻址方式浅析(转)指令操作数的寻址方式
一、与数据有关,寻找参加操作的数据(8种---->7种基本方式+字符串寻址) ★涉及的一些概念 DISP/16位:AX(累加器),BX(基侄寄存器),CX(计数器),DX(数据与地址寄存器),SP(堆栈指针),BP(基址指针),SI(源变址器),DI(目的变址器) DISP/8位:AH(高8位),AL(低8位),BH,BL,CH,CL.DH,DL IP指令指针,存放代码段中的偏移地址;EA偏移地址,段内相对地址,有效地址 CS代码段,SS堆栈段,DS数据段,ES附加段 堆栈:方便事项程序要求保留和恢复有关信息的特殊存储部件,是一种数据结构。 pws(状态):CF(进位),PF(奇偶),SF(符号),OF(溢出),ZF(零),DF(方向),IF(中断),TF(跟踪) PA:20位物理地址 ;MOV传送 1、立即寻址 用来表示常数 MOV AX,1946H;1946H(立即数)-->AX 2、寄存器寻址 MOV AX,CX ;cx-->ax 3、直接寻址 MOV BX,[1000H] ;[1000H]→EA,操作数默认DS MOV AX,ES:VAR ;越段前缀 4、寄存器间接寻址 EA=BX∨SI∨DI∨BP;∨表示或者 a、PA=DS×16+{BX∨SI∨DI} b、PA=SS×16+BP c、PA=越段寄存器×16+{BX∨SI∨DI∨BP} 5、寄存器相对寻址 直接变址寻址 ┍BX┑ EA=├SI┥+{DISP} ├DI┥ ┕BP┚ mov ax,count[si] ;ea=count+si,(ea)→ax,约定为DS mov al,es:string[bp] ;越段前缀 6、基址变址寻址 使用数组和表格 EA={BX∨BP}+{SI∨DI} pA=DS×16+BX+{SI∨DI} pA=SS×16+BP+{SI∨DI} mov cx,es:[bx][di] mov ax,[bx][si] ;ea=bx+si,ea→ax 7、相对基址变址寻址 EA={BX∨BP}+{SI∨DI}+{DISP} mov ax,array[bx][si] ;ea=array+bx+si,ea→ax 8、字符串寻址 movsb ;([si])=>([di]),si+1=>si,di+1=>di ;源=>目,可理解为mov [di],[si] 我对寻址的一些分析看看对大家对他的理解有没有帮助。 物理地址(PA)=段地址+偏移地址(EA) =段寄存器的内容×16+偏移地址 =约定默认段地址×16+偏移地址 =越段地址×16+偏移地址 1、立即寻址 A→B,A就是PA(物理地址)可以直接给B 2、寄存器寻址 A→B,A(寄存器)的值是PA可以给B 3、直接寻址 A→B,A是EA,EA=确定的寄存器的值,由EA得到PA,然后给B 4、寄存器间接寻址 A→B,A是EA,EA=变动的寄存器的值,由EA得到PA,然后给B 5、寄存器相对寻址 A→B,A是EA,EA=变动的寄存器的值+DISP的值,由EA得到PA,然后给B 6、基址变址寻址 A→B,A是EA,EA=变动的寄存器的值+另一变动的寄存器的值,由EA得到PA ,然后给B 7、相对基址变址寻址 A→B,A是EA,EA=变动的寄存器的值+另一变动的寄存器的值+DISP的值, 由EA得到PA,然后给B 8、字符串寻址 A→B,A源PA,然后给B(目的pA) 理解寻址方式的关键是EA的值是什么和怎样由EA得到PA,方式4,5,6,7容易混淆,我这样解释可能不科学,但能达到明白它的意思就行。4和3的区别是EA=变动的寄存器的值,5在4的基础上加了DISP的值,6相当于2个5相加(EA=变动的寄存器的值+另一变动的寄存器的),7相当于5+6,哈哈,都什么和什么呀。 CommentiPer aggiungere un commento, accedi con il tuo Windows Live ID (se utilizzi Hotmail, Messenger o Xbox LIVE possiedi già un Windows Live ID). Accedi Non hai ancora un Windows Live ID? Registrati Riferimenti (9)L'URL di riferimento per questo intervento è: http://jiyucn.spaces.live.com/blog/cns!1666B1A866E4B74C!495.trak Blog che fanno riferimento a questo intervento
|
|
|