|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 云野 于 2017-7-13 19:32 编辑
一、关于存储器存储的基本知识
1.存储单元的物理地址:为了便于读写信息,内存中按照字节编址即每个字节有一个唯一编号,该编号对应该单元的物理地址。
注意:字节编址、二进制表示、十六进制书写
-存储器以字节(8bit)为单位
-每个字节有唯一的地址编码
-对于字低位字节存入低地址、高位字节存入高地址。对字双字四字数据段等地址一律以最低字节地址表示
逻辑地址:段地址和偏移地址统称逻辑地址
括号表示单元的内容
2.little edian (小端序)与 big edian(大端序)
little edian:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
big edian:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
目前Intel的80x86系列芯片是唯一还在坚持使用小端的芯片,ARM芯片默认采用小端,但可以切换为大端;而MIPS等芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据普遍采用的都是大端。
3.存储器地址的分段:解决了在16位字长的机器里怎么提供20位地址的问题(8086/8088)
段起始地址(段基址):每一小段起始地址的高16位(低4位为0)
偏移地址(有效地址:EA):段内相对于段起始地址的偏移值、 64K 范围内的任意字节(0000H-FFFFH)
4.实模式寻址方式:
采用16位段地址和16位地址偏移形成20位物理地址。最大寻址空间1MB,最大分段为64KB的存储器寻址方式。
16d×段基址 + 偏移地址(EA) = 物理地址(PA)
16位 16位 20位
5.保护模式寻址方式:
采用16位段地址和32位偏移地址形成32位物理地址。最大寻址空间为4GB,最大分段为4GB的存储器寻址方式。
——支持多任务处理功能 、支持虚拟存储器特性
注:80X86中除8086/8088只能在实模式下工作外、其他微处理器均可在实模式下或保护模式下工作。
二、寻址方式
*****寻址的中心问题如何确定“偏移地址”的值*********
1.与数据有关的寻址方式:
立即寻址 MOV AX , 3069H
寄存器寻址 MOV AL , BH
直接寻址 MOV AX , [2000H] EA=位移量
寄存器间接寻址 MOV AX , [BX] EA=基址/变址
寄存器相对寻址 MOV AX , COUNT[SI] EA=基址/变址+位移量
基址变址寻址 MOV AX , [BP][DI] EA=基址+变址
相对基址变址寻址 MOV AX , MASK[BX][SI] EA=基址+变址+位移量
基址比例变址寻址 MOV EBX,[EAX][EDX*8] EA=基址+变址×比例因子
相对基址比例变址寻址 MOV EAX,TABLE[EBP][EDI*4] EA=基址+变址×比例因子+位移量
******立即寻址方式和直接寻址方式的书写格式不同,直接寻址的地址要写在方括号“[]”内。*******
******寄存器寻址:操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定。*******
******以下三种情况不允许使用段超越前缀*******
①串处理指令的目的串、ES段
②取值指令、CS段
③PUSH、POP指令、SS段。
2.与转移地址有关的寻址方式:
用来确定转移指令及转子(call)指令的转向地址。转移地址是由各种寻址方式得到的有效地址和段地址相加而成的,有效地址存入IP寄存器中,段地址指定为CS段寄存器内容。
段内寻址
段内直接寻址 JMP NEAR PTR NEXT
段内间接寻址 JMP TABLE [ BX ]
段间寻址
段间直接寻址 JMP FAR PTR NEXT
段间间接寻址 JMP DWORD PTR [ BX ]
例: 已知: TABLE=20A2H ,(BX)=1256H ,(SI)=528EH,(DS)=2000H ,(232F8H)= 3280H ,(264E4H)=2450H
JMP BX ; (IP)=1256H
JMP WORD PTR TABLE[BX] ; (IP)=3280H
JMP WORD PTR [BX][SI] ; (IP)=2450H
例: JMP DWORD PTR [INTERS+BX],若:DS=3000H,BX=1200H,INTERS=0020H,
则:存储单元的物理地址PA=30000+0020+1200=31200H
指令执行前:CS=0000H,IP=1000H;
(31220H)=40H,(31221)=01H,(31222H)=00H,(31223)=10H。
指令执行后:CS=1000H,IP=0140H:
(31220H)=40H,(31221)=01H,(31222H)=00H,(31223)=10H。
|
评分
-
查看全部评分
|