❶ 從機器(匯編)語言程序員來看,下列哪些是透明的
不知道你要問的是什麼,匯編有很多種,不同cpu的匯編不太一樣,不知道你說的是哪種
不過寫8086匯編程序的時候,需要用到的寄存器有14個(13個16位寄存器和1個16位但只用了其中9位的狀態標志寄存器),分別是通用寄存器(8個)、段寄存器(4個),還有2個控制寄存器(指令指針IP和狀態寄存器)
其它的你所說的寄存器我都沒聽說過,可能算是對匯編程序員透明了吧。
以上內容僅供參考,呵呵
❷ 不可見寄存器是什麼意思
是相對於程序不可見,若果程序員能通過程序指令進行訪問,那麼寄存器是可見的。不可見寄存器是不能直接訪問的寄存器。
❸ 累加寄存器對程序員可見嗎
累加寄存器對程序員不可見。程序員不可見也就是說程序員不能利用編程語言來操作這些寄存器。只有匯編語言才能操作寄存器,高級語言比如C/C++、Java都不能直接對寄存器進行編程。
❹ 匯編程序中,程序員可以訪問的寄存器 A程序計數器(PC) B指令寄存器(IR) C存儲器數據寄存器(MDR)
選A。
程序計數器,也叫IP(EIP),用來存儲下一條指令的地址。可以通過call,jmp等跳轉指令間接改變,可以用Move,push等讀出其值,但是不可寫。
指令寄存器(IR )用來保存當前正在執行的一條指令。當執行一條指令時,先把它從內存取到內存數據寄存器(MDR)中,然後再傳送至IR。
主存與CPU之間的硬連接:主存與CPU的硬連接有三組連線:地址匯流排(AB)、數據匯流排(DB)和控制匯流排(CB)。把主存看作一個黑盒子,存儲器地址寄存器(MAR)和存儲器數據寄存器(MDR)是主存和CPU之間的介面。MAR可以接收由程序計數器(PC)的指令地址或來自運算器的操作數的地址,以確定要訪問的單元。MDR是向主存寫入數據或從主存讀出數據的緩沖部件。MAR和MDR從功能上看屬於主存,但通常放在CPU內。
❺ 哪些寄存器程序員可訪問
寄存器是中央處理器內的其中組成部份。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數器(PC)。在中央處理器的算術及邏輯部件中,包含的寄存器有累加器(ACC)。
寄存器(Register)
寄存器是內存階層 中的最頂端,也是系統操作資料的最快速途徑。寄存器通常都是以他們可以保存的 位元 數量來估量,舉例來說,一個 "8 位元寄存器" 或 "32 位元 寄存器"。寄存器現在都以寄存器檔案 的方式來實作,但是他們也可能使用單獨的正反器、高速的核心內存、薄膜內存 以及在數種機器上的其他方式來實作出來。
寄存器通常都用來意指由一個指令之輸出或輸入可以直接索引到的暫存器群組。更適當的是稱他們為 "架構寄存器"。
例如,x86 指令及定義八個 32 位元寄存器的集合,但一個實作 x86 指令集的 CPU 可以包含比八個更多的寄存器。
寄存器是CPU內部的元件,寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非常快。
寄存器的用途:
1.可將寄存器內的數據執行算術及邏輯運算。
2.存於寄存器內的地址可用來指向內存的某個位置,即定址。
3.可以用來讀寫數據到電腦的周邊設備。
8086 有8個8位數據寄存器,
這些8位寄存器可分別組成16位寄存器:
AH&AL=AX:累加寄存器,常用於運算;
BH&BL=BX:基址寄存器,常用於地址索引;
CH&CL=CX:計數寄存器,常用於計數;
DH&DL=DX:數據寄存器,常用於數據傳遞。
為了運用所有的內存空間,8086設定了四個段寄存器,專門用來保存段地址:
CS(Code Segment):代碼段寄存器;
DS(Data Segment):數據段寄存器;
SS(Stack Segment):堆棧段寄存器;
ES(Extra Segment):附加段寄存器。
當一個程序要執行時,就要決定程序代碼、數據和堆棧各要用到內存的哪些位置,通過設定段寄存器 CS,DS,SS 來指向這些起始位置。通常是將DS固定,而根據需要修改CS。所以,程序可以在可定址空間小於64K的情況下被寫成任意大小。 所以,程序和其數據組合起來的大小,限制在DS 所指的64K內,這就是COM文件不得大於64K的原因。8086以內存做為戰場,用寄存器做為軍事基地,以加速工作。
除了前面所提的寄存器外,還有一些特殊功能的寄存器:
IP(Intruction Pointer):指令指針寄存器,與CS配合使用,可跟蹤程序的執行過程;
SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置。
BP(Base Pointer):基址指針寄存器,可用作SS的一個相對基址位置;
SI(Source Index):源變址寄存器可用來存放相對於DS段之源變址指針;
DI(Destination Index):目的變址寄存器,可用來存放相對於 ES 段之目的變址指針。
還有一個標志寄存器FR(Flag Register),有九個有意義的標志(
OF: 溢出標志位OF用於反映有符號數加減運算所得結果是否溢出。如果運算結果超過當前運算位數所能表示的范圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0.
DF: 方向標志DF位用來決定在串操作指令執行時有關指針寄存器發生調整的方向。
IF: 中斷允許標志IF位用來決定CPU是否響應CPU外部的可屏蔽中斷發出的中斷請求。但不管該標志為何值,CPU都必須響應CPU外部的不可屏蔽中斷所發出的中斷請求,以及CPU內部產生的中斷請求。具體規定如下:
(1)、當IF=1時,CPU可以響應CPU外部的可屏蔽中斷發出的中斷請求;
(2)、當IF=0時,CPU不響應CPU外部的可屏蔽中斷發出的中斷請求。
TF: 狀態控制標志位是用來控制CPU操作的,它們要通過專門的指令才能使之發生改變
SF: 符號標志SF用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統中,有符號數採用補碼表示法,所以,SF也就反映運算結果的正負號。運算結果為正數時,SF的值為0,否則其值為1。
ZF: 零標志ZF用來反映運算結果是否為0。如果運算結果為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標志位。
AF: 下列情況下,輔助進位標志AF的值被置為1,否則其值為0:
(1)、在字操作時,發生低位元組向高位元組進位或借位時;
(2)、在位元組操作時,發生低4位向高4位進位或借位時。
PF: 奇偶標志PF用於反映運算結果中「1」的個數的奇偶性。如果「1」的個數為偶數,則PF的值為1,否則其值為0。
CF: 進位標志CF主要用來反映運算是否產生進位或借位。如果運算結果的最高位產生了一個進位或借位,那麼,其值為1,否則其值為0。)
以上是8086寄存器的整體概況, 自80386開始,PC進入
32bit時代,其定址方式,寄存器大小, 功能等都發生了變化, 要想學習這方面知識請參考相應資料.
❻ 程序員可以看到寄存器的長度嗎
能力強一些的程序員應該是可以的,如果想要學習的話,也可以去專業的學校學習。