❶ c語言轉匯編問題
當然可以
不過c語言生成的程序,局部變數段地址在ss裡面,全局變數段地址在ds裡面。
讀寫數據需要確定數據的段地址和偏移地址。
對於段地址。 若int a=500是局部變數,那麼寫入的時候需要保存段寄存器裡面的值是ss。是全部變數則保證段寄存器裡面的值是ds。
對於偏移地址,c語言可以用&a這樣的方式獲得。
全局變數的寫法大致是如下代碼
mov bx, &a
mov wrod ptr ds:[bx], 500
❷ 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語言中,如何定義單片機的寄存器
位地址在匯編語言中,只能直接定址,不支持間接定址。那麼,在 C 語言中,也就不能用指針來操作。所以不能定義單片機的寄存器。
訪問寄存器可以通過直接地址引用來完成。
例如52單片機的寄存器有4組,分別為00H-07H,08H-0FH,10H-17H,18H-1FH,各組均8位元組,要結合程序狀態字寄存器PSW(D0H)中的RS0,RS1的組合來確定是哪一組。
可以定義一個訪問Rn的函數typedefunsignedcharuchar;
uchardacRn(ucharn)//n=[0..7]
{
uchardata*p;
n+=(PSW&0x18);//PSW7:CY6:AC5:F04:RS13:RS02:OV1:F10:P
//本來要右移三位變為0-3,但由於是8個一組要乘以8(左移3位),所以直接加上寄存器編號就可以了
return*(uchardata*)n;
}
❹ c語言訪問寄存器的問題
C語言在X86下沒有直接操作寄存器的代碼,雖然可以使用register關鍵字聲明寄存器變數,但無法指定使用哪一個寄存器;
使用嵌入式匯編可以達到如題所述目的。例如
__asm(mov eax,#01);
❺ 51單片機C語言工作寄存器問題
頭文件里定義了PSW
當PSW中的RS1、RS0發生變化時對應的工作區發生相應的變化,對應關系為:
00:工作區0,R0~R7對應地址00H~07H
01:工作區1,R0~R7對應地址08H~0FH
10:工作區2,R0~R7對應地址10H~17H
11:工作區3,R0~R7對應地址18H~1FH
RS1/RS0是靠軟體來設置的,你可以根據不同情況自由設置,一般中斷時用得較多,避免影響正常流程下的工作寄存器值。
❻ C語言 我是初學者
你說的是16位系統吧,16位系統寄存器是16位的,所以一個寄存器只能尋64K大小的空間,而使用的地址空間確是1M,1M是是2的20次方也就是20位,所以要借用段寄存器4位,加上本身的寄存器的16位,正好是20位,2的20次方是1M
❼ C語言中的寄存器是什麼干什麼用
寄存器是和硬體有關的,和你的C語言寫的程序所運行的平台有關。積存器就是硬體中存放一些數據,變數的地方,有相應的含義。