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

時間 2021-08-30 09:56:08

1樓:靈若伊雪

1、(r1)=20h 不是一條指令,而只是一種說明,表明r1暫存器中的內容是20h。這個20h是地址還是資料,與這個說明無關。

2、在指令 mov @r1,#40h 中,@r1 是間接定址方式,表明r1中的內容是地址,指令的功能表明是將立即數40h傳送到r1指定的地址中。

3、在指令中容易混淆的是立即數與直接地址,立即數的特徵是有一個字首#,直接地址沒有這個字首。

無論程式在何處,都可以跳到你要的地方,同樣lcall也是非常好用,它是長呼叫子程式,也是無論程式執行到何處,遇到它都可以調記憶體裡任何一個位置子程式

所以我用最簡單的一句話告訴你,在你需要跳轉的時候就用ljmp,在你需要調程式的時候就用lcall

引用:⑵ jmp near ptr label 近轉移(near jump)

近轉移是jmp指令的預設格式,可以寫為"jmp label"。它可在當前**段內轉移,機器指令的操作碼是e9,位移量是16位的帶符號補碼數。指令中的轉向地址可以是直接定址方式、暫存器定址方式、暫存器間接方式和儲存器定址方式。

● jmp label 直接轉移(direct jump)

執行操作:(ip) ← offset label = (ip)當前+16位位移量

轉移的目標地址在指令中可直接使用符號地址,由於位移量為16位,它的轉移範圍應是-32768至+32767,也就是說,近轉移指令可以轉移到段內的任一個位置。

● jmp reg 暫存器間接轉移(register indirect jump)

執行操作:(ip) ← (reg)

轉移的目標地址在暫存器中,例如指令"jmp bx"執行的結果,將bx的內容送給ip。

● jmp word ptr opr 儲存器間接轉移(memory indirect jump)

執行操作:(ip) ← (pa+1,pa)

儲存器的實體地址pa由指令中的定址方式確定,jmp指令執行的結果,把pa單元的字內容送到ip暫存器中。例如"jmp word ptr [di]",實體地址pa = (ds)×24+(di),指令執行的結果是(ip)= (pa+1,pa)。

write_ds1302_byte(address);

write_ds1302_byte(dat);

這兩個函式是網ds1302中寫地址和資料的,根據ds1302的時序,可以看明白順序。

2樓:

1. ajmp的跳轉範圍有限,只能在當前pc所處的2kb塊內跳轉。ljmp的跳轉範圍為全64kb空間。

2. 所謂相對,是指相對於當前地址進行跳轉,通俗地說就是“前進n步”或“後退n步”。所謂絕對,就是直接跳轉到明確指定的地址,通俗地說就是“跳到***x位置”。

3. 程式部分分模組,逐步新增模組並執行除錯,這樣可以逐個排除問題。如果有串列埠或其它通訊介面可以輸出除錯資訊,有硬體**更好。

3樓:

都是些 很基本的問題。 基礎啊。

1,什麼時候用ajmp,什麼時候用ljmp?

是 短距離跳轉 和 長距離跳轉的區別。 通常不同的微控制器 都支援相應的偽指令,比如jmp。

編譯器自動 根據實際 來編譯。 具體要看 那款微控制器了。

2,相對轉移和絕對轉移指令有什麼區別?

相對轉移: 根據相對地址量來轉移。 絕對轉移:向絕對地址轉移3,比較大的程式如何除錯

一般除錯都是 分全速執行, 單步執行 和 斷點執行。 根據實際需要了

微控制器組合語言設計

這樣寫也可以,就是你的disp程式裡面的loop程式迴圈體是個死迴圈,沒有出口,這樣程式一直執行。最後導致多次中斷呼叫,記憶體ram耗盡,然後宕機。做中斷程式有個原則,就是中斷處理函式儘可能的短。你這個程式太長,把主程式應該承擔的工作,放到中斷服務程式中去做,況且loop 的迴圈是用ajmp跳轉過去...

組合語言程式設計微控制器 跪求高手

程式如下 mov r0,20h mov dptr,4000h mov r2,16 loop mov a,r0 movx dptr,a inc r0 inc dptr djnz r2,loop sjmp end mov r7,16 需要移動數的個數 mov r0,20h 20h開始地址 mov dpt...

51微控制器組合語言學習軟體,51微控制器用組合語言需要什麼軟體?

我想告訴你,keil可以編輯彙編的檔案.你建好一個project後,在source group 1上點右鍵,選add files to group source group 1 這時,就可以選中你的asm檔案 要選asm檔案得先把對話方塊中的檔案類弄選為 雙擊就可以新增到source group 1...