暫存器的保護與恢復與相關子程式的書寫

2022-04-06 18:09:19 字數 1325 閱讀 3582

子程式為了完成一些功能,通常要使用一些暫存器來存放內容,有時候還要使用一些儲存單元來存放內容,也就是說,在子程式執行時通常會破壞一些暫存器原有的內容,如果不採取措施,在呼叫子程式之後,主程式就無法在使用存放在這些暫存器或者儲存單元的原有內容了,這常常會導致主程式錯誤,為此,要對有關的暫存器或儲存單元進行保護和恢復

暫存器的保護和恢復的方法有兩種

把需要保護的暫存器的內容,在主程式中壓入堆疊和彈出堆疊,這種方法的優點是在每次呼叫子程式的時候,只要把主程式所關心的暫存器壓入堆疊即可,但是缺點是在主程式中使用壓入和彈出堆疊操作會使得主程式不容易理解,如果要多次呼叫子函式,常常會忘記把某個暫存器壓入堆疊

在子程式一開始就把子程式中要改變的暫存器內容壓入堆疊,在返回之前在恢復這些暫存器的內容這是一種常用的方法

子程式的書寫舉例

例題1,寫乙個把ascii碼則表示的兩位十進位制數轉換為對應二進位制數的子程式

1 ;入口引數:dh = 十位數ascii碼,dl =個位數ascii碼

2 ;出口引數al =對應二進位制數

3subr proc

4mov al,dh

5and al,0fh

6 mov ah,10

7mul ah

8mov ah,dl

9and ah,0fh

10add al,ah

11ret

12 subr endp

view code

例題2:寫乙個把16位二進位制數轉換為4位十六進製制數ascii碼的子程式

1 ;入口引數:dx=欲轉換的二進位制數

2 ; ds:bx =存放轉換所得ascii碼串的緩衝區首位址

3;出口函式:十六進製制數ascii碼串按照高位到低位的順序存放在指定的緩衝區中

4htascs proc

5 mov cx,4

6 htascs1:rol dx,1

7 rol dx,1

8 rol dx,1

9 rol dx,1

10mov al,dl

11call htoasc

12mov [bx],al

13inc bx

14loop htascs1

15ret

16 htascs endp

view code

CPU相關知識 暫存器與儲存器的區別

儲存器一般在cpu外,一般指硬碟,u盤等可以在切斷電源後儲存資料的裝置,容量一般比較大,缺點是讀寫速度都很慢,普通的機械硬碟讀寫速度一般是 50mb s左右。記憶體和暫存器就是為了解決儲存器讀寫速度慢而產生的多級儲存機制,從20世紀50年代開始,磁芯儲存器曾一度成為主存的主要儲存介質,但從20世紀7...

暫存器與快取的區別

暫存器是cpu內部重要的資料儲存資源,是彙編程式設計師能直接使用的硬體資源之一。由於暫存器的訪問速度比記憶體快,所以,在用組合語言編寫程式時,要盡可能充分利用暫存器的儲存功能。暫存器一般用來儲存程式的中間結果,為隨後的指令快速提供運算元,從而避免把中間結果存入記憶體,再讀取記憶體的操作。在高階語言 ...

暫存器與儲存器的區別

儲存器在cpu外,一般指硬碟,u盤等可以在切斷電源後儲存資料的裝置,容量一般比較大,缺點是讀寫速度都很慢,普通的機械硬碟讀寫速度一般是50mb s左右。記憶體和暫存器就是為了解決儲存器讀寫速度慢而產生的多級儲存機制,從20世紀50年代開始,磁芯儲存器曾一度成為主存的主要儲存介質,但從20世紀70年代...