微控制器指令的合法性如何判斷

時間 2021-09-02 04:46:44

1樓:匿名使用者

微控制器的指令系統和定址方式

微控制器要正常運作,事先需編制程式,再把程式放入存貯器中,然後由cpu執行該程式。程式是由指令組成的,指令的基本組成是操作碼和運算元。微控制器的品種很多,設計時怎樣表示操作碼和運算元,都有各自的規定,再有指令**也各不相同,因此,必須對所選微控制器的全部指令,也就是所謂「指令系統」,有足夠的瞭解。

各個系列的微控制器雖然有不同的指令系統,但也有其共同性。掌握一種微控制器的指令系統,對其它系列微控制器可以起到觸類旁通的作用。mcs-51微控制器應用廣泛,派生品種多,具有代表性,所以,這裡以mcs-51系列的指令系統為例說明「指令」的組成和應用。

1、mov a,#20h

這條指令表示把20h這個數送入累加器a中(一個特殊功能暫存器)。

2、add a,70h

這條指令表示把累加器a中的內容(在上例中送入的#20h)和存貯器中地址為70h單元中的內容(也是一個數字),通過算術邏輯單元(英文縮寫為alu)相加,並將結果保留在a中。這裡mov、add等稱為操作碼,而a、#20h、70h等均稱為運算元。在組合語言程式中,操作碼通常由英文單詞縮寫而成,這樣有助於記憶,所以又稱助記符。

如mov就是英文單詞move的縮寫,含有搬移的意思;而add即為英文單詞,其意為相加。因此,對於略懂英語的使用者,掌握微控制器指令的含意是較為方便的。運算元有多種表示法,如以上的#20h稱為立即數,即20h就是真正的運算元。

而70h是存貯器中某個單元的地址,在該單元中,放著運算元(比如說是3ah),add a,70h不是將70h和a中的內容相加,而是從存貯器70h單元中將3ah取出和a中的內容相加。由上可知,要找到實際運算元,有時就要轉個彎,甚至轉幾個彎,這個過程稱為定址,mcs-51共有7種定址方式,現介紹如下:

一、立即定址:                                     運算元就寫在指令中,和操作碼一起放在程式存貯器中。把「#」號放在立即數前面,以表示該定址方式為立即定址,如#20h。

二、暫存器定址:                                    運算元放在暫存器中,在指令中直接以暫存器的名字來表示運算元的地址。例如mov a,r0就屬於暫存器定址,即將r0暫存器的內容送到累加器a中。

三、直接定址:                                     運算元放在微控制器的內部ram某單元中,在指令中直接寫出該單元的地址。如前例的add a,70h中的70h。

四、暫存器間接定址:                                  運算元放在ram某個單元中,該單元的地址又放在暫存器r0或r1中。 如果ram的地址大於256,則該地址存放在16位暫存器dptr(資料指標)中,此時在暫存器名前加@符號來表示這種間接定址。

如mov a,@ r0。其它還有變址定址、相對定址、位定址等,待以後再詳細介紹。可能有人會問,在指令中直接給出實際運算元,不是簡單、明瞭嗎?

為什麼還要用其它幾種定址方式呢?這是因為在編制程式時很難一下子就給出運算元。如用微控制器控制溫度時,時時需要將給定的控制溫度(如20℃)減去環境溫度,而環境溫度時時有變化,顯然無法在程式指令中給出,只有通過一定方式,將其送入某個輸入/輸出口,再存放在某個暫存器中,這就必須用到暫存器定址。

又如要進行算術運算,要計算每班學員各科成績的平均值,如果把每個學員的各科都編一個程式,在程式中直接給出該學員各科成績,再求平均值,顯然太麻煩。這裡可以編一個求平均成績的通用程式,把每位學員的成績送入存貯器的各個單元中,這時可採取直接定址,一個程式可供每個學員用,不是更方便嗎?所以,定址方式越多,編制程式就越方便、靈活,適用範圍就越廣。

定址有如找人,如被找的人有手機、bp機、座機**等多種****則就容易找到他,微控制器也是如此,定址方式越多,找運算元越方便,微控制器的功能就越強。前面介紹51系列微控制器的定址方式時,常遇到微控制器內部的一些暫存器、累加器a、通用暫存器r0~r7、資料指標dptr和存貯器等。在以後介紹指令時,資料就要在這些暫存器、存貯器之間傳送,或者進行運算。

因此,編制程式就需熟悉微控制器的內部結構。

2樓:匿名使用者

1、做間址的暫存器只有r0、r1和dptr2、迴圈移位只能對a,而不是acc,其他指令一般都用a3、是數的都應在前加#,且十六進位制數中第一個是字元,則前應加0,如#0ffh、#0e0h;否則為ram地址還有很多,你記下指令系統就會更清晰!http://hi.

微控制器指令判斷正誤,微控制器的指令判斷正誤

1 clr a 對 2 mul r0,r1 錯,只有mul a,b 3 mov dptr,1050h 錯,猜測該題意圖應該是mov dptr,1050h,並且dptr除了立即數賦值外只能用movx dptr,a來為其賦值 4 mov a,r7 錯,只有r0與r1可以間址 5 add 30h,20h ...

微控制器中能判斷正負數的指令有哪些

生活如歌 51微控制器彙編指令 jnb 不為了則轉,也就是說非負則轉 jb 為1則轉,也就是說為負數則轉 jbc 同上一條,只是在轉移前將這一位清零 jc c為1則轉,判斷前要將符號位傳送到c jnc,c為0則轉,判斷前要將符號位傳送到c 張斯堯 jnb 不為了則轉,也就是說非負則轉 jb 為1則轉...

微控制器加法指令只怎麼執行的,51微控制器的加法指令到底怎麼加啊,例如12A4H 0FE7H

a,30h是將30h記憶體中數加a放到a的儲存單元。84h 8dh,d是13,加4為17,0到15即0到f這16個數,結果為1,進位標誌c為有效,然後加進8 8 c 17,還是保留1並進位,所以最後是11h。psw是微控制器內部標誌暫存器,是微控制器執行必不可少的基本運算基礎,cy是進位標誌,是位元...