計概 - 低階程式語言與虛擬碼

計算機概論 2018-02-07 694

電腦的動作#

即可程式化 programmable、儲存 store、擷取 retrieve 及運算 process。

機器語言#

機器語言是電腦唯一能執行的指令,由二進制的數字組成。

Pep/8 虛擬電腦#

依據不同的CPU會有不同的機器語言,而Pep/8為一台假想的電腦,具有真實電腦應有的特徵,及39個機器語言指令。

  • 記憶單元:由65536個位元組的記憶體組成。
  • 字語長度:2個位元組,也就是16位元。
  • CPU 內有7個暫存器,以下會討論到三個:
    • PC 程式計數器:存放下一個被執行的指令位址。
    • IR 程式暫存器:儲存目前執行的指令。
    • 累加器(A暫存器)。

一個位元組能表示的最大數為255(base 10),也就是11111111(base 2)、0xFF,一個字語(16位元)能表示的最大數為65535,也就是0xFFFF,若要表示負數,則範圍為0x-7FFF~0x7FFF

指令格式#

有兩個部分:
8bits 的指令指標 instruction specifier:表示要執行何種運算,及指標需如何解讀。
16bits 的運算元指標 operand specifier(非必要):存放運算元本身或運算元地址。

  • 指令指標格式

運算碼 operation codes (opcodes) 有4~8個位元長度,我們討論4或是5個bit的,其中 4bits 的第五個 bit 用來表示使用哪個暫存器,暫存器指標為0代表使用A暫存器。

定址模式指標佔 3bits,如果為000代表為立即定址,代表運算元指標即運算元本身;001為直接定址,代表運算元指標為記憶體位址;還有兩種定址模式不討論。


組合語言#

以指定的字母來助憶機器語言,由組譯器負責翻譯。

Pep/8 組合語言#

運算碼由0x和四位16進位值組成,定址模式由i(立即)或d(直接)表示。

組合語言 機器語言 運算元指標
STOP 0000
LDA 1100 0x0008,i
LDA 1100 0x0008,d
STA 1110 0x0008,d
ADDA 0111 0x0008,i
ADDA 0111 0x0008,d
SUBA 1000 0x0008,i
SUBA 1000 0x0008,d
BR
CHARI 01001 0x0008,d
CHARO 01010 0x0008,i
CHARO 01010 0x0008,d
DECI 00110 0x0008,d
DECO 00111 0x0008,i
DECO 00111 0x0008,d

組譯器指揮動作#

  • .ASCII+”STR/x00":表示一組字串。
  • .BLOCK+位元組數目:產生一個空間。
  • .WORD+值:指派一個值給字語。
  • .END:結束。

分歧指令#

  • BRLT,若小於則跳至分歧。
  • BREQ,若等於則跳至分歧。

演算法表示#

虛擬碼 pseudocode 功能#

  • 變數:出現的名稱,需反應其角色。
  • 指定:變數需要放值,如 Set sum to 0,或是 sum ← 0。

也可以用 Set sum to sum + num,或是 sum ← sum + num。

  • 輸入/輸出
Write “Hello word!”
Read num
  • 選擇
IF(sum<0)
ELSE …
  • 重複
WHILE(counter < limit)