1. 程式人生 > >彙編筆記_第二章

彙編筆記_第二章


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的定址範圍為 00010H1000FH;

解:實體地址=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)