云野 发表于 2017-7-13 19:45:19

汇编笔记之存储器的存储与寻址方式

本帖最后由 云野 于 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.与数据有关的寻址方式:

                              立即寻址                                 MOVAX , 3069H                     
                              寄存器寻址                              MOVAL , BH
                              直接寻址                                 MOVAX ,                         EA=位移量
                              寄存器间接寻址                     MOVAX ,                               EA=基址/变址
                              寄存器相对寻址                     MOVAX , COUNT                     EA=基址/变址+位移量
                              基址变址寻址                        MOVAX ,                         EA=基址+变址
                              相对基址变址寻址                   MOVAX , MASK                EA=基址+变址+位移量
                              基址比例变址寻址                   MOVEBX,            EA=基址+变址×比例因子
                              相对基址比例变址寻址            MOVEAX,TABLE   EA=基址+变址×比例因子+位移量


******立即寻址方式和直接寻址方式的书写格式不同,直接寻址的地址要写在方括号“[]”内。*******

******寄存器寻址:操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定。*******

******以下三种情况不允许使用段超越前缀*******
            ①串处理指令的目的串、ES段
            ②取值指令、CS段
            ③PUSH、POP指令、SS段。

2.与转移地址有关的寻址方式:
        用来确定转移指令及转子(call)指令的转向地址。转移地址是由各种寻址方式得到的有效地址和段地址相加而成的,有效地址存入IP寄存器中,段地址指定为CS段寄存器内容。

段内寻址
       段内直接寻址    JMP    NEAR PTRNEXT
       段内间接寻址    JMP    TABLE [ BX ]

段间寻址
       段间直接寻址    JMP    FAR PTRNEXT
       段间间接寻址    JMP    DWORD PTR [ BX ]

例:   已知: TABLE=20A2H ,(BX)=1256H ,(SI)=528EH,(DS)=2000H ,(232F8H)= 3280H ,(264E4H)=2450H
            
                     JMPBX                                                 ; (IP)=1256H
            
                     JMPWORD PTRTABLE               ; (IP)=3280H
            
                     JMPWORD PTR                  ; (IP)=2450H

例:   JMP DWORDPTR   ,若: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]
查看完整版本: 汇编笔记之存储器的存储与寻址方式