微控制器組合語言偏移量計算

2025-05-25 05:45:18 字數 3506 閱讀 3203

1樓:做而論道

org 00h

mov r2,#0ah ;-打算從tab3表中,查出第十個字,即:6758h

tb3: mov a,r2

add a,r2 ;-a乘以2,因為,各個字,位址相差為2mov r3,a ;-暫存。

add a,#6 ;-加上偏移量。

-此處,和tab3,相差6位元組,故此,在前面加上了知段6add a,#3 ; 再加乙個偏移量。

-此處,察簡和tab3,相差2位元組,又因為查第二位元組,故此,在前面加上了3

rettab3:dw 1520,3721,42645,7580dw 3483,32657,883,9943dw 10000,40511,6758h,8931dw 4468,5871,13284,27808end計算偏移量,要用每條指令的位元組數來計搭沒譽算。

先要寫出機器碼。才行。

2樓:網友

2、查表時候,pc是查譁者表的下一條指令的首位址,只要能將其位址修正拆銀到表中對應位置就可以了。所以修正旅蘆宴值與查表位置和表的位置有關。

3樓:網友

跟指令位元組數有關。

4樓:網友

很難看懂這個,查表用movc a,@a+dptr是最直接和有巖賀效的方碰塵法,何必費力用pc呢。而且這個程式顯然有問題,不知所云。第乙個是加的26不是16,所以第二個加的是23,。

add a,#6 ;這裡應該加10,因為之後的指令佔用10個位元組。

movc a,@a+pc

xch a,r3

add a,#3 ;這好理解因為後面乙個movc之後的笑棗禪兩句佔用3個位元組。

movc a,@a+pc

mov r4,aret

微控制器中位址偏移值是什麼

5樓:胖大海君

值 準確來說應叫做:偏移量 用rel表示 是乙個8位的帶符號數(即補碼)

表示數的範圍為 -128~127

偏移量 即 rel 是在條件跳轉指令中 或 短轉移指令中的運算元。

例如: sjmp 偏移量; 其機器指令**為:80h rel (8位二進位數的補碼)

執行時 (pc)<-pc)+2+rel 即跳轉到位址 是相對於原來指令位址(pc)值向上轉移不超過128的單元 ( rel 為負) 或 向下轉移不超過127個單元( rel 為正)

因此 該定址方式也叫做相對轉移。

呵呵 滿意 就給俺加分吧。

6樓:網友

就是相對於基址的偏移量了,比如基址是0x1000,而0x1002就相對0x1000偏移了2

計算下面子程式中指令的偏移量和程式執行的時間(晶振頻率為 12mhz)。

7樓:電子無極限

具體的計算是這樣的:晶振12mhz的話乙個機器週期就是1us。第一條指令執行1次1us,第2條要執行15次,第三條和四條要執行255*15次,第五條指令執行15次,最後一條執行1次。

這樣總的計算式應該是這樣的:1+【1+(2+2)*255+2】*15+2=15348us

8樓:網友

你需要說出是什麼微控制器,要具體到型號。

微控制器組合語言mov a,#0dh

9樓:匿名使用者

對於微控制器來說,因為最後都要生成。hex檔案(即機器碼)所以其實沒什麼區別,但對於程式本身而言,越接近機器碼的語言耗費的資源就越少,彙編就比c語言更接近機器語言啦,而對於程式設計人員來說,越接近人類的語言就越容易接受,c語言就比彙編更容易掌握啦。而且c語言容易移植方便開發,現在一般都是用c語言來做開發的,而彙編也有自己的優勢,就是時間精確,所以現在一般都是用匯編巢狀c語言的做法去開發微控制器的。

微控制器組合語言怎麼計算延時程式的?

10樓:網友

;12m晶振時如下:

delay1s:

mov r2,#10 ;外層延時10*200*delay1:

mov r3,#200 ;次層延時200*delay2:

mov r4,#250 ;內層延時。

djnz r4,$

djnz r3,delay2

djnz r2,delay1ret

11樓:真空

你可以採用微控制器中的定時器/計時器,一般都是8位的,也有16位的,採用中斷方式。

8位定時器中斷間隔的計算:1/晶振頻率x256,比如微控制器採用1m頻率的晶振,1/1000000x256,那麼這個定時器中斷2次間的間隔時間為256us(微秒)。

你只要在中斷程式中用個暫存器計數,每+1就是256us,1秒約為3906箇中斷間隔。

12樓:網友

看晶振頻率,與一條指令所需要的週期 12m的晶振,乙個機器週期為1us,這樣,1秒鐘就好算了吧。

這裡da1+3到底是加3個位元組的偏移量還是加3個字的偏移量?

13樓:可軒

1全部正確的指令是 mov ax, [da1+3]da1+3 就是 da1首址+3個位元組的偏移量指令執行結果:

al=43,是 " c" 的ascii碼。

ah =46 , 是 " f " 的ascii碼即: ax 內容是 " fc " 的ascii碼。

微控制器組合語言。編寫對乙個多位元組數乘以10的運運算元程式

14樓:網友

其實這個可以分解為:x*10=x*8+x*2,相當於x<<3+x<<1;即,這個數左移三位加左移一位。

mul10:

mov a,r0

mov b,a

add a,#10h

mov r1,a

mov a,@r0

mov r2,#n

mov r3,#

clr 00h

mul100:

clr cmul101:

rlc amov @r0,a

jb 00h,mul1011

mov @r1,a

inc r1

mul1011:

inc r0

djnz r2,mul101

clr arlc a

mov @r0,a

mov @r1,a

mov a,b

mov r0,a

add a,#10h

mov r1,a

setb 00h

djnz r3,mul100

mov r2,#(n+1)

clr cmul102:

mov a,@r0

addc a,@r1

mov @r0,a

inc r0

inc r1

djnz r2,mul102ret

15樓:無線開發工程師

x*10=x*(8+2);沒乘法指令的這樣最快。

微控制器組合語言填空,微控制器組合語言作業

delay mov r3,20 設定50ms計數迴圈初值 mov tmod,10h 設定時器1方式1mov th1,03ch 置定時器初值mov tl1,0b0h setb tr1 啟動t1lp1 jbc tf1 lp2 查詢計數溢位sjmp lp1 lp2 mov th1,03ch 重新制定時器初...

微控制器彙編程式,微控制器(組合語言)程式

這個是外部擴充套件的ram,fef0h是存資料的地址,mov dptr 0fef0h是給資料指標賦值,movx dptr,a是間接定址,將a中資料送到外部ram的fef0h中,中斷服務程式後面應該有reti,挺容易的,看看書,這例題允許了中斷,給出了中斷處理程式,自己看書學得較為深刻。ofefoh指...

微控制器組合語言和計算機組合語言有區別嗎區別在哪區別有多大

現在的微控制器基本都支援c語言了 而且微控制器的速度也很快的 我個人認為沒有必要非得學組合語言了 把c語言學的紮實些,足可以應付絕大多數微控制器程式設計了反而建議你看看電路和vhdl語言方面的知識,因為一般情況下微控制器你程式設計可能需要你懂一些這方面的東西請參考 區別大著呢,不同系列的cpu,指令...