組合語言通用性問題,組合語言有什麼特點

時間 2021-09-20 16:19:34

1樓:匿名使用者

當然不是這臺電腦和另外一臺的區別 而是各種不同平臺之間的通用性。比如unix 和 windows等平臺之間

2樓:

組合語言與硬體打交道,當然首先要有對應得cpu支援了,其他的就沒有別的了。cpu架構一樣,這個語言就能在上面編譯

3樓:匿名使用者

「機器」是指電腦,但不同體系的電腦**體系是不同的,就是cpu指令不同。比如intel體系集團(將這一類合稱一個集團)的cisc(複雜指令集計算機),就與早期的djs-130機cpu指令碼就不同。intel 8088是8位長度資料,這是資料進了ip指令暫存器(instruction pointer)就成了指令,進了ah、al--dh、dl就成了資料。

djs-130是16位的,0000 就是jmp,這個**與8088的jmp(0e)不同(**記不清了,0e不一定正確),這就是面向機器的意思。同樣的jmp,在不同體第的電腦中,編譯後的值及資料寬度不同。

4樓:況鑲旋

這個問題問的很有深度,你很善於思考。

這裡的機器籠統的說就是硬體,我們知道硬體本身也是有程式的,只不過程式固化在硬體上,這些程式不同於我們通常所說的軟體中的程式,他們不能被修改,只有該硬體的設計者才清楚這些程式的具體規範和流程。

可是我們也知道,計算機是一個複雜的體系,不是一個硬體就可以解決的,它需要多個硬體協調工作,問題來了,這些硬體是由不同的設計者或公司完成的,它們的程式只有設計者才清楚,那麼他們如何協調工作呢?即某個設計者設計的硬體如何呼叫其他設計者設計的其他硬體,以便協同完成工作呢?同一種硬體可能有很多不同的設計者,設計了不同的固化程式,其他型別的硬體要呼叫此種硬體不可能一一瞭解所有這類硬體的設計細節,而且即便能清楚市面上存在的所有這類硬體的細節,也難保以後再出現其他的設計,那麼這個問題該如何解決呢?

解決思路實際上很簡單,我們只需要定義一個標準的輸入輸出規範,設計者在硬體中固化的程式如果不滿足這個規範,只需要在硬體的外圍加一層軟體程式來滿足這樣的規範,這樣一來其他硬體並不需要知道這個硬體的內部細節,只需要呼叫硬體外圍的軟體程式即可,軟體程式再呼叫硬體內部的程式,該軟體程式必須要有清楚硬體內部程式的人來設計,一般來說,硬體的釋出者會附帶釋出一個這樣的程式來滿足業界的規範,這個程式就是我們通常意思上所說的「驅動程式」。

有了這樣的機制,即使兩個硬體的設計者設計了不同的固化程式,只要他們採用相同的規範,提供相同的外圍訪問介面,就可以被認為是相同的硬體。

不幸的是規範實際上是把雙刃劍,它的出現統一了業界繁雜的各種體系,也同時阻礙了體系結構的發展,這個問題我就不再詳述了。

瞭解了上面的問題之後,我們再來談談你所說的這個組合語言。

組合語言是面向機器的,這句話過於籠統,或者說不夠準確。實際上任何語言都可以針對機器或者某個特定平臺開發。只不過組合語言由於其本身貼近機器語言,所以任何硬體不需要提供專門的軟體介面,就可以由組合語言直接訪問該硬體的固化程式,而如果該硬體提供了基於其他語言的程式設計介面,且提供了該硬體的所有內部特性,那麼我們認為使用這種語言也可以訪問該硬體。

我們知道,很多語言開發的程式,其實也是要編譯成機器語言的,理論上說,這樣的程式也可以直接用匯編來開發。

上面我們說了,組合語言同其他語言其實很相似,他們最終也都是要編譯為機器語言,組合語言能夠做到的,理論上其他語言也能夠做到,其他語言能夠做到的,理論上組合語言也能夠做到。

但是現實是,組合語言能做到的,其他語言不一定能做到,而其他語言能做到的,組合語言也不一定能做到。這實際上是由於行業佈局問題導致的,換句話說,是人為的將它們區別開來了。

由於硬體的釋出者沒有開發基於其他高階語言的開發介面,導致開發人員只能使用匯編開發這類硬體,而其他高階語言則做不到。主要考量是由於這類底層開發的頻度較低,且單個硬體的功能較少,沒必要提供高階開發介面,開發人員完全可以通過彙編封裝一個應用供高階程式呼叫,所以也就沒有這類行業需求。

由於平臺的釋出者沒有提供基於彙編開發的相關資料,導致開發人員在基於該平臺開發程式時,只能使用對應的高階語言,而組合語言則做不到。這其中的主要考量是,平臺往往為某類應用提供開發環境,且需要嚴格遵循底層規範,大部分開發人員很難在龐大的應用中控制好各種底層規範,所以大部分人並不會考慮使用匯編開發這類繁雜的應用,對於釋出者來說,提供基於彙編開發的完整資料也就失去了商業價值,也就導致了這樣的局面。其實,我就有用匯編寫過windows程式的,只做了一個簡單的類似windows筆記本的應用,再往下寫就很複雜了。

對於你所提到的問題做個簡單的總結:

不同的機器是否對應不同的組合語言?理解錯誤。組合語言是包含了該語言的基本規範,它們是實際上是通用的,應該說基於不同的機器需要面向不同的呼叫,或者面向不同的功能,語言只不過是使用這些功能的工具。

這裡的「機器」指什麼?機器指的就是硬體,實際上指的是該應用中的獨特程式,它可以是固化在硬體上的程式,也可以是隨硬體提供的外圍驅動程式。

這臺能用,其他的可否使用?如果兩臺電腦使用了同樣的硬體,當然可以。如果兩臺電腦的硬體並不完全相同,只要它們遵循了同樣的規範,也可以。

而如果兩臺電腦中的硬體規範不一,如果他們提供了遵循同樣規範的驅動程式,且你的程式是基於該驅動程式編寫的,那麼也是可以的。實際上當前市面上大部分的硬體都遵循中同樣的體系規範,並不會有那麼大的差別。

組合語言有什麼特點

5樓:狼道刀

1、機器相關性

這是一種面向機器的低階語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的組合語言。使用組合語言能面向機器並較好地發揮機器的特性,得到質量較高的程式。

2、高速度和高效率

組合語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體裝置,如磁碟、儲存器、cpu、i/o埠等,且佔用記憶體少,執行速度快,是高效的程式設計語言。

3、編寫和除錯的複雜性

由於是直接控制硬體,且簡單的任務也需要很多組合語言語句,因此在進行程式設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬體資源。這樣,就不可避免地加重了程式設計師的負擔。與此相同,在程式除錯時,一旦程式的執行出了問題,就很難發現。

擴充套件資料

組合語言的發展歷程:

說到組合語言的產生,首先要講一下機器語言。機器語言是機器指令的集合。機器指令來講就是一臺機器可以正確執行的命令。

電子計算機的機器指令是一列二進位制數字。計算機將之轉變為一列高低電平,以使計算機的電子器件受到驅動,進行運算。

上面所說的計算機指的是可以執行機器指令,進行運算的機器。這是早期計算機的概念。在我們常用的pc機中,有一個晶片來完成上面所說的計算機的功能。

這個晶片就是我們常說的cpu(central processing unit,**處理單元)。

每一種微處理器,由於硬體設計和內部結構的不同,就需要用不同的電平脈衝來控制,使它工作。所以每一種微處理器都有自己的機器指令集,也就是機器語言。

早期的程式設計均使用機器語言。程式設計師們將用0, 1數字編成的程式**打在紙帶或卡片上,1打孔,0不打孔,再將程式通過紙帶機或卡片機輸入計算機,進行運算。這樣的機器語言由純粹的0和1構成,十分複雜,不方便閱讀和修改,也容易產生錯誤。

程式設計師們很快就發現了使用機器語言帶來的麻煩,它們難於辨別和記憶,給整個產業的發展帶來了障礙,於是組合語言產生了。

6樓:匿名使用者

組合語言的總體特點1.機器相關性

這是一種面向機器的低階語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的組合語言。使用組合語言能面向機器並較好地發揮機器的特性,得到質量較高的程式。

2.高速度和高效率

組合語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體裝置,如磁碟、儲存器、cpu、i/o埠等,且佔用記憶體少,執行速度快,是高效的程式設計語言。

3.編寫和除錯的複雜性

由於是直接控制硬體,且簡單的任務也需要很多組合語言語句,因此在進行程式設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬體資源。這樣,就不可避免地加重了程式設計師的負擔。與此相同,在程式除錯時,一旦程式的執行出了問題,就很難發現。

優點1、因為用組合語言設計的程式最終被轉換成機器指令,故能夠保持機器語言的一致性,直接、簡捷,並能像機器指令一樣訪問、控制計算機的各種硬體裝置,如磁碟、儲存器、cpu、i/o埠等。使用組合語言,可以訪問所有能夠被訪問的軟、硬體資源。

2、目標**簡短,佔用記憶體少,執行速度快,是高效的程式設計語言,經常與高階語言配合使用,以改善程式的執行速度和效率,彌補高階語言在硬體控制方面的不足,應用十分廣泛。

缺點1、組合語言是面向機器的,處於整個計算機語言層次結構的底層,故被視為一種低階語言,通常是為特定的計算機或系列計算機專門設計的。不同的處理器有不同的組合語言語法和編譯器,編譯的程式無法在不同的處理器上執行,缺乏可移植性;

2、難於從組合語言**上理解程式設計意圖,可維護性差,即使是完成簡單的工作也需要大量的組合語言**,很容易產生bug,難於除錯;

3、使用組合語言必須對某種處理器非常瞭解,而且只能針對特定的體系結構和處理器進行優化,開發效率很低,週期長且單調。

7樓:雲中漫歌

一方面,組合語言指令是用一些具有相應含義的助憶符來表達的,所以,它要比機器語言容易掌握和運用,但另一方面,它要直接使用cpu的資源,相對高階程式設計語言來說,它又顯得難掌握。

組合語言程式歸納起來大概有以下幾個主要特性。

1、與機器相關性

組合語言指令是機器指令的一種符號表示,而不同型別的cpu有不同的機器指令系統,也就有不同的組合語言,所以,組合語言程式與機器有著密切的關係。

由於組合語言程式與機器的相關性,所以,除了同系列、不同型號cpu之間的組合語言程式有一定程度的可移植性之外,其它不同型別(如:小型機和微機等)cpu之間的組合語言程式是無法移植的,也就是說,組合語言程式的通用性和可移植性要比高階語言程式低。

2、執行的高效率

正因為組合語言有「與機器相關性」的特性,程式設計師用組合語言編寫程式時,可充分發揮自己的聰明才智,對機器內部的各種資源進行合理的安排,讓它們始終處於最佳的使用狀態,這樣做的最終效果就是:程式的執行**短,執行速度快。

現在,高階語言的編譯程式在進行暫存器分配和目標**生成時,也都有一定程度的優化(在後續課程《編譯原理》的有關章節會有詳細介紹),但由於所使用的「優化策略」要適應各種不同的情況,所以,這些優化策略只能在巨集觀上,不可能在微觀上、細節上進行優化。而用組合語言編寫程式幾乎是程式設計師直接在寫執行**,程式設計師可以在程式的每個具體細節上進行優化,這也是組合語言程式執行高效率的原因之一。

3、編寫程式的複雜性

組合語言是一種面向機器的語言,其彙編指令與機器指令基本上一一對應,所以,彙編指令也同機器指令一樣具有功能單

一、具體的特點。要想完成某件工作(如計算:a+b+c等),就必須安排cpu的每步工作(如:

先計算a+b,再把c加到前者的結果上)。另外,在編寫組合語言程式時,還要考慮機器資源的限制、彙編指令的細節和限制等等

由於組合語言程式要安排運算的每一個細節,這就使得編寫組合語言程式比較繁瑣、複雜。一個簡單的計算公式或計算方法,也要用一系列彙編指令一步一步來實現。

4、除錯的複雜性

在通常情況下,除錯組合語言程式要比除錯高階語言程式困難,其主要原因有四:

組合語言指令涉及到機器資源的細節,在除錯過程中,要清楚每個資源的變化情況;

程式設計師在編寫組合語言程式時,為了提高資源的利用率,可以使用各種實現技巧,而這些技巧完全有可能破壞程式的可讀性。這樣,在除錯過程中,除了要知道每條指令的執行功能,還要清楚它在整個解題過程中的作用;

高階語言程式幾乎不顯式地使用「轉移語句」,但組合語言程式要用到大量的、各類轉移指令,這些跳轉指令大大地增加了除錯程式的難度。如果在組合語言程式中也強調不使用「轉移指令」,那麼,組合語言程式就會變成功能單調的順序程式,這顯然是不現實的;

除錯工具落後,高階語言程式可以在源程式級進行符號跟蹤,而組合語言程式只能跟蹤機器指令。不過,現在這方面也有所改善,cv(codeview)、td(turbo debug)等軟體也可在源程式級進行符號跟蹤了。

《我在網上給你找的,n你看看能解決你的問題不》

組合語言問題,組合語言問題

蜜蜂小玉米 assume cs code assume ds data data segment db i love you.data ends code segment start mov ax,data mov ds,ax mov bx,0 s0 check mov al,ds bx cmp a...

組合語言程式設計,組合語言程式設計

org 0000h ljmp main org 000bh ljmp t0int org 0030h main mov tmod,01h mov th0,high 65536 5000 mov tl0,low 65536 5000 setb tr0 setb et0 setb ea clr a sj...

組合語言和反彙編的區別,學習組合語言有什麼好處

反彙編是分析已經有的程式的過程。就是看這些程式的彙編 看看這些程式是怎麼執行的。因為是逆向過程,所以加了反字。學習組合語言有什麼好處 組合語言更解決計算機的底層,彙編源程式執行效率高。一些高階語言都是先轉成彙編然後再轉成機器語言的。瞭解彙編可以幫組更好的瞭解高階語言,設計演算法啥的。如果你要是搞硬體...