tft每日頭條

 > 生活

 > 彙編對應的端口地址範圍

彙編對應的端口地址範圍

生活 更新时间:2024-11-30 03:28:48
存儲器

  存儲器(Memory)是現代信息技術中用于保存信息的記憶設備。其概念很廣,有很多層次,在數字系統中,隻要能保存二進制數據的都可以是存儲器;在集成電路中,一個沒有實物形式的具有存儲功能的電路也叫存儲器,如RAM、FIFO等;在系統中,具有實物形式的存儲設備也叫存儲器,如内存條、TF卡等。

  計算機中全部信息,包括輸入的原始數據、計算機程序、中間運行結果和最終運行結果都保存在存儲器中。它根據控制器指定的位置存入和取出信息。有了存儲器,計算機才有記憶功能,才能保證正常工作。計算機中的存儲器按用途存儲器可分為主存儲器(内存)和輔助存儲器(外存),也有分為外部存儲器和内部存儲器的分類方法。外存通常是磁性介質或光盤等,能長期保存信息。内存指主闆上的存儲部件,用來存放當前正在執行的數據和程序,但僅用于暫時存放程序和數據,關閉電源或斷電,數據會丢失。

尋址

  尋址是數據恢複技術的基礎,是定位數據和扇區的關鍵。尋址這個概念比較抽象,簡單的說是磁頭在盤片上定位數據的一個過程。如果你想找到你的計算機中的一個文件,你可能會在Windows中先打開我的電腦、分區、文件夾,再打開你要找的文件。這是表面的尋找文件的過程,而磁頭在盤片的尋找過程就是尋址。 尋址在數據恢複中為什麼非常重要?因為當數據出現丢失的情況後,你在我的電腦、分區、文件夾下就找不到這個文件了,甚至找不到文件夾和分區。

  計算機有多種尋址方式,如立即數尋址方式,寄存器尋址,存儲器尋址方式,與I/0端口有關的尋址方式,又包括直接端口尋址和間接端口尋址。

存儲器尋址方式有哪些?

  存儲器尋址方式的操作數存放在主存儲器中,用其所在主存的位置表示操作數。在這種尋址方式下,指令中給出的是有關操作數的主存地址信息。8088的存儲器空間是分段管理的。程序設計時采用邏輯地址;由于段地址在默認的或用段超越前綴指定的段寄存器,所以采用偏移地址,稱之為有效地址(EffecTIve Address, EA) 1. 直接尋址

  在這種尋址方式下,指令中直接包含了操作數的有效地址,跟在指令操作碼之後。其默認的段地址在DS段寄存器中,可以采用段超越前綴。

  例 将數據段中偏移地址2000H處的内存數據送至AX寄存器。 MOV AX, [2000H]

  該指令中給定了有效地址2000H, 默認與數據段寄存器DS一起構成操作數所在存儲單元的物理地址。

更多linux内核視頻教程文檔資料免費領取後台私信【内核】自行獲取.

彙編對應的端口地址範圍(解決彙編中的尋址方式)1

彙編對應的端口地址範圍(解決彙編中的尋址方式)2

Linux内核源碼/内存調優/文件系統/進程管理/設備驅動/網絡協議棧-學習視頻教程-騰訊課堂

七種尋址方式(立即尋址、寄存器尋址)一、立即尋址方式

操作數作為指令的一部分而直接寫在指令中,這種操作數稱為立即數,這種尋址方式也就稱為立即數尋址方式。

立即數可以是8位、16位或32位,該數值緊跟在操作碼之後。如果立即數為16位或32位,那麼,它将按“高高低低”的原則進行存儲。例如:

MOV AH, 80H   ADD AX, 1234H   MOV ECX, 123456HMOV B1, 12H   MOV W1, 3456H   ADD D1, 32123456H

其中:B1、W1和D1分别是字節、字和雙字單元。

以上指令中的第二操作數都是立即數,在彙編語言中,規定:立即數不能作為指令中的第二操作數。該規定與高級語言中“賦值語句的左邊不能是常量”的規定相一緻。

立即數尋址方式通常用于對通用寄存器或内存單元賦初值。

二、寄存器尋址方式

  指令所要的操作數已存儲在某寄存器中,或把目标操作數存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助憶符)的尋址方式稱為寄存器尋址方式。指令中可以引用的寄存器及其符号名稱如下:  8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;  16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;  32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。寄存器尋址方式是一種簡單快捷的尋址方式,源和目的操作數都可以是寄存器。

1、源操作數是寄存器尋址方式  如:ADD VARD, EAX  ADD VARW, AX   MOV VARB, BH等。  其中:VARD、VARW和VARB是雙字,字和字節類型的内存變量。在第4章将會學到如何定義它們。

2、目的操作數是寄存器尋址方式  如:ADD BH, 78h    ADD AX, 1234h   MOV EBX, 12345678H等。

3、源和目的操作數都是寄存器尋址方式  如:MOV EAX, EBX   MOV AX, BX     MOV DH, BL等。

  由于指令所需的操作數已存儲在寄存器中,或操作的結果存入寄存器,這樣,在指令執行過程中,會減少讀/寫存儲器單元的次數,所以,使用寄存器尋址方式的指令具有較快的執行速度。通常情況下,我們提倡在編寫彙編語言程序時,應盡可能地使用寄存器尋址方式,但也不要把它絕對化。

七種尋址方式(直接尋址方式)

指令所要的操作數存放在内存中,在指令中直接給出該操作數的有效地址,這種尋址方式為直接尋址方式。

在通常情況下,操作數存放在數據段中,所以,其物理地址将由數據段寄存器DS和指令中給出的有效地址直接形成,但如果使用段超越前綴,那麼,操作數可存放在其它段。

例:假設有指令:MOV BX, [1234H],在執行時,(DS)=2000H,内存單元21234H的值為5213H。問該指令執行後,BX的值是什麼?

解:根據直接尋址方式的尋址規則,把該指令的具體執行過程用下圖來表示。

從圖中,可看出執行該指令要分三部分:

由于1234H是一個直接地址,它緊跟在指令的操作碼之後,随取指令而被讀出;

訪問數據段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存儲單元的物理地址:21234H;

取單元21234H的值5213H,并按“高高低低”的原則存入寄存器BX中。

所以,在執行該指令後,BX的值就為5213H。

由于數據段的段寄存器默認為DS,如果要指定訪問其它段内的數據,可在指令中用段前綴的方式顯式地書寫出來。

下面指令的目标操作數就是帶有段前綴的直接尋址方式。

MOV ES:[1000H], AX

直接尋址方式常用于處理内存單元的數據,其操作數是内存變量的值,該尋址方式可在64K字節的段内進行尋址。

注意:立即尋址方式和直接尋址方式的書寫格式的不同,直接尋址的地址要寫在括号“[”,“]”内。在程序中,直接地址通常用内存變量名來表示,如:MOV BX, VARW,其中,VARW是内存字變量。

試比較下列指令中源操作數的尋址方式(VARW是内存字變量):  MOV AX, 1234H MOV AX, [1234H] ;前者是立即尋址,後者是直接尋址  MOV AX, VARW MOV AX, [VARW] ;兩者是等效的,均為直接尋址

七種尋址方式(寄存器間接尋址方式)

操作數在存儲器中,操作數的有效地址用SI、DI、BX和BP等四個寄存器之一來指定,稱這種尋址方式為寄存器間接尋址方式。該尋址方式物理地址的計算方法如下:

在不使用段超越前綴的情況下,有下列規定:

若有效地址用SI、DI和BX等之一來指定,則其缺省的段寄存器為DS;若有效地址用BP來指定,則其缺省的段寄存器為SS(即:堆棧段)。

例:假設有指令:MOV BX,[DI],在執行時,(DS)=1000H,(DI)=2345H,存儲單元12345H的内容是4354H。問執行指令後,BX的值是什麼?

解:根據寄存器間接尋址方式的規則,在執行本例指令時,寄存器DI的值不是操作數,而是操作數的地址。該操作數的物理地址應由DS和DI的值形成,即:

PA=(DS)16 DI=1000H16 2345H=12345H。

所以,該指令的執行效果是:把從物理地址為12345H開始的一個字的值傳送給BX。

其執行過程如圖所示。

七種尋址方式(寄存器相對尋址方式)

操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)或變址寄存器(SI、D

I)的内容和指令中的8位/16位偏移量之和。其有效地址的計算公式如公式所示。

在不使用段超越前綴的情況下,有下列規定:

若有效地址用SI、DI和BX等之一來指定,則其缺省的段寄存器為DS;

若有效地址用BP來指定,則其缺省的段寄存器為SS。指令中給出的8位/16位偏移量用補碼表示。在計算有效地址時,如果偏移量是8位,則進行符号擴展成16位。當所得的有效地址超過0FFFFH,則取其64K的模。

例:假設指令:MOV BX, [SI 100H],在執行它時,(DS)=1000H,(SI)=2345H,内存單元12445H的内容為2715H,問該指令執行後,BX的值是什麼?

解:根據寄存器相對尋址方式的規則,在執行本例指令時,源操作數的有效地址EA為:

EA=(SI) 100H=2345H 100H=2445H

該操作數的物理地址應由DS和EA的值形成,即:

PA=(DS)16 EA=1000H16 2445H=12445H。

所以,該指令的執行效果是:把從物理地址為12445H開始的一個字的值傳送給BX。

七種尋址方式(基址加變址尋址方式)

操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)和一個變址寄存器(SI、DI)的内容之和。其有效地址的計算公式如公式所示。

在不使用段超越前綴的情況下,規定:如果有效地址中含有BP,則缺省的段寄存器為SS;否則,缺省的段寄存器為DS。

例:假設指令:MOV BX, [BX SI],在執行時,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存單元12111H的内容為1234H。問該指令執行後,BX的值是什麼?

解:根據基址加變址尋址方式的規則,在執行本例指令時,源操作數的有效地址EA為:

EA=(BX) (SI)=2100H 0011H=2111H

該操作數的物理地址應由DS和EA的值形成,即:

PA=(DS)16 EA=1000H16 2111H=12111H

所以,該指令的執行效果是:把從物理地址為12111H開始的一個字的值傳送給BX。

七種尋址方式(相對基址加變址尋址方式)

操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)的值、一個變址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的計算公式如公式所示。

在不使用段超越前綴的情況下,規定:如果有效地址中含有BP,則其缺省的段寄存器為SS;否則,其缺省的段寄存器為DS。

指令中給出的8位/16位偏移量用補碼表示。在計算有效地址時,如果偏移量是8位,則進行符号擴展成16位。當所得的有效地址超過0FFFFH,則取其64K的模。

例:假設指令:MOV AX, [BX SI 200H],在執行時,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存單元12310H的内容為1234H。問該指令執行後,AX的值是什麼?

解:根據相對基址加變址尋址方式的規則,在執行本例指令時,源操作數的有效地址EA為:

EA=(BX) (SI) 200H=2100H 0010H 200H=2310H

該操作數的物理地址應由DS和EA的值形成,即:

PA=(DS)16 EA=1000H16 2310H=12310H

所以,該指令的執行效果是:把從物理地址為12310H開始的一個字的值傳送給AX。

從相對基址加變址這種尋址方式來看,由于它的可變因素較多,看起來就顯得複雜些,但正因為其可變因素多,它的靈活性也就很高。比如:

用D1[i]來訪問一維數組D1的第i個元素,它的尋址有一個自由度,用D2[i][j]來訪問二維數組D2的第i行、第j列的元素,其尋址有二個自由度。多一個可變的量,其尋址方式的靈活度也就相應提高了。

相對基址加變址尋址方式有多種等價的書寫方式,下面的書寫格式都是正确的,并且其尋址含義也是一緻的。

MOV AX, [BX SI 1000H]   MOV AX, 1000H[BX SI]MOV AX, 1000H[BX][SI]    MOV AX, 1000H[SI][BX]

但書寫格式BX [1000 SI]和SI[1000H BX]等是錯誤的,即所用寄存器不能在“[“,”]”之外,該限制對寄存器相對尋址方式的書寫也同樣起作用。

相對基址加變址尋址方式是以上7種尋址方式中最複雜的一種尋址方式,它可變形為其它類型的存儲器尋址方式。下表列舉出該尋址方式與其它尋址方式之間的變形關系。

什麼是存儲器尋址?

比如MOV AL, [BP]AL和BP都是寄存器,為什麼叫儲存器尋址啊?存儲器 尋址是 寄存器 與存儲器間的 尋址方式 。使用存儲器尋址的 指令 ,其 操作數 通常存放在 代碼段 之外的存儲區,如 數據段 、 堆棧段 和附加段。指令中,通常給出的是 存儲單元 地址或産生存儲單元地址的有關信息。執行指令時,需要首先計算出數據存放的 有效地址 ,接着計算出其在存儲器中的 物理地址 ,然後訪問存儲器,讀取數據,再執行指令規定的基本操作。

- - 内核技術中文網 - 構建全國最權威的内核技術交流分享論壇

轉載地址:解決彙編中的尋址方式! - 圈點 - 内核技術中文網 - 構建全國最權威的内核技術交流分享論壇

彙編對應的端口地址範圍(解決彙編中的尋址方式)3

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved