pc指針的值指向 C語言、匯編語言、機(jī)器指令、CPU之間是怎么聯(lián)系起來的?
C語言、匯編語言、機(jī)器指令、CPU之間是怎么聯(lián)系起來的?CPU的全稱是中央處理器,它是計(jì)算機(jī)操作的核心。根據(jù)所采用的不同技術(shù),CPU分為x86、x64、arm、DSP、單片機(jī)等不同的體系結(jié)構(gòu)。每種CP
C語言、匯編語言、機(jī)器指令、CPU之間是怎么聯(lián)系起來的?
CPU的全稱是中央處理器,它是計(jì)算機(jī)操作的核心。根據(jù)所采用的不同技術(shù),CPU分為x86、x64、arm、DSP、單片機(jī)等不同的體系結(jié)構(gòu)。每種CPU上都有一組特定的指令集,通常稱為機(jī)器指令。直接用機(jī)器指令編寫的程序是機(jī)器語言程序。
從理論上講,任何程序都可以直接用機(jī)器語言編寫(在早期,程序比較簡(jiǎn)單),程序可以直接運(yùn)行。然而,對(duì)于程序員來說,使用機(jī)器語言編程的要求很高,代碼不易移植,不便于人們直接閱讀。所以人們發(fā)明了一組符號(hào),用符號(hào)來表示這些機(jī)器指令,這就是匯編語言。用匯編語言編寫的程序不能直接由計(jì)算機(jī)運(yùn)行。它需要一個(gè)名為匯編程序的程序被轉(zhuǎn)換成機(jī)器語言才能在特定的機(jī)器上運(yùn)行。
C語言比匯編語言更高級(jí),用C語言編寫的程序不能直接在計(jì)算機(jī)上運(yùn)行。它要求編譯器將C語言代碼轉(zhuǎn)換成機(jī)器語言。此過程分為幾個(gè)子步驟,如下圖所示。
為了使主要問題更加完善,這里添加了兩個(gè)概念,鏈接器和反匯編。
這些目標(biāo)文件也是機(jī)器指令,但它們?nèi)鄙僖恍┍匾男畔?,無法直接運(yùn)行。鏈接器需要將這些文件與一些庫文件和可執(zhí)行文件頭信息鏈接在一起,形成一個(gè)可執(zhí)行文件(windows為PE格式,Linux為ELF格式)。
通常,在查看二進(jìn)制文件(對(duì)象文件或可行性文件)時(shí),機(jī)器指令不會(huì)直接顯示,而是以匯編語言顯示。這是因?yàn)樵谶@個(gè)過程中有一個(gè)反匯編程序,它將機(jī)器指令轉(zhuǎn)換成匯編語言,其功能與匯編過程正好相反。
現(xiàn)代匯編教材還是基于8086,對(duì)理解當(dāng)今CPU(如i9)有幫助嗎,還是教程太滯后?
裝配不工作?胡說
!裝配難學(xué)嗎?胡說
!任何高端應(yīng)用場(chǎng)景都需要組裝帶來的高效率和可靠性!什么是高端?軍工醫(yī)療領(lǐng)域!這些領(lǐng)域?qū)\(yùn)行效率和可靠性的要求是無止境的。用C語言調(diào)用第三方函數(shù)庫可以方便地編寫PID,但它是如何實(shí)現(xiàn)的呢?效率有多高?如果有問題怎么辦?如何提高效率?你不知道!如果你能在匯編中編寫一個(gè)PID,你會(huì)發(fā)現(xiàn)一切都在你的控制之下!跑步速度達(dá)到極限!所有的數(shù)據(jù)更改都是根據(jù)您的設(shè)計(jì)來操作的,這就是所謂的自主控制
!很多人說中國沒有自己的工業(yè)軟件?為什么?大多數(shù)人不知道怎么寫,因?yàn)楦呒?jí)語言不提供現(xiàn)成的庫。。。國內(nèi)PLC的品牌很多,但很少有自己的編譯平臺(tái)。為什么?因?yàn)橛肅語言不能編寫PLC級(jí)編譯器。梯形圖語言本身是匯編語言的增量式版本,比C語言更接近底層,當(dāng)然C語言不能滿足要求。例如,許多人抱怨數(shù)控機(jī)床不如進(jìn)口機(jī)床精確。這個(gè)精度的瓶頸,除了國內(nèi)冶金行業(yè)技術(shù)的差距外,最大的原因就是編程語言的局限!由于效率和運(yùn)行速度的差異,高級(jí)語言根本不能勝任這種應(yīng)用程序!更不用說三軸聯(lián)動(dòng)、五軸聯(lián)動(dòng)等技術(shù)了。
綜上所述,匯編語言的意義不僅僅是計(jì)算機(jī)的基礎(chǔ),幫助理解高級(jí)語言這么簡(jiǎn)單!匯編語言是高端應(yīng)用領(lǐng)域的必備工具
!匯編語言難學(xué)嗎?當(dāng)然,學(xué)習(xí)并不難!任何芯片的內(nèi)部資源都是極其有限的,因此CPU所能提供的匯編指令也是極其有限的。只有這么多的指令,而且您不會(huì)像高級(jí)語言那樣有一堆第三方庫需要跟進(jìn)。而匯編語言的指令函數(shù)非常簡(jiǎn)單易懂,通常是一個(gè)非常單一的函數(shù),比如如何處理源操作數(shù),然后寫到目標(biāo)操作數(shù)的地址,非常簡(jiǎn)單直接!與高級(jí)語言(甚至C)相比,學(xué)習(xí)的難度在下降。
但必須指出的是,裝配很難使用!很難使用!要完成一個(gè)特定的任務(wù),就必須學(xué)會(huì)將任務(wù)分解成匯編指令可以完成的各種小目標(biāo),這就意味著用匯編來編寫程序?qū)?duì)算法有很大的依賴性,這也是程序員技術(shù)高超、腦力極度消耗的根本原因,也是非常有價(jià)值的
!總而言之,匯編語言就像基本的漢字,高級(jí)語言就像名言的全集。如果你想獲得諾貝爾文學(xué)獎(jiǎng),靠別人的名言是行不通的。即使你想講自己的原創(chuàng)故事,那也是不可能的,因?yàn)槟愀究床欢?![冷拖][冷拖][冷拖]