彙編裡的PUSH壓棧使用他是為了進行什麼步驟而使用的呢

時間 2021-09-02 20:58:47

1樓:匿名使用者

push和poppush相當於是寄存東西pop相當於把他取出來你要去商店買東西,暫時把手上的東西寄存了等買完了再把他拿出來是一個道理

2樓:匿名使用者

不丟失資料進行壓入(push)棧保護,出棧(pop)恢復原資料。例如共用累加器a,進棧前壓入保護,累加器可在進行運算,出棧恢復原累加器中的數值。結果不會影響原數值。

3樓:匿名使用者

兩個作用!1:push ebp ;儲存ebp的值到堆疊mov ebp,esp ;ebp使用其它的值...........

pop ebp;還原ebp的值 2:呼叫其它模組時push eax;傳遞引數call ........

4樓:匿名使用者

因為cpu裡的暫存器只有4個,eax,ebx,ecx,edx,所以你在編寫程式的時候,可能這4個暫存器裡都儲存有資料了,但是你還需要再用暫存器來儲存資料,這時,4個暫存器就明顯的不夠用了,那麼怎麼辦呢,當然,我們可以將原暫存器中的內容壓棧,然後這時暫存器中的資料就存到了記憶體中的棧段內,暫存器就空出來了,我們就可以繼續使用暫存器來儲存新的資料了,當我們需要使用暫存器中原來的內容時,我們就可以用pop來從棧段中取出原有的資料了,push pop就相當於是一個資料暫存器,

5樓:匿名使用者

你不要想的太複雜,其實它很簡單的,你只要知道它有什麼用就行了,cpu中暫存器的數量是有限的,但是每個程式都不能不用暫存器,所以當一個程式呼叫另一個程式時就要儲存當前暫存器的內容,叫壓棧,等被呼叫的程式執行完了再出棧.

彙編中如何將中文壓棧 5

6樓:匿名使用者

比如baipush 0x00216f6c

是壓如一個地址啊du

那也就是說你的「test hello!」zhi 字串是放在這個地址dao的內(如果是的話)

彙編push壓桟指令 5

7樓:砍侃看

push可以儲存現場,然後呼叫其他函式,等其他函式返回後,又可以接著原來的執行。push也可以將引數傳遞給函式呼叫。當然還有其他的作用。

彙編 請問 如果把 " greeting! \r\n" 壓入棧中 push了多少bytes?

8樓:匿名使用者

pop指令bai本身並不會造成cs和ip跳到du別的地方,它只zhi是單純地起到dao

將ss:sp所指的內記憶體內容送入你指定容的目的地址並同時修改sp的值的作用。你的程式會跳到別處,是因為你在其它地方使用堆疊的時候,比如子程式中最後的ret,由於你堆疊資料關係錯位,導致返回時沒有能獲得當初你call時壓入堆疊的正確的返回地址,而將別的錯誤的數當成了返回地址的原因。

一般說來,使用堆疊時,必須由程式設計者自己考慮好堆疊裡的資料是如何使用的,要通過程式指令的運用,保證你彈出的是你需要的那個數,而不是別的數。這就要求在使用堆疊時應當push進一個就對應pop出棧一個(我稱它為平衡操作),且必須是先進的數後出。建議你在分析程式執行時自己畫一個堆疊中資料內容的示意圖進行分析,搞清楚指令執行過程中每個時刻當前的棧頂在**,棧裡有哪些資料,它們如何變化,這樣就不容易亂了。

彙編裡的"push"和"pop"起了什麼功能,,誰能用通俗點的話告訴我嗎??

9樓:

sh」指令的功能是實現將一個暫存器中的資料壓入棧操作。push的操作過程是: (sp)(sp)-2,((sp))<-oprd。

先修改堆疊指標sp(壓入時為自動減2),然後,將指定的運算元送入新的棧頂位置。

彙編裡的"pop"指令的功能是實現將一個暫存器中的資料彈出棧操作。pop的操作過程是:將堆疊段中當前ss:

sp所指的字內容彈出到某個暫存器或段暫存器或記憶體單元。再 sp←sp+2。

10樓:匿名使用者

進出棧,棧是filo(first in last out),先進後出也就是把暫存器裡的資料臨時儲存一下,相當與一個倉庫不是你說的那樣子

假設eax=4,ebx=5

push eax

push ebx

pop eax

pop ebx

結果eax=5 ebx=4(體現了先進後出)

11樓:雍朔

push和pop是堆疊操作指令,push [reg]/[num] 是將reg暫存器中的值或是數字num壓入堆疊中,而pop [reg]是將堆疊棧頂的值彈出到reg暫存器中,並將這個值從堆疊中刪去.

堆疊可以看成是一個陣列,但只能在棧頂(可以認為是陣列的一端)對資料進行操作,起臨時儲存資料的作用,32位彙編中,ss:esp指向堆疊棧頂,16位則是ss:sp.

12樓:鯤鵬展翅

堆疊是一端固定,另一端變化的特殊儲存空間,你可以把它想像成裝固體的桶,桶底(棧底)固定,桶裡面所裝固體的最高處定義為桶頂(棧頂)。如果什麼都沒有裝時,桶頂和桶底相等,當裝一層沙子後,桶頂升高(即棧頂地址-2,相當於入棧push),再裝一層水泥,桶頂再次升高,(即棧頂地址又-2),當你往出倒東西的時候,你先倒出最上層的水泥,桶頂下降(即棧頂地址+2,相當出棧pop),然後你才能倒出沙子。所以堆疊是先進來的先出去。

組合語言中的棧,壓棧,出棧是什麼意思

13樓:匿名使用者

就像一個裝乒乓球的盒子,只有一個口能開啟

裡面一個球不放,就是空棧

往裡面放一個球,就是壓棧

從裡邊拿一個球,就是出棧

都放滿了,就是滿棧,再放就會溢位

14樓:匿名使用者

棧就是分配的一些連續的記憶體空間 注意是連續的壓棧就是把一個資料放到棧中的頂部,然後依次往上疊,就和疊一堆書一樣出棧就是把棧頂部的資料拿出來,就像是把一疊書的最上面的一本拿出來一樣

15樓:匿名使用者

說的通俗點,就是一個資料的儲存與讀取。棧是個儲存器,壓棧就是往裡面存資料,出棧就是取資料

關於組合語言問題,入棧出棧什麼用

16樓:匿名使用者

組合語言中堆疊的操作有專門的語句指令。

入棧指令是:push

出棧指令是:pop

比如:mov a,30h ;將一個壓縮bcd碼送累加器apush acc ;壓棧保護

anl a,#0fh ;保留低四位

mov 30h,a ;回送給30h

pop acc ;出棧

swap a ;高低四位互換

anl a,#0fh ;保留低四位

mov b,#10 ;b送10

mul ab ;乘10

add a,30h ;與個位相加

mov 30h,a ;回送給30h

以上程式段將一個壓縮bcd碼轉換為十六進位制。

17樓:匿名使用者

保護資料用。就是將ds ax 裡的資料先暫存在堆疊裡,這就是入棧(指令為push)。然後,可以對它們進行操作而不會影響原來的資料。到需要原來的資料時,再出棧(pop) 。

18樓:匿名使用者

對於現代的計算機來說,棧是一種非常關鍵、極其重要的資料結構。

棧就相當於一個細長的裝彈珠的瓶子(瓶口、瓶身內部截面均只能通過一個彈珠),不同顏色的彈珠只能從瓶口裝入,也只能從瓶口取出,在瓶內的彈珠的順序是不能改變的。這些彈珠具有「先進後出、後進先出」的特性。瓶子有一定的長度,裝滿彈珠後就不能再裝了,再裝就直接滾跑了(溢位)。

程式不都是線性的,有分支、有迴圈,有主程式、也有子程式。在子程式中,棧通常用來儲存現場(進棧--push、pusha、pushf),在棧中定義區域性變數,執行完成後要恢復現場(出棧--popf、popa、pop)。沒有棧這種資料結構,很難想象現在的軟體是個什麼樣子。

例:用組合語言(masm)編寫程式段,實現從鍵盤輸入十個一位10進位制數後累加以非壓縮bcd碼形式存放在ah和al中。

code segment

assume cs:code

org 100h

start:

jmp bbb

lfcr db 13,10,'$'

bbb:

push cs

pop ds

call inputnum

mov ah,9

lea dx,lfcr

int 21h

lea si,array

mov ch,0

mov cl,byte ptr[num]

mov ax,0

lp:add ax,word ptr[si]

daa ; 十進位制加法調整指令

inc si

inc si

loop lp

call dispnum

mov ah,4ch

int 21h

dispnum proc near

; 將要顯示的資料放入al中

mov dl,al ; 將al暫存在dl中

and al,0fh ; 取al的低4位

mov bl,al ; 非壓縮的bcd碼

add bl,30h ; 轉成ascii碼

mov al,dl ; 取回al 並經以下4次右移取出al的高4位

shr al,1

shr al,1

shr al,1

shr al,1

mov bh,al ; 非壓縮的bcd碼

add bh,30h ; 轉成ascii碼

mov ax,bx ; 非壓縮的兩位數的ascii碼存放在ax中

mov byte ptr[y+4],al

mov byte ptr[y+3],ah

mov ah,9

lea dx,y

int 21h

rety db 10,13,0,0,0,'$'

dispnum endp

inputnum proc near

; 輸入的資料以一個空格分隔,以回車符結束輸入

lea di,array ;將陣列第一個元素的有效地址置入di

mov byte ptr[num],0

stin:

mov ax,0

push ax

again1:

mov ah,1

int 21h

mov byte ptr[char],al

cmp al,13

je line0

cmp al,' '

je line0

sub al,30h

mov ah,0

mov si,ax

pop ax

mov cl,10

mov ch,0

mul cx

add ax,si

push ax

jmp again1

line0:

pop ax

mov word ptr[di],ax

inc byte ptr[num]

cmp byte ptr[char],13

je stinend

inc di

inc di

jmp stin

stinend:

retarray dw 100 dup(0)

num db 0

char db ?

inputnum endp

code ends

end start

請注意inputnum子程式,在開始部分執行了 push ax,就是為了儲存暫存器ax的值,因為在int 21h中斷子程式中要用ax進行入口引數設定。

C語言棧的問題,我main函式是想壓入進棧1,2,3,

我覺得is empty 的判定應該是 head next null 而不是head null 還有就是,push和pop要修改到head本身,所以傳參要傳入指向head的指標 include include struct node struct node chuangjian void 建立一個空棧...

甲骨文是多少年前出現的 使用他的人是誰

甲骨文因鐫刻於龜甲與獸骨上而得名,為殷商流傳之書跡 內容為記載盤庚遷殷至紂王間二百七十年之卜辭,為最早之書跡。殷商有三大特色,即信史 飲酒及敬鬼神 也因為如此,這些決定漁撈 征伐 農業諸多事情的龜甲,才能在後世重見天日,成為研究中國文字重要的資料。商代已有精良筆墨,書體因經契刻,風格瘦勁鋒利,具有刀...

注塑機裡的背壓有什麼作用,注塑機什麼是背壓,背壓的作用是什麼?

戲娛樂 背壓是注塑成型工藝中控制熔料質量及產品質量的重要引數之一,合適的背壓對於提高產品質量有著重要的作用,不可忽視!在塑料熔融 塑化過程中,熔料不斷移向料微前端 計量室內 且越來越多,逐漸形成一個壓力推動螺桿向後退。為了阻止螺桿後退過快,確保熔料均勻壓實,需要給螺桿提供一個反方向的壓力,這個反方向...