8086 c語言設計程式示例,8086 C語言設計程式示例

2022-03-05 10:17:04 字數 1974 閱讀 2915

1樓:

#define umcs (*((volatile unsigned int *)0xffa0))

定義了一個記憶體地址。c語言直接訪問記憶體地址必須建立一個絕對的記憶體地址指標。

umcs:為這個地址取的巨集名

(*((volatile unsigned int *)0xffa0)):編譯時,代替umcs的內容。最外面的括號是為了防止代替後出現歧義加的,沒有實際意義,實際的是括號裡面的內容:

*((volatile unsigned int *)0xffa0)

*表示一個地址裡面的內容,這個地址是:

(volatile unsigned int *)0xffa0

常數0xffa0就是實際的地址,(volatile unsigned int *)將這個地址轉變成c語言的unsigned int *指標,表明這個地址包含兩個位元組,存放無符號的數。

難以理解的是volatile,這是一個不常用的屬性,表明一個地址裡面的內容會自動改變,這種改變不是c程式改變的,而是外界原因改變的。這些地址,都是硬體的介面,裡面的值是硬體給的。這個volatile,對於c語言是必不可少的,有了這個,下面的語句就會得到正確編譯:

a=umcs;

a=umcs;

沒有volatile,編譯器認為這兩個語句重複,沒有意義,會自動優化成為一句:

a=umcs;

有了volatile,就會保留兩個語句。

實際上,因為umcs是volatile的,這兩個語句,兩次讀取同一地址的內容,但是讀取的值可能是不同的。

其他幾個#define語句意義相同。

主程式中

umcs=0xe038;

lmcs=0x03f8;

pacs=0x403e;

mpcs=0x8038;

cw=0x0080;

cw=0x0000;

向各個介面寫入資料,這些資料實際上是傳送給了硬體(常常是外部裝置)。

while(1)

這個是死迴圈,似乎沒有任何意義。但是,實際是等待中斷。中斷會打斷任何迴圈,跳到相應的中斷處理程式。

這段程式是典型的與硬體通訊的程式,寫驅動程式時,經常用到。

2樓:

你要問什麼?

解釋一下這段**?

請問8086識別c語言嗎,具體用什麼編譯器,燒寫到8086的程式如何生成 請高手解答。 俯首拜謝!不勝感激!

3樓:匿名使用者

不太清楚這位朋友需要達到什麼樣的目標,通俗來說,用c語言程式設計來控制8086是順理成章的事情,比如從前的turboc、後來的borland c,以及現在的vc++等編譯後生成的可執行**都是x86上執行的,如果一定要在8086cpu上執行,則直接指定cpu類別為8086即可,對不?

如果想直接在8086上執行**,由於8086本身不配程式執行空間,則需要配置相應的eprom或eeprom等空間來存放**,至於eprom,怎麼寫入都可以,只要將啟動**放在ffff:0000就可以確保在8086復位後可以順利得以執行。

求大神將下面c語言程式用8086組合語言實現

請問用8086組合語言編寫程式計算1+2+……+100 怎麼寫??求**,謝謝 5

4樓:匿名使用者

dseg segment

result dw 0

dseg ends

cseg segment

assume cs:cseg,ds:dsegstart:

mov ax,dseg

mov ds,ax

;xor ax,ax

mov cx,100

c1:add ax,cx

loop c1

;mov result,ax

;mov ax,4c00h

int 21h

cseg ends

end start

vb程式設計題設計程式求VB程式設計題設計程式求s1234n1n的值並輸出,其中n是從鍵盤輸入大於1的正整數

照樓主的題目,n不是大於1的正整數,應該是大於回1的正偶數才對答吧?private sub mand1 click n val inputbox n if n mod 2 1 then exit subt 1 2 s t for i 3 to n 1 step 2t t i i 1 i 1 i 1 ...

設計程式輸出圖形,設計一個程式輸出圖形

include int main 一個簡單的方法 printf n空一格 空兩格 n空三格 設計c語言程式輸出一下圖形 include main for i 0 i 2 i getch include void main for i 3 i 1 i cout lz給分啊 編寫一個程式,輸出以下圖形 ...

c語言程式解析,C語言程式解析

樓主給的東西不是很完整啊,看看是不是你要的結果。void init 遍歷時顯示每個結點的過程 void drawnode tree t,int color t t p c 號優先順序最高,i 1 時 t t 2 2009 1 2 2 s s t c 優先順序最高 以此類推 所以結果如下 11 2 i...