① 請問有沒有 「mov 內存單元,內存單元」「mov 段寄存器,段寄存器」
內存到內存是不可能的。段寄存器到段寄存器也是不可能的。
MOV 變數單元 常量/變數(基本原則)
以下均是合法的MOV指令:
MOV 內存變數 立即數 (單向)
MOV 內存變數 一般寄存器 (雙向)
MOV 內存變數 DS/ES/SS/FS/GS(特殊寄存器) (雙向)
MOV 內存變數 CS(代碼段寄存器) (單向)
MOV 一般寄存器 CS (單向)
MOV 一般寄存器 DS/ES/SS/FS/GS(雙向)
MOV 一般寄存器 一般寄存器 (雙向)
MOV 一般寄存器 立即數 (單向)
在32位匯編里,CS已不是變數,而是由系統自動指定。
② 段寄存器是在CPU內部還是存儲器里如果是在cpu內,那麼cpu訪問存儲器時,存儲器地址由段寄存器,ip決定
你問的是8086架構的CPU吧,看的很眼熟,很多年都沒接觸了。8086中有4個16位的段寄存器:CS、DS、SS、ES,分別用於存放可執行代碼的代碼段、數據段、堆棧段和其他段的基地址。
其中,段寄存器CS指向存放程序的內存段,IP是用來存放下條待執行的指令在該段的偏移量,把它們合在一起可在該內存段內取到下次要執行的指令。
段寄存器SS指向用於堆棧的內存段,SP是用來指向該堆棧的棧頂,把它們合在一起可訪問棧頂單元。
段寄存器DS指向數據段,ES指向附加段,在存取操作數時,二者之一和一個偏移量合並就可得到存儲單元的物理地址。通常,預設的數據段寄存器是DS。
③ CPU存儲器的段寄存器
段寄存器是根據內存分段的管理模式而設置的。內存單元的物理地址由段寄存器的值和一個偏移量組合而成的,這樣可用兩個較少位數的值組合成一個可訪問較大物理空間的內存地址。
CPU內部的段寄存器:
CS——代碼段寄存器(Code Segment Register),其值為代碼段的段值;
DS——數據段寄存器(Data Segment Register),其值為數據段的段值;
ES——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
SS——堆棧段寄存器(Stack Segment Register),其值為堆棧段的段值;
FS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
GS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值。
在16位CPU系統中,它只有4個段寄存器,所以,程序在任何時刻至多有4個正在使用的段可直接訪問;在32位微機系統中,它有6個段寄存器,所以,在此環境下開發的程序最多可同時訪問6個段。
32位CPU有兩個不同的工作方式:實方式和保護方式。在每種方式下,段寄存器的作用是不同的。有關規定簡單描述如下:
實方式: 前4個段寄存器CS、DS、ES和SS與先前CPU中的所對應的段寄存器的含義完全一致,內存單元的邏輯地址仍為「段值:偏移量」的形式。為訪問某內存段內的數據,必須使用該段寄存器和存儲單元的偏移量。
保護方式: 在此方式下,情況要復雜得多,裝入段寄存器的不再是段值,而是稱為「選擇子」(Selector)的某個值。段寄存器的具體作用在此不作進一步介紹了,有興趣的讀者可參閱其它科技資料。
④ CPU中有哪些主要寄存器
不同架構的CPU寄存器是不一樣的,即使是同一架構,不同型號的CPU也有差別。這里以80386的CPU為例,寄存器分為6類。其中可供應用程序員使用的為通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)、段寄存器(CS、DS、SS、ES、FS、GS)和標志和控制寄存器(EIP、EFLAGS)。
可以指定任何通用寄存器的內容作為操作數的地址,以及在形成地址的過程中作如加法或減法這樣簡單的算術運算。但像串的運算和雙精度的乘法和除法操作這類較復雜的操作,必須要從固定的寄存器中取一個或多個操作數。
寄存器的特點:
在集成電路設計中,寄存器可分為電路內部使用的寄存器和充當內外部介面的寄存器這兩類。內部寄存器不能被外部電路或軟體訪問,只是為內部電路的實現存儲功能或滿足電路的時序要求。而介面寄存器可以同時被內部電路和外部電路或軟體訪問,CPU中的寄存器就是其中一種,作為軟硬體的介面,為廣泛的通用編程用戶所熟知。
CPU中至少要有六類寄存器:指令寄存器(IR)、程序計數器(PC)、地址寄存器(AR)、數據寄存器(DR)、累加寄存器(AC)、程序狀態字寄存器(PSW)。這些寄存器用來暫存一個計算機字,其數目可以根據需要進行擴充。
以上內容參考:
網路-內存資料寄存器
⑤ 8086cpu為什麼要對存儲器採用分段管理一個邏輯段最多包含多少個存儲單元
只要學過匯編的人都知道8086處理器對存儲器採用分段管理機制,為什麼要這么設計呢?採用線性地址直接訪問存儲器該多好,直接明了。
其實Intel的工程師絕對不會那麼傻,當然是有他的道理:
首先,地址匯流排有20根,可定址1M的地址空間,而寄存器是16位,僅能定址64K,總不能白白浪費多出來的空間。要知道在8086的那個年代,內存是非常昂貴的。
所以Intel的工程師想出了分段管理的方法:段地址x4+偏移地址。
另外,分段管理還有利於代碼的組織,對內存實現有效的管理。例如,將代碼段、數據段隔離等。
學習過程中,如果按照書中所描述,照搬的學習,既不方便記憶,也不能將知識融會貫通。
⑥ 段寄存器是不是存儲器的一部分
應該這樣子說
寄存器是一種存儲器
但不是我們平常所指的存儲器
在匯編語言里進行操作的數據有三種
直接數,如1+2這類
地址數,有兩種,一種是直接地址,另一種是間接地址
直接地址是寄存器里放的段首地址
[寄存器]+偏移量[直接數]=地址內容
間接就是兩個操作數都是寄存器內容,一個是段首一個是偏移量
[寄存器]+[寄存器]=地址內容
⑦ 「段寄存器」有什麼作用
「段寄存器」的作用有:
1、在保護模式下,段寄存器其實就是段選擇器,為獲取段描述符表的某個項目,起到索引的作用等等;
2、在實模式下,段寄存器起到的是定址的作用,指示著某一數據段的基址。
「段寄存器」的分類有:
1、段寄存器CS指向存放程序的內存段,IP是用來存放下條待執行的指令在該段的偏移量,把它們合在一起可在該內存段內取到下次要執行的指令。
2、段寄存器SS指向用於堆棧的內存段,SP是用來指向該堆棧的棧頂,把它們合在一起可訪問棧頂單元。另外,當偏移量用到了指針寄存器BP,則其預設的段寄存器也是SS,並且用BP可訪問整個堆棧,不僅僅是只訪問棧頂。
3、段寄存器DS指向數據段,ES指向附加段,在存取操作數時,二者之一和一個偏移量合並就可得到存儲單元的物理地址。該偏移量可以是具體數值、符號地址和指針寄存器的值等之一,具體情況將由指令的定址方式來決定。