本文目錄一覽:
C語言程序設計實驗中彙編程序使用的定址方式有?
又是彙編的。。。
計算機是通過執行指令(由操作碼欄位和操作數欄位組成)序列來解決問題的,因而每種計算機都有一組指令集(指令系統)供給用戶使用,定址就是其中之一(如為了找到操作數)。
定址方式:1)與數據有關的定址方式 :
a 立即定址方式:操作數(立即數)直接存放在指令中,緊跟在操作碼,作為指令的一部分,這中定址方式用來表示常數,它經常用於給寄存器賦初值,且只能用於源操作數欄位,不能用於目的操作欄位,且源操作數長度與目的操作數長度一致。
b 寄存器定址方式:操作數在寄存器中,指令用來指定寄存器號,不需要訪問存儲器來取得操作數,速度較快。
c 直接定址方式:操作數的有效地址(在8086里把操作數的偏移地址叫做有效地址)只包含位移量一種成分,其值就存放在代碼段中指令的操作碼之後,位移量的指即操作數的有效地址。適用於處理單個變數。
d 寄存器間接定址方式:操作數的有效地址只包含基址寄存器內容或變址寄存器內容一種成分,因此有效地址就在某個寄存器中,而操作數就在存儲器中。適用與表格處理,執行完一條指令後,只需修改寄存器的內容就可以取出表格下一項。
e 寄存器相對定址方式:操作數的有效地址即為基址或變址寄存器和指令中指定的位移量之和。
f 基址變址定址方式:操作數的有效地址是一個基址寄存器和一個變址寄存器之和。
g 相對基址變址定址方式 h 比例變址定址方式 等等。
2)與轉移地址有關的定址方式。
a 段內直接定址:轉向的有效地址是當前IP寄存器的內容和指令中指定的8位或16位位移量之和。
b 段內間接定址:轉向有效地址是一個寄存器或是一個存儲單元的內容 。(常用)
c 段間直接定址 d 段間間接定址
此外 還介紹一些寄存器 如通用寄存器 AX BX CX DX 也可叫做數據寄存器,可以以字或位元組的形式訪問, 另外 SP BP SI DI 四個16位寄存器可以像數據寄存器一樣在運算時存放操作數,但他們只能以字(16位)為單位使用,此外它們更經常的用途是在存儲器定址時,提供偏移地址,再者有四個專門提供段地址的寄存器,稱為段寄存器 有代碼段CS 數據段DS 堆棧段SS 附加段ES。
在單片機的C語言程序設計中,如何使用SFR和可定址位
你好!
在c語言中無法對SFR(特殊寄存器),比如程序狀態寄存器(PSW)等寄存器進行操作,也就不能判斷它們的標誌位了。比如判斷Z標誌位,C標誌位等操作。對於要操作這類寄存器。我們唯一的辦法只能用彙編語言。或者在C語言中嵌入彙編語言來解決。所以我們寫單片機程序千萬不能放棄彙編語言。某些底層的硬體操作只能靠彙編語言來完成。
希望對你有所幫助,望採納。
單片機C語言怎麼聲明一個可以位定址的變數
是這個樣子的,你只要聲明了位變數,比如bit a;而且這個變數是全局變數,或者是函數內部的靜態變數,那麼,這個位變數的地上就恆不變了,只是地址是多少這個是編譯器隨機分配的,不敢十分確定,但是在以後的運行中,地址肯定是不變的。
如果你聲明的是函數內部的動態變數,比如在函數內部聲明:bit a,那麼,這個位變數是隨著函數的調用變化的,其地址也是變化的。
所以,你只要聲明一個全局的位變數,那麼,這個變數就肯定是地址不變的,當然,不知道其地址具體是多少罷了。
如果你非要知道每個地址是多少,那麼,有兩個辦法:
1 你集中把128個位全部都定義出來。
比如,你在某個C文件里,這樣寫:
bit Bit00 = 0;
bit Bit01 = 0;
bit Bit02 = 0;
bit Bit03 = 0;
一直定義128個,把所有位空間佔滿,那麼,這樣,就可以肯定Bit00的地址是0x20的最低位,bit01的地址是0x20的次低位了。
2 用sbit,而不用bit.
比如:unsigned char data B_Var[16] = 0;
sbit Led_Status1 = B_Var[0]^7;那麼,就表示Led_Status 是第20H地址中的最高位。
sbit Led_Status2 = B_Var[6]^3;那麼,就表示Led_Status 是第26H地址中的第3位。
這個其實並不是定義了位變數,只是起了個別名而已。但效果一樣,只是注意,你更改B_Var[6],可能會更改26H的地址第3位,所以,如果你只用位,那麼,就不要操作B_Var[6]這個數組元素。
其實呢,你只要定義個全局變數就行了,沒有必要知道這個bit變數的地址,因為沒有什麼實際意義。
原創文章,作者:YFORU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/316878.html