王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)
?
匯編語言(第三版)王爽著 的十二個實驗:https://blog.csdn.net/OrangeHap/article/details/89791064
?
?
大小端 字節(jié)對齊
?
對于 arm,intel 這種 x86 構(gòu)架的復(fù)雜指令 CPU,整數(shù)在內(nèi)存中是倒著存放的,低地址放低位,高地址放高位,小端對齊。
但對于 unix 服務(wù)器的 CPU,更多是采用大端對齊的方式存放整數(shù)。
?
為什么會有 大端(?高尾端?) 和 小端(?低尾端?)?
這是因為在計算機系統(tǒng)中,我們是以字節(jié)為單位的,每個地址單元都對應(yīng)著一個字節(jié),一個字節(jié)為 8bit。但是在C語言中除了8bit的 char之外,還有 16bit 的 short 型,32bit 的 long 型(要看具體的編譯器),另外,對于位數(shù)大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個字節(jié),那么必然存在著如何將多個字節(jié)安排的問題。因此就導(dǎo)致了 大端存儲模式 和 小端存儲模式。例如一個16bit的short型x,在內(nèi)存中的地址為0x0010,x的值為0x1122,那么0x11為高字節(jié),0x22為低字節(jié)。對于大端模式,就將0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,剛好相反。我們常用的X86結(jié)構(gòu)是小端模式,而KEILC51則為大端模式。很多的ARM,DSP都為小端模式。有些ARM處理器還可以由硬件來選擇是大端模式還是小端模式。
參考:http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html
- 1. 大端序:數(shù)據(jù)的高位字節(jié)存放在地址的低端,低位字節(jié)存放在地址的高端
- 2. 小端序:數(shù)據(jù)的高位字節(jié)存放在地址的高端,低位字節(jié)存放在地址的低端
記憶方式:
涉及大小端的問題,可以記為:“小高高,小弟弟( 低低 )”。(?這是記小端模式的,有點黃,不過好記!那么大端模式就和這個相反)
?
?
?
[bx]?定位內(nèi)存單元
?
?
?
?
7.5 [bx + idata]?定位內(nèi)存單元?
?
匯編代碼驗證:
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 ]?方式進行 數(shù)組的處理
?
?
?
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?不同尋址方式靈活應(yīng)用
?
?
?
?
?
?
尋址方式 總結(jié)
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 中使用 jsonpath
- 下一篇: org.dom4j.DocumentFa