回覆列表
  • 1 # IT自動化交流

    這個問題要從組合語言和機器語言的層面去解釋。

    C需要的程式碼需要編譯成組合語言,組合語言又轉換為機器語言儲存在程式儲存空間。

    處理器的PC指標從程式儲存空間中取出指令,逐條翻譯,用邏輯電路逐條運算指令。

    彙編指令由操作碼和運算元組成,PC指標除了讀取操作碼,由操作碼決定功能之外,還可以需要從資料儲存空間中讀取運算元進行運算。

    以定址指令為例,分為直接定址,間接定址以及立即數定址。

    直接定址是運算元就是數值所在的儲存空間的地址,PC指標讀取運算元之後,從該運算元所指定的資料儲存空間讀取數值,間接定址是指運算元所在儲存空間的資料仍然是一個地址,從該地址讀取數值。

    立即數定址是指操作就是數要進行運算的數值。

    我想程式中的常量應該是透過組合語言中的立即數定址獲取的數值。

    對於PC指標來說,其操作是直接把彙編指令中的運算元讀到特殊功能暫存器再進行操作。

    所以常量的操作涉及到兩個地址,

    一個是程式指令的儲存地址。

    另一個是特殊功能暫存器的地址。

    這兩個地址都不需要嚮應用程式開放。

    特殊功能暫存器是供處理器運算使用的,而程式指令的儲存空間只有在燒寫程式時才會用到。

    這兩個地址開放給應用程式可能會導致嚴重的問題。

    所以在常量前面取址是沒有任何意義的。

    同樣在程式表示式上取址,獲取是也是程式指令的儲存空間地址。

    一般來說,除了燒寫程式之外,應用程式讀取程式指令沒有任何意義。

    所以在表示式上取址也是沒有意義的。

    變數是儲存在資料儲存空間,或者是佔用一部分的程式儲存空間進行儲存(const變數) 。

    對變數的取址獲取的是資料儲存空間或者程式儲存空間的地址。

    取變數的地址之後,可以透過地址採用間接定址等指令進行查表等操作。

    可以大大提高程式效率,是非常有意義的。

  • 中秋節和大豐收的關聯?
  • png是什麼格式的圖片?