BCC16VM 教材:流程控制--if-else |
繼續前一節,我們用 test larger 和 goto 來示範 if-else 之流程控制。
寫一個程式,如果 0000 的數值 > 6,則輸出 1; 否則輸出 0。達成任務的演算法非常簡單,就是
指令位址 | 組合語言 | 機器碼 |
---|---|---|
0000 | load R0 0 | 10100000 |
0001 | generate 6 | 01010110 |
0010 | test larger R0 R2 | 01100010 |
0011 | goto 6 | 10000110 |
0100 | generate 0 | 01010000 |
0101 | print R2 | 00001100 |
0110 | stop | 00000000 |
0111 | generate 1 | 01010001 |
1000 | print R2 | 00001100 |
1001 | stop | 00000000 |
【注意】BCC16VM 有錯,test larger 變成了測試 >= 我們將會修改
在上述程式裡面,如果 test larger 為真,則跳到後面的機器碼去做那三句指令。 如果 test larger 為否,則從下面第二個指令開始做起。 上述程式用了 10 個機器碼。如果善用 goto,還可以節省一個機器碼。如下。
指令位址 | 記號 | 機器碼 |
---|---|---|
0000 | load R0 0 | 10100000 |
0001 | generate 6 | 01010110 |
0010 | test larger R0 R2 | 01100010 |
0011 | goto 5 | 10000101 |
0100 | generate 0 | 01010000 |
0101 | goto 6 | 10000110 |
0110 | generate 1 | 00000000 |
0111 | print R2 | 00001100 |
1000 | stop | 00000000 |
在執行速度很慢的機器上,或者記憶體很少的機器上, 程式設計師或許值得花心思去節省一個機器碼。 但是一般而言,方便就好。
習題
單維彰 (2004/06/10) --- |