鱼C论坛

 找回密码
 立即注册
查看: 2869|回复: 0

[学习笔记] 汇编笔记之存储器的存储与寻址方式

[复制链接]
发表于 2017-7-13 19:45:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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、BXBP等四个寄存器之一来指定。*******

******以下三种情况不允许使用段超越前缀*******
            ①串处理指令的目的串、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。


评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
小甲鱼 + 4 + 4 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 21:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表