汇编语言(第三版)王爽著 的十二
大小端 字节对齐
对于 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. 小端序:数据的高位字节存放在地址的高端,低位字节存放在地址的低端
记忆方式:
- 大端序:是按照数字的书写顺序进行存储的。
- 小端序:是颠倒书写顺序进行存储的。
涉及大小端的问题,可以记为:“小高高,小弟弟( 低低 )”。( 这是记小端模式的,有点黄,不过好记!那么大端模式就和这个相反)
[bx]
7.5 [bx + idata]
汇编代码验证:
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.6 使用 [bx + idata ] 方式进行数组的处理
7.7 si 和 di 寄存器( 和 bx 功能相近的寄存器
使用 [ bx (si 或者 di ) + idata ]
7.8 [ bx + si ] 和 [ bx + di ]
7.9 [ bx + si + idata ] 和 [ bx + di + idata ]
7.10 不同寻址方式灵活应用
寻址方式 总结
标签:小端,定位,字节,mov,---,ax,内存地址,bx,ds From: https://blog.51cto.com/csnd/5956104