汇编语言(第三版)王爽著 的十二个实验: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. 小端序:数据的高位字节存放在地址的高端,低位字节存放在地址的低端
记忆方式:
- 大端序:是按照数字的书写顺序进行存储的。
- 小端序:是颠倒书写顺序进行存储的。
涉及大小端的问题,可以记为:“小高高,小弟弟( 低低 )”。( 这是记小端模式的,有点黄,不过好记!那么大端模式就和这个相反)
[bx] 定位内存单元
7.5 [bx + idata] 定位内存单元
汇编代码验证:
assume cs:codesg, ds:datasgdatasg segmentdb 16 dup (0) ;db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
datasg endscodesg segmentstart: mov ax,datasgmov ds,axmov ax,190mov ds:[0],axmov ax,6mov ds:[2],axmov ax,0mov ax,ds:[0]mov bx,ds:[1]mov cx,ds:[2]mov ax, 4c00hint 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 不同寻址方式灵活应用
寻址方式 总结