程式是如何執行的(二)控制結構的執行

2021-09-08 11:33:40 字數 2164 閱讀 2956

一、if else選擇語句

1、分支跳轉指令

我們將用相應的彙編指令來表示"比較x是否小於y","選擇跳轉到語句塊b"

(1)slt指令-"比較x是否小於y"

格式:slt r4,r1,r2。該指令用來表示比較暫存器r1中的值是否小於r2中的值,如果小於則將暫存器r4置1,否則置0;

格式:slt r4,r1,constant。該指令用來表示比較暫存器r1中的值是否小於常數值constant,如果小於則將暫存器r4置1,否則置0;

(2)sle指令-"判斷小於或等於"

格式:sle r4,r1,constant。該指令比較暫存器r1和常數值constant,如果r1中的數值小於或等於constant,則暫存器r4置1,否則置0;

(3)beqz指令-"選擇跳轉到語句塊操作"

格式:beqz r4,label。指令「beqz」來檢視暫存器中的值是否為0。如果為0,cpu將不再按順序執行下一條語句,而是跳轉到另乙個語句塊。對於將要跳轉到的語句塊,我們可以用乙個「標籤(label)」來標記。beqz需要兩個運算元,前乙個運算元是儲存比較結果的暫存器,另乙個寄

存器是乙個標籤。(匯程式設計序中有些指令塊用標籤label1, label2等標記,執行時就可以根據條件跳轉,或者直接跳轉到這些指令塊處執行)

例:beqz r4,label2,該指令表示如果暫存器r4中的數值為零則跳轉到標籤label2標記的指令塊處

(4)goto指令-"直接跳轉到語句塊"

格式:goto label。表示直接跳轉到標籤label標記的指令處(沒有判斷)

2、if else 選擇語句的執行

(1)執行過程

首先slt指令比較x與y的大小,如果x小於y則暫存器r4值1,否則置零,第二步,beqz指令判斷r4是否為0,如果為0則跳轉到lable0處執行語句塊b,然後順序執行語句塊c,如果r4為1則順序執行語句塊a,然後跳轉到label1處,執行語句塊c

(2)在cpu和記憶體中的執行過程

a:假設if else語句翻譯成彙編指令從位址304處開始儲存在記憶體中,x和y已經從記憶體位址1000、1001處讀取到了暫存器r1和r2處

b:執行slt指令,cpu現將slt指令讀取到指令暫存器ir中進行解讀,然後cpu將r1和r2中的值轉移到alu中,對於比較運算,alu通過減法來判斷,最終將比較結果存回到暫存器r4中,pc加1,指向下一條指令beqz。

c:執行beqz指令,cpu先將beqz指令讀取到指令暫存器ir進行解讀,然後cpu判斷暫存器r4的值

d:如果r4為0則執行步驟e、f,相反執行步驟g、h、i;

e:r4為0跳轉至label0處執行,如果所示pc值變為401,指向label0處,即語句塊b的第一條語句

f:執行完b中所有語句後結束if else 語句,此後pc值為501,順序執行語句塊c

g:r4為1則順序執行語句塊a的第一條語句,這時pc的值為306,執行語句塊a中的第一條語句

h:順序執行完a中所有語句後,pc值為400,指向goto指令

i:如上圖,cpu執行goto指令,跳轉到label1,如圖中虛線2所示,pc值為500,執行執行語句塊c結束if else選擇語句

二、while迴圈語句的執行

三、for迴圈語句的執行

電腦程式是如何執行起來的

肯定有很多人很奇怪電腦程式是如何執行起來的吧。這其中涉及到了電子計算機最底層的原理,大家能夠了解的更為全面一些。我在這裡就簡單而形象的為大家講一講這其中的機理。第三次工業革命與前兩次工業革命有著乙個本質的不同,因為前兩次工業革命都涉及到了新能源的使用,第一次工業革命是蒸汽機的發明,第二次革命是內燃機...

程式的控制結構

if true pass else pass a 33 print a if a 99else print b 另一種寫法,只能寫簡單的 and or not 判斷中常用的符號,not a 表示a的否命題try pass 先執行try,如果出現錯誤就跳到except語句中去 except 現實中很多...

程式的控制結構

分支結構是根據判斷條件結果而選擇的不同向前路徑的執行方式,單分支是最簡單的方式 如果 則 猜數 據 guess eval input if guess 99 print 猜對了 根據條件判斷的不同,而選擇不同向前路徑的一種結構 猜數字的例子 guess eval input if guess 99 ...