彙編筆記_第二章
title: 彙編筆記_第二章
date: 2018-12-25 14:39:23
tags:
- 筆記
categories: 組合語言
暫存器
8086暫存器組
一共14個暫存器
- 資料暫存器:AX , BX , CX , DX;
- 段暫存器:CS , DS , ES , SS;
- 地址暫存器:SI , DI , SP , BP;
- 控制暫存器: IP , PSW(FLAGS)
通用暫存器
- 所有的暫存器都是16位的,可以存放兩個位元組;
- AX , BX , CX , DX通常用來存放一般資料,被稱為通用暫存器;
- 一個16位暫存器所能儲存的資料最大值為: \(2^{16} - 1\)
段暫存器
- 段暫存器就是提供段地址的,訪問記憶體時,有著4個段暫存器提供記憶體單元的段地址;
- 4個段暫存器:CS , DS , SS , ES;
記憶體地址的分配
實體地址的形成
- 8086有 20位 地址匯流排,可以傳送20位地址,定址能力為1M;
- 8086內部為16位結構,地址16位;
- 儲存器採用 分段管理,將儲存器劃分位若干 邏輯段,每段最大64K位元組單元,最小16B;
- 邏輯段的大小可變;
- 記憶體單元地址的描述: 段基址:偏移量;
- 地址加法器合成物理地址的方法: 實體地址=段地址*16 + 偏移地址;
- 在儲存器中,每16個位元組單元為一小段;
- 例如:某記憶體單元的地址為1234:5678H,則實體地址為 \(12340H + 5678H = 179B8H\);
- CPU可以用不同的段地址和偏移地址形成同一個實體地址;
段的型別
- 邏輯段有四種類型: 程式碼段 、 資料段 、 附加段 、 堆疊段;
段名 | 段暫存器 | 偏移地址 |
---|---|---|
程式碼段 | CS | IP |
資料段 | DS | BX,SI,DI等地址暫存器 |
附加段 | ES | BX,SI,DI等地址暫存器 |
堆疊段 | SS | SP或BP |
- 例題:給定段地址為0001H,僅通過變化偏移地址定址,CPU的定址範圍為 00010H 到 1000FH;
解:實體地址=SA*16+EA
EA變化範圍為0H~FFFFH
所以實體地址的變化範圍為:\((0001H*16 + 0H)~(0001H*16 + FFFFH)\);
就是00010H~1000FH;
- 例題:有一資料存放在記憶體20000H單元中,現給定段地址SA,若想用偏移地址尋找到此單元,SA滿足的條件是:最小是1001H,最大為2000H;
解;
\[\mathrm{ 20000H=SA*16+EA }\]
\[\mathrm{ SA = (20000H - EA)/16 }\]
\[\mathrm{ SA = 2000H - EA/16 }\]
\[\mathrm{ EA\in[0000H , FFFFH] }\]
\[\mathrm{ SA\in[1001H , 2000H] }\]
特殊暫存器CS和IP
- CS為 程式碼段暫存器
- IP為 指令指標暫存器
- CPU將CS:IP指向的記憶體單元中的內容看作指令
- 8086pc工作過程:1、從CS:IP指向的記憶體的單元讀取指令,讀取的指令進入指令緩衝器;2、IP=IP+所讀取的指令的長度,從而指向下一條指令;3、執行指令,轉到步驟1;
- 加電啟動或復位後CS=FFFFH , IP=0000H
- 修改CS,IP的值:
jmp 段地址:偏移地址//同時修改CS、IP
,
jmp 暫存器//用暫存器中的值修改IP
外部裝置及IO地址空間
- 每個外部裝置的介面都有一組暫存器,每個暫存器都有一個埠地址;
- 8086提供的IO地址匯流排寬度總是16位的,所以允許的最大的IO定址空間位64KB,定址範圍為0000H~FFFFH;
- pc機中,由於IO地址空間是獨立編址的,所以系統需要提供獨立的 訪問外設指令(IO指令):IN,OUT
指令的定址方式
運算元的實體地址=段地址*10H + EA
立即定址方式
mov al,5
mov ax,3060H
暫存器定址方式
mov ax,bx
直接定址方式
儲存器讀操作
mov ax,ds:[2000H]
儲存器寫操作
mov ds:[4000H],ax
符號地址
mov ax,[value]
段超越
mov ax,es:[value]
間接定址方式
mov ax,[bx]
\(運算元的實體地址=(ds)*10H + \{(bx) , (si) , (di)\};\)
\(運算元的實體地址=(ss)*10H + (bp);\)
四個間接定址暫存器:BX , BP , SI , DI;
mov ax,[bx]
指令執行前:
\(DS = 1500H\)
\(BX = 4580H\)
\(AX = 1010H\)
\(19580H = 64H\)
\(19581H = 23H\)
\(EA = BX = 4580H\)
指令執行後:
\(AX = 2364H\)
暫存器相對定址方式
mov AX,TOP[SI]
指令執行前;
\(DS =1500H\)
\(SI = 7310H\)
\(AX = 1010H\)
\(TOP = 25H\)
\(1C335H = 28H\)
\(1C336H = 24H\)
\(EA = TOP + SI = 7335H\)
指令執行後;
\(AX = 2428H\)
基址變址定址方式
mov AX,[BX + DI]
執行前:
\(DS = 2100H\)
\(BX = 0158H\)
\(DI = 10A5H\)
\(AX = 0FFFFH\)
\(221FDH = 34H\)
\(221FE - 12H\)
有效地址:
\(EA=BX+DI=0158+10A5=11FDH\)
\(實體地址=21000 + 11FD = 221FDH\)
執行後:
\(AX=1234H\)
相對基址變址定址方式
mov AX,MASJ[BX[SI]
mov AX,[MASK + BX + SI]
mov AX,[BX + SI].MASK
有效地址:
\(EA = MASK + BX + SI\)
\(實體地址=DS + EA\)
看不懂233,,,,,
(end)