彙編中如何將中文壓棧,彙編中如何將中文壓棧

2021-03-04 09:01:11 字數 5999 閱讀 1502

1樓:匿名使用者

比如baipush 0x00216f6c

是壓如乙個位址啊du

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

彙編裡的push功能是壓棧但為什麼要壓棧的呢?

2樓:匿名使用者

電腦程式用來放資料的地方有兩種,乙個是堆,乙個是棧。棧一般用來放一些函式的臨時變數,還有中斷和呼叫函式時的返回位址。因為這些位址都是臨時的,所以在棧的出棧和進棧的時候可以動態的進入和刪除。

呼叫函式和中斷的時候,臨時變數和返回位址就暫存在棧中。函式呼叫完了,臨時變數和返回位址就從棧刪除了。所以棧一般來說是臨時變數,呼叫函式會自動**記憶體。

這就是push 和 pop 的功能了。相當於乙個暫時儲存資料的地方。 而堆的話一般用來動態分配記憶體,分配的記憶體一般不會自動釋放。

3樓:匿名使用者

計算機在運算的時候大部分情況會把資料放到暫存器裡運算,而呼叫函式的時候,會有新的數值要使用這些暫存器,所以要把這些暫存器裡的內容儲存起來,就是保護現場。因為棧的先入後出非常適合這一操作,所以每次函式呼叫前都有入棧操作,函式返回是出棧還原現場

組合語言中什麼是壓棧出棧?

4樓:匿名使用者

棧是一種線性資料結構,它遵循後進先出的順序。有乙個指標總指向棧頂。打個比方:

乙個棧就相當於乙個桶,入棧就是向裡面裝東西,先裝的在下面後裝的在上面,裝乙個指標就會加1,指向新裝的東西,出棧就相當於取出東西,只有先取上面的,再取下面的,當取乙個後指標就會減一,即指標始終指向桶裡最上面那個東西。

5樓:匿名使用者

可以理解成機槍的彈夾,彈夾就是乙個棧,子彈一顆一顆壓進去,就是壓棧,有個順序特點就是先進後出,後進先出,出棧就是子彈裝號了一顆一顆打出來,棧的清理就是把彈夾清空,清掉彈夾裡的子彈。堆疊就是把子彈放到彈夾裡,堆在那裡了,實際意思都差不多。

c語言裡棧就可以用陣列來做,把資料像子彈一樣壓陣列裡就是了。

6樓:匿名使用者

壓棧就是乙個指令,遵循先進先出,後進後出原理,為了在產生中斷時候,可以儲存資料用的。

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

7樓:匿名使用者

就像乙個裝桌球的盒子,只有乙個口能開啟

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

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

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

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

8樓:匿名使用者

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

9樓:匿名使用者

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

組合語言call指令都將什麼壓入堆疊?int指令呢?

10樓:會點魔法

call指令bai段內呼叫將指令指標ip入棧du,段zhi

間呼叫先入棧dao段基址cs,再入棧ip。call呼叫ret返回再講位址彈回出,相關變數答

值改變。而int指令要先將flags(狀態標誌位)入棧,再將cs入棧,再將ip入棧,然後還要將相關暫存器值入棧,iret返回後,相關暫存器的值不發生變化。不知我有沒有將call和int指令內容給你講明白,不明白再問哈

11樓:

首先指令暫存器在16/32/64位下分別是ip,eip,rip,標誌暫存器是flags,eflags,rflags

下面都以32位為例

call將下一條指令的cs:eip壓入堆疊int要看是專什屬麼模式,還有是否更改cpl,行為比較複雜,反正最後壓入堆疊的三個是eflags,cs和下一條指令的eip

具體可以參考intel或amd的文件

組合語言用指令pusha到底把、哪些壓棧了呢?

12樓:清風迎明月

如果是51微控制器,那麼沒有push a指令,可以是push acc。進棧時,看你的sp開在什麼地方,先要對sp加1,再進棧。

例如:mov sp,#60h

push acc

那麼,執行push acc時,先sp+1,那麼sp指向61h,然後將acc的內容推入61h中!

13樓:水墨御風

是51微控制器的吧,應該是將直接位址所指向的目的運算元送入sp所指向的單元吧!實現入棧操作。

14樓:匿名使用者

通用暫存器的內容壓入堆疊。這些暫存器按以下順序儲存到堆疊:eax、ecx、edx、ebx、ebp、esp(原始值)、ebp、esi 及 edi(如果當前運算元大小屬性為 32)

在組合語言中的如何人對立即數進行壓棧

15樓:匿名使用者

入棧操作是字**ai

作,在8086/8088機型中不支du持直接對立即數壓棧zhi,要先放入寄存dao器中

mov ax,#字立回即數

push ax 即可

在pentium機型中答對該指令加強了,可以直接將立即數壓入堆疊

16樓:匿名使用者

先放到乙個暫存器裡,然後壓棧

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

17樓:匿名使用者

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

入棧指令是: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碼轉換為十六進位制。

18樓:匿名使用者

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

19樓:匿名使用者

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

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

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

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

code segment

assume cs:code

*** 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進行入口引數設定。

20樓:匿名使用者

用於快取資料,保護暫存器或者進行暫存器與暫存器間資料傳輸。而且有些暫存器的值只能通過堆疊操作完成。比如程式暫存器的值cs只能通過堆疊操作完成讀取:

push cs

pop bx; 或者 pop ds之類。

也用於子函式(子例程,通過call指令呼叫)的引數傳遞。

call _sub

_sub: push ax ; 儲存axpush bx ; 儲存bx

mov ax, 128; 因為下面會改寫這兩個暫存器mov bx, 125;

.... ; 進行相關功能操作pop bx ; 完成後恢復bx值pop ax ; 完成後恢復ax值ret

cad中如何將整體圖形拆開,CAD中如何將乙個整體圖形拆開

cad中移 形的方法 你好,可bai以用pe命令合併圖形,du有時合併不了先把圖zhi 形用x拆開先。你要dao是說的是塊的話就用版b,先給塊定個名權字,然後拾取乙個點,再點選擇要的對像點確定,選到的圖形就成了乙個整體了,還有你說用ro時不對,其實有很多種方法旋轉角度的,你輸入數值旋轉是反方向轉的,...

如何將visio中圖匯入到中,如何將visio中圖匯入到word中

將visio軟體中的 匯入到word應用程式的方法如下 1 通過桌面快捷方式或搜尋來開啟word文件。並在隨後開啟的介面右側點選 空白文件 新建乙個空白文件,隨後在選單欄點選 插入 進入到插入操作介面。2 在隨後彈出的軟體對話方塊中點選介面右上角的 物件 按鈕,隨後在自動彈出的選項中,選擇 物件 j...

如何將中的提撒來,如何將乙個word文件中的一頁提取出來

word中用複製貼上去提取一頁容易格式變化,可以把當前文件另存乙份,然後把除所需頁外的所有頁面刪除,就可以變為只有一頁的文件,步驟如下 所需材料 word。一 首先開啟原文件,點選左上角 選項 二 彈出的選單內滑鼠移到 另存為 三 接著點選 word 文件 把此文件另存乙個文件。四 開啟另存的文件,...