日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言是一种什么程序设计语言?

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言是一种什么程序设计语言? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本教程主要介紹與運行 Microsoft Windows 32 位和 64 位系統的 Intel 和 AMD 處理器相兼容的微處理器編程。

?

教程中使用了 Microsoft 宏匯編器(稱為 MASM)的最新版本。Microsoft Visual Studio 的大多數版本(專業版,旗艦版,精簡版……)都包含 MASM。

可以訪問(asmirvine.com),了解 Visual Studio 對 MASM 支持的最新詳細信息。同時,網站中還包括很多關于如何設置軟件并開始使用的有用信息。

在運行 Microsoft Windows 的 x86 系統中,其他一些有名的匯編器包括:TASM(Turbo 匯編器),NASM(Netwide 匯編器)和 MASM32(MASM 的一種變體)。GAS(GNU 匯編器)和 NASM 是兩種基于 Linux 的匯編器。在這些匯編器中,NASM 的語法與 MASM 的最相似。

匯編語言是最古老的編程語言,在所有的語言中,它與原生機器語言最為接近。它能直接訪問計算機硬件,要求用戶了解計算機架構和操作系統。

如果小伙伴正在學的大學課程的名稱與下列課程之一相似,可以通過本教程學到更多的專業知識:

  • 微計算機匯編語言
  • 匯編語言編程
  • 計算機體系結構導論
  • 計算機系統基礎
  • 嵌入式系統編程

通過本教程有助于學習計算機體系結構、機器語言和底層編程的基本原理??梢詫W到足夠的匯編語言,來測試其掌握的當今使用最廣泛的微處理器系列的知識。不會學到用模擬匯編器來編寫一個“玩具”計算機;MASM 是一個由業界專業人士使用的工業級匯編器。大家將從程序員的角度來了解 Intel 處理器系列的體系結構。

如果小伙伴計劃成為 C 或 C++ 開發者,就需要理解內存、地址和指令是如何在底層工作的。在高級語言層次上,很多編程錯誤不容易被識別。因此,程序員經常會發現需要“深入”到程序內部,才能找出程序不工作的原因。

學習匯編可能會問的問題

需要怎樣的背景知識?

在學習本教程之前,至少使用過一種結構化高級語言進行編程,如 Java、C、Python 或 C++。需要了解如何使用 IF 語句、數組和函數來解決編程問題。

什么是匯編器和鏈接器?

匯編器(assembler)是一種工具程序,用于將匯編語言源程序轉換為機器語言。鏈接器(linker)也是一種工具程序,它把匯編器生成的單個文件組合為一個可執行程序。還有一個相關的工具,稱為調試器(debugger),使程序員可以在程序運行時,單步執行程序并檢查寄存器和內存狀態。

需要哪些硬件和軟件?

一臺運行 32 位或 64 位 Microsoft Windows 系統的計算機,并已安裝了近期版本的 Microsoft Visual Studio。

MASM 能創建哪些類型的程序?

32 位保護模式(32-Bit Protected Mode):32 位保護模式程序運行于所有的 32 位和 64 位版本的 Microsoft Windows 系統。它們通常比實模式程序更容易編寫和理解。從現在開始,將其簡稱為 32 位模式。

64 位模式(64-Bit Mode):64 位程序運行于所有的 64 位版本 Microsoft Windows 系統。

16 位實地址模式(16-Bit Real-Address Mode):16 位程序運行于 32 位版本 Windows 和嵌入式系統。 64 位 Windows 不支持這類程序。

匯編語言與機器語言有什么關系?

機器語言(machine language)是一種數字語言, 專門設計成能被計算機處理器(CPU)理解。所有 x86 處理器都理解共同的機器語言。

匯編語言(assembly language)包含用短助記符如 ADD、MOV、SUB 和 CALL 書寫的語句。匯編語言與機器語言是一對一(one-to-one)的關系:每一條匯編語言指令對應一條機器語言指令。

C++ 和 Java 與匯編語言有什么關系?

高級語言如 Python、C++ 和 Java 與匯編語言和機器語言的關系是一對多(one-to-many)。比如,C++ 的一條語句就會擴展為多條匯編指令或機器指令。

大多數人無法閱讀原始機器代碼,因此,這里探討的是與之最接近的匯編語言。例如,下面的 C++ 代碼進行了兩個算術操作,并將結果賦給一個變量。假設 X 和 Y 是 整數:

int Y; int X = ( Y + 4 ) * 3;

與之等價的匯編語言程序如下所示。這種轉換需要多條語句,因為每條匯編語句只對應一條機器指令:

mov eax,Y ;Y 送入 EAX 寄存器 add eax,4 ;EAX 寄存器內容加 4 mov ebx,3 ;3 送入 EBX 寄存器 imul ebx ;EAX 與 EBX 相乘 mov x,eax ;EAX 的值送入 X

寄存器(register)是 CPU 中被命名的存儲位置,用于保存操作的中間結果。這個例子的重點不是說明 C++ 與匯編語言哪個更好,而是展示它們的關系。

匯編語言可移植嗎?

一種語言,如果它的源程序能夠在各種各樣的計算機系統中進行編譯和運行,那么這種語言被稱為是可移植的(portable)。

例如,一個 C++ 程序,除非需要特別引用某種操作系統的庫函數,否則它就幾乎可以在任何一臺計算機上編譯和運行。Java 語言的一大特點就是,其編譯好的程序幾乎能在所有計算機系統中運行。

匯編語言不是可移植的,因為它是為特定處理器系列設計的。目前廣泛使用的有多種不同的匯編語言,每一種都基于一個處理器系列。

對于一些廣為人知的處理器系列如 Motorola 68×00、x86、SUN Sparc、Vax 和 IBM-370,匯編語言指令會直接與該計算機體系結構相匹配,或者在執行時用一種被稱為微代碼解釋器(microcode interpreter)的處理器內置程序來進行轉換。

為什么要學習匯編語言?

如果對學習匯編語言還心存疑慮,考慮一下這些觀點:

  • 如果是學習計算機工程,那么很可能會被要求寫嵌入式(embedded)程序。嵌入式程序是指一些存放在專用設備中小容量存儲器內的短程序,這些專用設備包括:電話、汽車燃油和點火系統、空調控制系統、安全系統、數據采集儀器、顯卡、聲卡、硬盤驅動器、調制解調器和打印機。由于匯編語言占用內存少,因此它是編寫嵌入式程序的理想工具。
  • 處理仿真和硬件監控的實時應用程序要求精確定時和響應。高級語言不會讓程序員對編譯器生成的機器代碼進行精確控制。匯編語言則允許程序員精確指定程序的可執行代碼。
  • 電腦游戲要求軟件在減少代碼大小和加快執行速度方面進行高度優化。就針對一個目標系統編寫能夠充分利用其硬件特性的代碼而言,游戲程序員都是專家。他們經常選擇匯編語言作為工具,因為匯編語言允許直接訪問計算機硬件,所以,為了提高速度可以對代碼進行手工優化。
  • 匯編語言有助于形成對計算機硬件、操作系統和應用程序之間交互的全面理解。使用匯編語言,可以運用并檢驗從計算機體系結構和操作系統課程中獲得的理論知識。
  • 一些高級語言對其數據表示進行了抽象,這使得它們在執行底層任務時顯得有些不方便,如位控制。在這種情況下,程序員常常會調用使用匯編語言編寫的子程序來完成他們的任務。
  • 硬件制造商為其銷售的設備創建設備驅動程序。設備驅動程序(device driver)是一種程序,它把通用操作系統指令轉換為對硬件細節的具體引用。比如,打印機制造商就為他們銷售的每一種型號都創建了一種不同的 MS-Windows 設備驅動程序。通常,這些設備驅動程序包含了大量的匯編語言代碼。

匯編語言有規則嗎?

大多數匯編語言規則都是以目標處理器及其機器語言的物理局限性為基礎的。比如,CPU 要求兩個指令操作數的大小相同。與C++ 或 Java 相比,匯編語言的規則較少,因為,前者是用語法規則來減少意外的邏輯錯誤,而這是以限制底層數據訪問為代價的。

匯編語言程序員可以很容易地繞過高級語言的限制性特征。例如,Java 就不允許訪問特定的內存地址。程序員可以使用 JNI(Java Native Interface)類來調用 C 函數繞過這個限制,可結果程序不容易維護。

反之,匯編語言可以訪問所有的內存地址。但這種自由的代價也很高:匯編語言程序員需要花費大量的時間進行調試。

下一篇:匯編語言的應用

總結

以上是生活随笔為你收集整理的汇编语言是一种什么程序设计语言?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。