# 計概:低階程式語言與虛擬碼 ## 電腦的動作 >即可程式化 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) … ``` ###### tags: `計算機概論`