原创 EDVAC

EDVAC EDVAC------第一臺存儲式計算機,由馮諾依曼主持建造。 EDVAC滿足了馮諾依曼式計算機的特點,由5大部件組成------運算器,控制器,存儲器,輸入設備,輸出設備。 物理上EDVAC有: 一個分發單元,用於從

原创 從C語言到彙編(二)表達式

C語言變量,常量,運算符組成表達式。 在這裏我寫上幾個重要的表達式以及其彙編代碼。 數字交換 int main(void) { int a=1; int b=0; int tmp; tmp=a; a=b; b=tm

原创 從C語言到彙編(二)位運算

從C語言到彙編(二)算術運算 存儲程序式計算機以二進制來表示數據和指令。所以,我們可以對二進制位進行一些操作。 這些操作包括了與(&),或(|),異或(^),取反(~),算術左移(<<),邏輯左移(<<),算術右移(>>),邏輯右

原创 從C語言到彙編(二)算術運算

變量,常量,運算符可以構成表達式,表達式也可以構成語句。 本文將詳細介紹加(+),減(-),乘(*),除(/),取餘(%)運算符。 加 #include <stdio.h> int main(void) { int a=10;

原创 從C語言到彙編(三)函數實現之棧幀

X86下C語言函數使用棧幀來實現傳入參數和處理局部變量的。 每個函數開始前都將執行 pushl %ebp movl %esp,%ebp 結束時都將執行 leave ret 以sum函數爲例 int sum(int a,int

原创 通用計算機

通用計算機又稱爲存儲程序式計算機。什麼是程序,程序是一個由許多指令構成的東西。那麼存儲程序式計算機也可以認爲是存儲指令式計算機。 什麼是指令呢?指令是我們人類定義的計算機操作行爲。在定義指令時需要先定義具體指令的行爲。一般可以將指令分爲數

原创 怎樣高效寫彙編代碼

C語言中有變量的概念,而彙編裏沒有。變量指定了內存中佔用的字節數,對它的讀寫可以通過其地址來引用 ,所以我們可以像C語言一樣定義數據類型,並將變量名寫入彙編代碼中。之後在將變量名替換爲地址。 舉例 .section .rodata

原创 從C語言到彙編(二)++/--運算

相信C語言的使用者對++/–運算符不會陌生吧。又是前綴,又是後綴的++/–一定讓你感到困惑吧!其實以前我也是這樣的,不過在學習了彙編以後,我看了C語言生成的彙編代碼,這才徹底的理解了++/–運算符。 先從最簡單的++運算符開始吧。

原创 從C語言到彙編(三)if語句

if 從最簡單的if語句開始。 #include <stdio.h> int main(void) { int a; scanf("%d",&a); if((a&1)==0) { printf("is even!"

原创 從C語言到彙編(三)函數實現之局部變量

以sum函數爲例 int sum(int a,int b) { return a+b; } 它的彙編代碼 .text .global sum sum: pushl %ebp movl %esp,%ebp movl 8(%

原创 從C語言到彙編(二)輸入輸出函數

日常運行程序時,我們經常要用到輸入輸出函數。輸入經常來自於鍵盤,輸出經常用於屏幕。而C語言標準庫提供了相應的函數scanf和printf。 scanf函數和printf函數的函數原型是: int scanf(const char

原创 從C語言到彙編(二)類型裝換

在C語言中,很多情況會進行隱式的算術類型轉換。一般來說,如果二元運算符的兩個操作數具有不同的類型,那麼在進行運算之前先要把“較低”的類型提升爲“較高”的類型。運算的結果爲較高的類型。轉換規則: 首先,如果任何一個操作數爲long

原创 從C語言到彙編(三)函數實現之參數傳遞和函數返回值

以sum函數爲例 int sum(int a,int b) { return a+b; } 它的彙編代碼 .text .global sum sum: pushl %ebp movl %esp,%ebp movl 8(%

原创 從C語言到彙編(三)循環語句

while語句是3種循環語句的一種。如果條件滿足則不斷執行。 看代碼。 #include <stdio.h> int main(void) { int x=0; while(x*x<1000) { printf("%d\

原创 從C語言到彙編(一)變量

變量和常量是程序處理的兩種基本數據對象。聲明語句說明變量的名字及類型,也可以指定變量的初始值。 變量佔用了內存的一塊區域,不同數據類型的變量佔用的字節大小各不相同。 類型 字節大小 char 1 short 2