0
点赞
收藏
分享

微信扫一扫

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

 

汇编语言(第三版)王爽著 的十二

 

 

大小端 字节对齐

 

对于 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处理器还可以由硬件来选择是大端模式还是小端模式。


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

记忆方式:

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

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

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

 

 

 

[bx]

 

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

 

 

 

7.5 [bx + idata]

 

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

汇编代码验证:

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章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_04

 

 

 

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

 

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

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

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

 

 

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

 

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

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

 

 

使用 [ 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

 

 

 



举报

相关推荐

0 条评论