組合語言中指標的作用,組合語言裡面怎麼實現指標的功能?

2022-07-06 18:26:46 字數 5790 閱讀 8625

1樓:衛夢朝

c語言中的指標和組合語言中的暫存器間接定址差不多。c語言中變數的指標就是該變數的地址。如指標變數p的地址為2000h,則*p所訪問的是地址2000h的儲存單元,x=*p,實現把地址2000h的儲存單元的內容送給變數x。

2樓:匿名使用者

組合語言有指標這個概念,所有記憶體都可以直接用地址訪問,地址就理解為指標;

組合語言中有一個暫存器間接定址,其實就是指標功能的具體體現。比如:

clrram:

mov r0,#30h ;將指標首地址賦值給r0mov r2,#16 ;共處理16個地址的值clr a ;累加器清0

loop:

mov @r0,a ;r0地址的內容清0

inc r0 ;地址(指標)加1

djnz r2,loop ;是否處理完16個資料?

ret這段程式將地址30h~3fh的內容清0,用的就是指標方式。

3樓:匿名使用者

先宣告兩個不同型別的指標,用匯編語句把一個指標的值搬到另一個裡。如int指標轉換為char指標,vc 為例 int *a; char *c=

組合語言裡面怎麼實現指標的功能?

4樓:匿名使用者

組合語言中有一個暫存器間接定址,其實就是指標功能的具體體現。比如:

clrram:

mov r0,#30h ;將指標首地址賦值給r0mov r2,#16 ;共處理16個地址的值clr a ;累加器清0

loop:

mov @r0,a ;r0地址的內容清0inc r0 ;地址(指標)加1djnz r2,loop ;是否處理完16個資料?

ret這段程式將地址30h~3fh的內容清0,用的就是指標方式。

5樓:文刀舍予

我好無語啊~~~~~~~~~~~~~

[ ]裡的暫存器和立即數

所有標號

都是指標啊

給你舉個例子:

c: int main()

assembly:

assume cs:code

code segment

a dw 6;定義一個字,相當於int

start:

add cs:a,4;a=a+4

mov ax,4c00h

int 21h

code ends

end start

再舉一個[ ]的例子:

mov ds,0

mov bx,200h;0000:0200以及後面256個位元組是傳說的安全空間

mov [bx],6

add [bx],4

凡是和地址有關的全是指標

6樓:匿名使用者

彙編裡每一步都是指標

組合語言中的堆疊段指標是幹什麼的

7樓:匿名使用者

堆疊段指標(暫存器ss)是用於確定堆疊在記憶體中的起始位置的暫存器;堆疊段暫存器的作用和其他段暫存器(cs,ds,es)相同,都是為了在一整段的記憶體中劃分割槽域:由於記憶體為一整段儲存單元,cs(**段暫存器)中存放**段的起始位置,ds(資料段暫存器)中存放資料段的起始位置,ss(堆疊段暫存器)中存放堆疊段的起始位置,es(附加段暫存器)中存放附加段的起始位置。

在作業系統架構的記憶體中,堆疊位於程式所使用記憶體的頂端,向記憶體低地址處擴充套件,ds暫存器中存放的是堆疊最低的地址。堆疊本身為記憶體的一部分,但是相對普通記憶體段(ds)的區別在於:普通記憶體段(ds)一般用於存放長久資料,無特殊儲存順序;堆疊記憶體段(ss)一般用於存放暫時資料(例如呼叫函式是的引數),可以使用push,pop指令向棧頂壓入,彈出資料。

另外,若sp(棧頂暫存器)中的值小於ds暫存器(push指令執行過多次)將會引發錯誤:系統顯示某某程式stack overflow(因為ss段往下的記憶體地址屬於資料段的區域)。若sp中的值大於一定程度(由程式的堆疊段大小決定)(pop指令執行過多),也將會引發錯誤:

系統顯示某某程式access violation reading address(因為程式記憶體的頂端上有著其他資料)。

需要注意的是,在較新的作業系統下彙編其平臺下的程式時,程式設計師將無法修改段暫存器中的值(修改會報錯),它們由作業系統自身管理(可以理解為由作業系統編寫者的**管理),其原因是出於安全起見。

8樓:匿名使用者

就象倉庫一樣,用來存放資料用的,只不過它是按先進後出原則組織起來的一段儲存空間而已。

9樓:匿名使用者

堆疊是用來儲存資料的,例如某個暫存器裡面的數值或地址。

堆疊可以理解成一個倉庫,這個倉庫裡有很多格子,每個格子裡放一個東西,每個格子都有一個編號。堆疊指標就是用來查詢格子編號的,假設現在堆疊裡有10個格子,編號依次是0,1,2,3,4,5,6,7,8,9,如果現在堆疊指標是5,那麼就對應5號格子裡的內容(資料或地址)

10樓:匿名使用者

堆疊指標,用於堆疊運算

入站和出站指標都要進行加減,

保證資料的進出

11樓:匿名使用者

16位彙編下堆疊段ss暫存器是表示一個堆疊的基址,實際地址是(ss)*16+(sp)=實體地址,這個是當前對戰指標指向的實際地址。

12樓:匿名使用者

堆疊段是儲存資料的

esp就是地址指標器

push eax時,esp-4

pop eax時,esp+4

程式呼叫

call時會執行壓棧操作,儲存 下一條指令地址返回時會執行出棧操作,取出 上面儲存的地址 放到 pc繼續執行。

當然自己也可以執行入棧,出棧操作,儲存暫存器狀態等甚至可以當作資料段 使用,儲存臨時變數等

13樓:匿名使用者

用於指向堆疊的棧頂,以方便管理堆疊.

c語言中指標的作用是什麼?

14樓:匿名使用者

指標指向地址,指標的特性就是在地址不變的情況下,可以很方便的修改所指向的內容

最重要的應用有兩個,一是函式引數,二是函式指標函式引數:函式返回值只有一個,如果想回傳多個引數,則必須使用指標函式指標:典型應用就是**函式(callback)

15樓:杜爺1號

簡單地說指標就是指向變數和物件的地址。

指標的用途非常廣泛,比如如果你想通過函式改變一個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞一個地址就行,大大提高了效率。

以上還只是指標的初步應用,隨著你在c語言學習上的逐步深入,你會發現更多的用途的。

16樓:匿名使用者

用來簡單的標示一個地址引用。

指向變數地址,便於對變數操作。

就像桌面的快捷方式,它指向一個真實的檔案。

就像給儲存器的某個儲存地址單元起了個名字,操作這個名字就等於操作的這個儲存地址單元,比如,要給某個儲存地址單元賦值,這時候就把值賦給,指向這個儲存地址的名字。也就是說,使用指標表示地址單元比直接用記憶體地址號表示方式,更人性化,操作更靈活。

17樓:匿名使用者

指向地址啊。

比如a是指標

*a 就是指a地址所存的數字。

呼叫其中數字。

18樓:匿名使用者

指標是一種存放另一個變數的地址的變數。

比如申請一個整形變數 int a = 128; 再申請一個指標讓這個指標指向變數a.

int *p;

p = &a; //取a在記憶體中的地址,把a的地址賦給p。這樣p就指向了變數a的地址。

19樓:奧·備侖思

指標,首先從概念上是「變數」。

它存放的是記憶體地址,而不是具體資料。

20樓:天涯海角情緣在

怎麼說指標的作用呢?通俗點講就是當你用上指標的時候,你到目標地的就會有捷徑了,移動性強,可操作性很大,對於資料的刪除、插入、編輯都很方便,換成其他的,則比較麻煩。

21樓:匿名使用者

c語言中指標的作用是什麼?啊這個問題還不好一句回答。這是c本身是低階語言,能夠操動記憶體的特效決定的,早期的時候對計算機說這就是效率。

現在好像不是這樣說了,都說指標很危險,特別是在目前複雜作業系統下。

要是說作用是什麼?是求高效的低階語言特有的特質。

22樓:匿名使用者

指標啊,用來取一個元素在記憶體中的地址

組合語言中「sp」「bp」 「si」「di」的作用?

23樓:大叔

sp 是堆疊指標,當你使用phsu語句的時候就發現有變化

bp是輔助,在特殊時候用

si,di是一組指標

當你需要拷貝一組記憶體的資料的時候

一般是si是源資料指標,di是目的地址指標

cx是計數器。

組合語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可程式設計器件的低階語言,亦稱為符號語言。在組合語言中,用助記符(mnemonics)代替機器指令的操作碼,用地址符號(symbol)或標號(label)代替指令或運算元的地址。

在不同的裝置中,組合語言對應著不同的機器語言指令集,通過彙編過程轉換成機器指令。普遍地說,特定的組合語言和特定的機器語言指令集是一一對應的,不同平臺之間不可直接移植。

許多彙編程式為程式開發、彙編控制、輔助除錯提供了額外的支援機制。有的組合語言程式設計工具經常會提供巨集,它們也被稱為巨集彙編器。

組合語言不像其他大多數的程式設計語言一樣被廣泛用於程式設計。在今天的實際應用中,它通常被應用在底層,硬體操作和高要求的程式優化的場合。驅動程式、嵌入式作業系統和實時執行程式都需要組合語言

組合語言中ptr的作用是什麼

24樓:

ptr-pointer (既指標)得縮寫。彙編裡面ptr是規定的字(既保留字),是用來臨時指定型別的。可以理解為,ptr是臨時的型別轉換,相當於c語言中的強制型別轉換。

如 mov ax,bx ;  是把bx暫存器「裡」的值賦予ax,由於二者都是暫存器,長度已定(word型),所以沒有必要加「word」。

「mov ax,word ptr [bx];」是把記憶體地址等於「bx暫存器的值」的地方所存放的資料賦予ax。

由於只是給出一個記憶體地址,不知道希望賦予ax的,是byte還是word,所以可以用word明確指出;如果不用,(mov ax,[bx];)則在8086中是預設傳遞一個字,即兩個位元組給ax。

擴充套件資料

ptr也可以作為臨時型別轉換

(1)「cmp word ptr[si],'#'」是用si所指向的記憶體的連續兩個位元組與『#』比較,要是改成cmp byte ptr[si],'#'那就是用si指向的那個儲存單元的內容(一個位元組)與『#』比較了。

(2)「jmp near ptr opd」是無條件轉移指令,轉移到段內的標號opd所標識的位置(近型別)。若是「jmp far ptr opd」那就是轉移到另外一個**段的opd所標識的位置了(遠型別)。

25樓:li_麗

ptr應該就是pointer ,說明地址指標型別。

當兩個運算元型別均不明確時,必須用byte ptr(位元組屬性)或word ptr(字屬性)將一個儲存器運算元定義為位元組或字型別。

如:mov byte ptr [si],oah ;(指明[si] 為位元組型別)。

組合語言中ptr的作用是什麼,組合語言中CMP的作用是什麼?

ptr應該就是pointer 說明地址指標型別。當兩個運算元型別均不明確時,必須用byte ptr 位元組屬性 或word ptr 字屬性 將一個儲存器運算元定義為位元組或字型別。如 mov byte ptr si oah 指明 si 為位元組型別 在沒有暫存器名存在的情況下,用操作符 x ptr ...

用組合語言程式設計,用組合語言編寫一個簡單程式

寫一下簡單的演算法吧,先提供一個簡單的畫點子程式 在螢幕顯示一點或一畫素子程式 輸入引數 bx 行地址 0 479 si 列地址 0 639 dl 顏色 0 15 640 480顯示模式 dot proc near push cx 儲存顏色 push dx mov ax,80 行地址 mul bx ...

組合語言中st指令什麼意思組合語言中,ST指令什麼意思?

st是store的簡寫,ld是load簡寫,前面一個是寫,後面一個是讀。st是源暫存器 儲存區,ld是儲存區 目的暫存器。字資料傳送指令 ld,st 這是最簡單的資料傳送指令,不用考慮符號位的問題,直接以機器的位長存取資料。ld 從記憶體中取32位字資料放人暫存器,st將暫存器中的32位字資料儲存到...