王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)

 

汇编语言(第三版)王爽著 的十二个实验:https://blog.csdn.net/OrangeHap/article/details/89791064

 

 

大小端 字节对齐

 

对于 arm,intel 这种 x86 构架的复杂指令 CPU,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐。
但对于 unix 服务器的 CPU,更多是采用大端对齐的方式存放整数。

 

为什么会有 大端( 高尾端 ) 和 小端( 低尾端 )?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的 char之外,还有 16bit 的 short 型,32bit 的 long 型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着如何将多个字节安排的问题。因此就导致了 大端存储模式小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEILC51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

参考:http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html

  • 1. 大端序:数据的高位字节存放在地址的低端,低位字节存放在地址的高端
  • 2. 小端序:数据的高位字节存放在地址的高端,低位字节存放在地址的低端

记忆方式:

  1. 大端序:是按照数字的书写顺序进行存储的。
  2. 小端序:是颠倒书写顺序进行存储的。

涉及大小端的问题,可以记为:“小高高,小弟弟( 低低”。( 这是记小端模式的,有点黄,不过好记那么大端模式就和这个相反

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第1张图片

 

 

 

[bx] 定位内存单元

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第2张图片

 

 

 

7.5 [bx + idata] 定位内存单元 

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第3张图片

汇编代码验证:

assume cs:codesg, ds:datasg


datasg segment
    db 16 dup (0)    
    ;db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
datasg ends

codesg segment
    start:        
        mov ax,datasg
        mov ds,ax
        
        mov ax,190
        mov ds:[0],ax
        
        mov ax,6
        mov ds:[2],ax
                
        mov ax,0
        mov ax,ds:[0]
        mov bx,ds:[1]
        mov cx,ds:[2]
        
        mov ax, 4c00h
        int 21h
codesg ends
end start

运行截图:

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第4张图片

 

 

 

7.6 使用 [bx + idata ] 方式进行 数组的处理

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第5张图片

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第6张图片

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第7张图片

 

 

7.7  si 和 di 寄存器( 和 bx 功能相近的寄存器

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第8张图片

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第9张图片

 

 

使用 [ bx (si 或者 di ) + idata ] 方式,使程序变得更简单

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第10张图片

 

 

7.8 [ bx + si ] 和 [ bx + di ]

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第11张图片

 

 

 

7.9 [ bx + si + idata ] [ bx + di + idata ] 

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第12张图片

 

 

7.10 不同寻址方式灵活应用

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第13张图片

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第14张图片

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第15张图片

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第16张图片

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第17张图片

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第18张图片

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第19张图片

 

 

 

寻址方式 总结

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_第20张图片

 

 

 

你可能感兴趣的:(汇编)