微控制器組合語言中JMP START在不同位置的作用,求大神解釋

時間 2021-08-14 22:59:26

1樓:匿名使用者

jmp start 這是跳轉指令,我想你是學習的51微控制器的初學者。

它的意思是跳轉到標識為“start”位置開始往下執行語句。

你給了三段程式,第一和第二的作用是一樣的。先說你程式的意思先,你程式設計是一個流水燈,先左移8次,然後又右移8次。接著重複上面的迴圈:

左移8次,右移8次,左移8次,右移8次。。。

而起到這個作用的就是jmp start這條指令。

而第三個程式呢,說實在的,就是不懂為什麼玩玩吧?你把這條指令調到了延時子程式中。這樣發光二極體就不會左移了,若是你有發光二極體連線可以看的話。應為當程式執行到

org 0

→start: mov r2,#8

mov a,#0feh

setb c

loop: mov p1,a

→lcall delay (就是這句)。接著它就跳到延時子程式:

→delay: mov r5,#20 ;(就是這句)。

d1: mov r6,#20

d2: mov r7,#248

djnz r7,$

djnz r6,d2

djnz r5,d1

→jmp start(執行到這句時候程式就跳到start)ret第一個跟第二個的不同是每個迴圈多執行一個delay子程式,第一個跟第三個的不同是,第三個從第一個lcall delay;跳到delay子程式,子程式執行完畢就回返回到程式開始start處重新執行,程式當中的一些語句將不會被執行。

2樓:匿名使用者

第一個是外迴圈;第二個是跳到程式始端開始執行,也是迴圈,但不分內外之分;第三個是迴圈巢狀。

3樓:給生活加糖

第一個跟第二個的不同是每個迴圈多執行一個delay子程式,第一個跟第三個的不同是,第三個從第一個lcall delay;跳到delay子程式,子程式執行完畢就回返回到程式開始start處重新執行,程式當中的一些語句將不會被執行。

4樓:匿名使用者

第2和3個程式,jmp的位置都不對

不能正常工作

組合語言是一種什麼語言?

5樓:景田不是百歲山

組合語言是任何一種用於電子計算機、微處理器、微控制器或其他可程式設計器件的低階語言,亦稱為符號語言。在組合語言中,用助記符代替機器指令的操作碼,用地址符號或標號代替指令或運算元的地址。在不同的裝置中,組合語言對應著不同的機器語言指令集,通過彙編過程轉換成機器指令。

特定的組合語言和特定的機器語言指令集是一一對應的,不同平臺之間不可直接移植。

6樓:深藍

補充一下:想學習組合語言,就得先對指令結構,尋指方式,計算機內部暫存器的作用有所瞭解,這樣才會使得編寫程式的時候得心應手。組合語言中,重要的是三種結構,即順序,選擇,迴圈,還有子過程,巨集,這幾個重點知識,掌握了這些,就足矣。

7樓:匿名使用者

組合語言(assemblylanguage)是面向機器的程式設計語言。在彙編語閤中,用助記符(memoni)代替操作碼,用地址符號(symbol)或標號(label)代替地址碼。這樣用符號代替機器語言的二進位制碼,就把機器語言變成了組合語言。

於是組合語言亦稱為符號語言。使用組合語言編寫的程式,機器不能直接識別,要由一種程式將組合語言翻譯成機器語言,這種起翻譯作用的程式叫彙編程式,彙編程式是系統軟體中語言處理系統軟體。彙編程式把組合語言翻譯成機器語言的過程稱為彙編

8樓:湖北潛江高石碑

能夠直接控制機器的語言,最低階的語言

組合語言中@,#是什麼含義啊

9樓:墨汁諾

#表示立即數定址,採用立即定址方式的指令,在立即數前面加上立即定址符“#”。

例如指令mov a,#30h中30h就是立即數,指令功能為將30h賦給累加器a。

@表示暫存器的間接定址。

用組合語言寫程式,就得用匯編編譯器,不同的彙編編譯器對彙編語法有些異,@,#都是linux作業系統中常用的彙編編譯器所使用的彙編語法,而windows下常使用的masm編譯器就沒有@,#這些符號。

10樓:匿名使用者

用組合語言寫程式,就得用匯編編譯器,不同的彙編編譯器對彙編語法有些異,@,#都是linux作業系統中常用的彙編編譯器(忘了是什麼)所使用的彙編語法,而windows下常使用的masm編譯器就沒有@,#這些符號。

組合語言分幾種?分別是什麼作用?

組合語言中jb,ja,是什麼意思

11樓:a羅網天下

jb是指判斷位變數轉移指令,ja(jump above)大於則轉移到目標指令執行。

jb p1.3,l1意思就是說判斷p1.3的值是不是“1” 如果是就跳轉到l1程式執行,如果不是就順序執行下一條指令。

低於則跳轉,適用於無符號數的比較,要求cf=1

ja它是通過判斷兩個無符號數之間的大小關係,如果cf∨zf = 0,說明大於,則轉移。

例如:mov ah,0x1

mov al,0x0

cmp ah,al

ja l1

——ah大於al 則跳轉到l1

傳送指令

包括通用資料傳送指令mov、條件傳送指令cmovcc、堆疊操作指令push/pusha/pushad/pop/popa/popad、交換指令xchg/xlat/bswap、地址或段描述符選擇子傳送指令lea/lds/les/lfs/lgs/lss等。

邏輯運算

這部分指令用於執行算術和邏輯運算,包括加法指令add/adc、減法指令sub/sbb、加一指令inc、減一指令dec、比較操作指令cmp、乘法指令mul/imul、除法指令div/idiv、符號擴充套件指令cbw/cwde/cdqe、十進位制調整指令daa/das/aaa/aas、邏輯運算指令not/and/or/xor/test等。

移位指令

這部分指令用於將暫存器或記憶體運算元移動指定的次數。包括邏輯左移指令shl、邏輯右移指令shr、算術左移指令sal、算術右移指令sar、迴圈左移指令rol、迴圈右移指令ror等。

組合語言比機器語言的可讀性要好,但跟高階語言比較而言,可讀性還是較差。不過採用它編寫的程式具有儲存空間佔用少、執行速度快的特點,這些是高階語言所無法取代的。在實際應用中,是否使用組合語言,取決於具體應用要求、軟體開發時間和質量等方面作權衡。

12樓:drar_迪麗熱巴

組合語言中jb、ja都是條件轉移指令,常用於比較兩個無符號數的大小,判斷條件是cf、zf狀態的組合。為確定cf、zf狀態,轉移前用cmp指令設定標誌位(cmp a,b)。

當計算機的硬體不認識字母符號,這時候就需要一個專門的程式把這些字元變成計算機能夠識別的二進位制數。因為組合語言只是將機器語言做了簡單編譯,所以並沒有根本上解決機器語言的特定性,所以組合語言和機器自身的程式設計環境息息相關,推廣和移植很難。

由於彙編指令系統龐大,因而需構建指令系統體系,其指令數量龐大,格式複雜,可記憶性差等。指令中最難的是指令所支援的定址方式,其實質就是指令中運算元如何獲取。對於處理器而言,就是如何找到他所需的資料。

但對於計算機底層的組合語言而言,這種定址方式將涉及大量的計算儲存格式,與 複雜的儲存管理方式緊密相關,因而難以理解。最後,彙編指令還關係到如何影響標誌位,但處理器標誌位非常複雜,因而對其機制掌握就比較困難。

傳送指令

包括通用資料傳送指令mov、條件傳送指令cmovcc、堆疊操作指令push/pusha/pushad/pop/popa/popad、交換指令xchg/xlat/bswap、地址或段描述符選擇子傳送指令lea/lds/les/lfs/lgs/lss等。

邏輯運算

這部分指令用於執行算術和邏輯運算,包括加法指令add/adc、減法指令sub/sbb、加一指令inc、減一指令dec、比較操作指令cmp、乘法指令mul/imul、除法指令div/idiv、符號擴充套件指令cbw/cwde/cdqe、十進位制調整指令daa/das/aaa/aas、邏輯運算指令not/and/or/xor/test等。

13樓:匿名使用者

在x86組合語言中,這是對無符號數的跳轉判定,jb/ja分別是小於則跳/大於則跳;對於有符號數的跳轉判定,分別是jl/jg.

14樓:匿名使用者

jb就是轉移指令 jb bit,rel 直接位為一則跳轉

15樓:匿名使用者

1、在組合語言中,dw表示字型別的變數,每個後續的資料佔用兩個位元組;db是位元組型別,即每個變數分配一個位元組的記憶體。2,d1dw 1234h和d2db12h,34h在實際操作中是不一樣的。額外的儲存在1000h。

當使用d1dw 1234h時,1000h儲存在34h。

組合語言有什麼特點

16樓:狼道刀

1、機器相關性

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

2、高速度和高效率

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

3、編寫和除錯的複雜性

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

擴充套件資料

組合語言的發展歷程:

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

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

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

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

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

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

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

微控制器彙編DA指令什麼用,微控制器組合語言十進位制調整da

胡像貓 微控制器彙編言語da指令,是指十進位制加法運算。是結合加法指令一起用的,例如daa,這條指令是十進位制調整指令,用來在進行十進位制運算 bcd碼 時進行校正的。當兩個bcd碼加法時,01h 09h應該是等於10h,但由於 微控制器的加法指令是二進位制的運算,加完之後得到的結果是0ah,這時就...

微控制器組合語言的幾個疑問

靈若伊雪 1 r1 20h 不是一條指令,而只是一種說明,表明r1暫存器中的內容是20h。這個20h是地址還是資料,與這個說明無關。2 在指令 mov r1,40h 中,r1 是間接定址方式,表明r1中的內容是地址,指令的功能表明是將立即數40h傳送到r1指定的地址中。3 在指令中容易混淆的是立即數...

51微控制器組合語言做16位除法,51微控制器是否能夠完成16位的加減乘除運算

大別山的蝸牛 雙位元組無符號除法程式 r5r2r3r4 r6r7 r2 r3r4 餘數r6r7 入口 r5,r2,r3,r4,r6,r7 占用資源 acc,b,f0 堆疊需求 4位元組 出口 r2 r3,r4,r6,r7,ovndiv42 mov a,r1 push a mov b,00h ndv4...