C51下彙編的嵌入

2021-08-10 22:16:44 字數 3188 閱讀 2079

**:

(1)、

c51語言中呼叫組合語言程式;

c51語言呼叫組合語言程式要注意以下幾點:

1:在檔案欄選中

file group

和c51

程式原檔案,在配置檔案選項中啟用

「產生彙編(

src)檔案,

「編譯(

src)檔案」和

「建立工程(目標)時包含

」三個選項。

2:根據選擇的編譯模式,把相應的庫檔案(如

small

模式,庫檔案為

keil\c51\lib\c51s.lib

)加入工程中。

3:在c51語言中必須宣告需要呼叫的函式為外部函式。

extern void delay(void);

4:在組合語言程式中必須宣告被呼叫子程式為公共子程式,在被呼叫的檔案中還需要宣告此檔案是可從新定位的。

public  delay,del

delayy  segment code

rseg    delayy

例項如下:

c51語言檔案:

[cpp]

view plain

copy

#include "reg51.h"

extern

void

delay(

void

);  

extern

void

del(

void

);  

void

main(

void

)    

組合語言檔案:

public  delay,del

delayy  segment code

rseg    delayy

delay:  mov     r2,#3h

djnz    r2,$

retdel:    mov     r3,#03h

djnz    r3,$

retend

(2)、

c51語言中呼叫外部的

c51函式;

c51語言呼叫外部的

c51函式的注意事項如下:

1:在主調函式中必須宣告被呼叫的函式為外部型別的函式,其餘都一樣。

例項如下:

主調函式a:

[cpp]

view plain

copy

#include "reg52.h"

extern

void

delay(

void

);  

sbit    p1_1=p1^1;  

void

main(

void

)    

被呼叫的函式b:

[cpp]

view plain

copy

delay()    

(3)、

c51語言中嵌入匯程式設計序;

在c51

語言中巢狀使用組合語言編寫程式要注意以下的幾個問題:

1:在檔案欄選中

file group

和c51

程式原檔案,在配置檔案選項中啟用

「產生彙編(

src)檔案,

「編譯(

src)檔案」和

「建立工程(目標)時包含

」三個選項。

2:根據選擇的編譯模式,把相應的庫檔案(如

small

模式,庫檔案為

keil\c51\lib\c51s.lib

)加入工程中。

3:用#pragma  asm

,和#pragma endasm

語句包含嵌入的組合語言程式。

例項如下:

[cpp]

view plain

copy

#include "reg51.h"

void

delay(

void

);  

void

main(

void

)    

void

delay(

void

)     (4

)、組合語言中外部子程式的呼叫

組合語言中外部子程式的呼叫

在遍寫程式的時候,可以在乙個檔案的匯程式設計序中呼叫另乙個檔案的子程式。具體的方法如下。

1:在主程式檔案中要宣告所呼叫的子程式在外部。比如在主程式中呼叫子程式名為

delay

的子程式,其格式為:

extrn   code (delay)

2:在被呼叫的檔案中要宣告,被呼叫的子程式為公共型別的。比如

delay

要宣告的格式為:

public  delay

3:在被呼叫的檔案中還需要宣告此檔案是可從新定位的。

ss      segment code

rseg ss

整個事例如下,檔案a:

extrn   code (delay) 

extrn   code (del)

org     0000h

ajmp    main

org     0030h

main:   nop 

tt:     mov     p0,#00h

lcall   delay

lcall   del

mov     p0,#0ffh

ljmp    tt

end檔案b:

public  delay

public  del

ss      segment code

rseg ss

delay: mov     r2,#3h

djnz    r2,$

retdel:    mov     r3,#03h

djnz   r3,$

retend

(5)採用__asm進行彙編的嵌入,例如:

[cpp]

view plain

copy

if(sys_ctrl.t_run_num!=sys_ctrl.nt_run_num)    

編譯時,進入如下對話方塊,選中其中標出的兩項:

c51彙編偽指令

dbit指令在內部資料區的bit 段內以位為單位保留儲存器 rseg是段選擇指令,要想明白它的意思就要了解段的意思。段是程式 或資料物件的儲存單位。程式 放到 段,資料物件放到資料段。段分兩種,一是絕對段,一是再定位段。絕對段在組合語言中指定,在用l51聯接的時候,位址不會改變。用於如訪問乙個固定儲...

C51 彙編指令英文全稱

建立人 ruo xiao 修改人 ruo xiao 內容 增加了傳送 邏輯 算術 轉移和位運算。指令 英文全稱 意義mov move 對內部ram和sfr的資料進行傳送 movc move code 傳送程式儲存器中的資料 movx move external ram 對外部ram的資料進行傳送 x...

C51儲存的優化

我們知道51微控制器只有128byte的ram,有的增強型有xram,此時程式設計時就要注意,否則就有可能超出空間 1 對於各模組的全域性變數 靜態變數 全域性列舉型常量,靜態列舉型常量 個別操作儲存 如外部spi flash 的區域性變數都要修飾成xdata型別,從而節省空間。2 對於bit型變數...