通用計算機

通用計算機又稱爲存儲程序式計算機。什麼是程序,程序是一個由許多指令構成的東西。那麼存儲程序式計算機也可以認爲是存儲指令式計算機。

什麼是指令呢?指令是我們人類定義的計算機操作行爲。在定義指令時需要先定義具體指令的行爲。一般可以將指令分爲數據傳輸指令,算術/邏輯操作指令,比較指令,跳轉指令,函數調用/返回指令。在定義計算機需要的每條指令後,就要爲每條指令編碼。用0/1串編碼指令。有了計算機的指令後,也就是0/1串,就可以用各種邏輯門組合出可以執行這些0/1串對應的指令的控制器和運算器。也就是說控制器和運算器作爲計算的的基本部件來運行指令。

既然是存儲程序式計算機,必然需要存儲指令的部件,而這個部件就是內存。內存裏不僅保存了指令還有數據。上面說了指令編碼爲0/1串,也就是二進制數字。而數字也是使用二進制的。二進制的運算與十進制運算是相同的。而內存即存儲器也成爲了計算機的基本部件。

計算機從外部存儲設備中將程序裝入內存中,cpu指向內存的第一條指令然後開始一條一條執行。

控制器,運算器,存儲器,輸入設備,輸出設備構成了通用計算機的五大部件。

以下是x86CPU執行的指令。

.text
.global max

max:
    pushl %ebp
    movl %esp,%ebp
    
    movl 8(%ebp),%eax
    cmpl 12(%ebp),%eax
    jge .L1
    movl 12(%ebp),%eax
.L1:
    leave
    ret

從機器指令的角度看x86計算機是這樣的,運算器和控制器組成的cpu我能看到的是eax,ebx,ecx,edx,esi,edi,ebp,esp這8個寄存器,標誌位寄存器ZF,SF,OF,CF,PC指針寄存器。存儲器。

計算機各種指令都用到上面的可見部件。

x86也有一系列對應的指令集,指令集有自己的編碼。

movb $1,-1(%ebp)
movw $1,-2(%ebp)
movl $1,-4(%ebp)
movsbl -1(%ebp),%eax
movswl -2(%ebp),%eax
movzbl -1(%ebp),%eax
movzwl -2(%ebp),%eax
pushl -4(%ebp)
popl -4(%ebp)
addl $4,-4(%ebp)
subl $4,-4(%ebp)
imull $4,-4(%ebp)
neg -4(%ebp)
andl $4,-4(%ebp)
orl $4,-4(%ebp)
xorl $4,-4(%ebp)
notl -4(%ebp)
cmpl %eax,-4(%ebp)
testl %eax,-4(%ebp)
je .L1
jne .L1
jl .L1
jle .L1
jg .L1
jge .L1
ja .L1
jae .L1
jb .L1
jbe .L1
call printf
ret
leave

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章