【汇编语言】镜像迁移能力之一通百通——由代码段和CS:IP的原理,掌握一类寄存器的使用
0 前言
你應(yīng)該知道8086CPU的物理地址形成方式及其原理,才能完成本文的學(xué)習(xí)。
1 內(nèi)存的分段
對于內(nèi)存,人們人為地將其劃分為一段一段的,比如代碼段和數(shù)據(jù)段等,特別注意,這是人為劃分的結(jié)果,方面人類使用,在物理器件上并不是真正的斷開了。
內(nèi)存的分段就好比這樣,人們
- 把代碼放在代碼段
- 把數(shù)據(jù)放在數(shù)據(jù)段
再強(qiáng)調(diào)一次,這是幫助人們和匯編語言編譯器區(qū)分,并不是真的把內(nèi)存切開,這是虛擬的分段。
1.1 代碼段
現(xiàn)在,我們以代碼段為例,來學(xué)習(xí)一些知識。
先給出以下這樣一部分匯編指令
mov ax,0000h // 占3個(gè)字節(jié) add ax,0123h // 占3個(gè)字節(jié) mov bx,ax // 占2個(gè)字節(jié) jmp bx // 占2個(gè)字節(jié)我們將這樣幾行代碼,稱為一個(gè)代碼段,假設(shè)我們使用內(nèi)存地址123B0H ~ 123B9H來存儲它。
對于地址123B0H,我們稱之為該代碼段的起始地址,它必須是16的整倍數(shù),它對應(yīng)的段地址是123BH。
該代碼段的長度為10個(gè)字節(jié)。
我們先介紹這些,請繼續(xù)往下看。
2 CS:IP
CS:Code Segment(代碼段寄存器)
IP:Instruction Pointer(指令指針寄存器)
這兩個(gè)寄存器都是16位的,由CS提供段地址,這個(gè)段地址對應(yīng)上一小節(jié)的123BH,由IP提供偏移地址。
CS:IP的意義是,將兩個(gè)16位的地址,在CPU內(nèi)部合成為20位地址,并輸出到外部,CS:IP合成的地址是對于內(nèi)存地址的,比如上一小節(jié)的123B0H,其公式是合成地址 = CS*16 + IP,比如123B0H = 123BH*16 + 0H
CS:IP所指向的內(nèi)存地址,代表這個(gè)內(nèi)存地址所存儲的二進(jìn)制信息是指令,然后會進(jìn)入CPU執(zhí)行該指令。
3 代碼段與CS:IP的聯(lián)系
這里給出了CS:IP、內(nèi)存地址、代碼段和匯編指令之間的對應(yīng)關(guān)系,建立起了CPU和內(nèi)存之間的聯(lián)系。
本文并不講解CS:IP的原理,是幫助你加深理解內(nèi)存和CPU操作之間的關(guān)系。
這里重點(diǎn)強(qiáng)調(diào):
- 先確定CS:CS寄存器存儲的是段地址,左移一位后(乘16),對應(yīng)的是代碼段的基礎(chǔ)地址
- 再確定IP:IP寄存器存儲的是段內(nèi)偏移地址,偏移地址是在基礎(chǔ)地址的基礎(chǔ)上,進(jìn)行偏移,以便于執(zhí)行代碼段中的各個(gè)指令。
需要注意的是,代碼段,以及其他段,最大的段長等于IP的最大值,這里是16位,也就是一個(gè)段最大2^16B = 64KB。
4 段地址和偏移地址的本質(zhì)
段地址有兩重含義:
偏移地址,更本質(zhì)的說法是段內(nèi)偏移地址,這里的段內(nèi)含義的某一代碼段內(nèi),例如上述實(shí)例
- 偏移0H,執(zhí)行mov ax,0000h
- 偏移3H,執(zhí)行add ax,0123h
- 偏移6H,執(zhí)行mov bx,ax
- 偏移8H,執(zhí)行jmp bx
5 鏡像遷移——掌握其他類型
對于類似的操作及其對應(yīng)關(guān)系,模式都一樣!,就好比
- 國家之下有省
- 省之下有市
- 市之下有縣
整體來看,同一層級的管理模式整體來說,是一樣的。
這里我需要說明,寄存器的能力是一樣的,就是暫存數(shù)據(jù),只不過其分工不同,做的事情不同,但是因?yàn)槠淠芰σ粯?#xff0c;因此只需要掌握一種模式,就可以進(jìn)行快速復(fù)制。
我們需要做的是,學(xué)好一個(gè)內(nèi)容,然后使用鏡像遷移的能力,復(fù)制成功的模式,這樣你就快速學(xué)會各種匯編操作。
你會發(fā)現(xiàn),以下內(nèi)容,你能夠快速掌握!
這里我直接引用了一個(gè)表格,請讀者按照CS:IP的模式,自行完成學(xué)習(xí),這里有一個(gè)可替換段地址,請自行查閱資料,這也是必備的能力。
總結(jié)
以上是生活随笔為你收集整理的【汇编语言】镜像迁移能力之一通百通——由代码段和CS:IP的原理,掌握一类寄存器的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算机网络】手动配置hosts文件解决
- 下一篇: 【计算机组成原理 数字逻辑 Veri