電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
[C][MASM] 教你看懂指令行 ! 新手必看 ?! (用c和組語作範例)

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
babu61509
散播福音的祭司


註冊時間: 2007-08-26
文章: 142

681.01 果凍幣

發表發表於: 2008-7-25, AM 9:42 星期五    文章主題: [C][MASM] 教你看懂指令行 ! 新手必看 ?! (用c和組語作範例) 引言回覆

這篇是以前寫的(2,3年了吧)...
所以可能會有些怪怪的地方,覺得怪怪就說一下吧!

我個人是覺得對於初學者想看懂指令有一定的幫助啦... 0 3 0

-----------------------------------------------------------------------
正文開始


1.每種程式語言都有其基本架構,大家在學的時候要先把基本架構記下來喔~

以C為例 :
代碼:

#include <...[前置檔]>

  int main()
  {
   ...[程式段]
  }




以組合語言為例 :
代碼:

 .model small
 .stack 100h
 .data
  ...[資料段]
 .code
  mov ax,@data
  mov ds,ax
  ...[程式段]
  mov ah,4ch
  int 21h
  end


2.再來學的是其基本變數,以及常數宣告 :

以C為例 :
引言回覆:

int (變數名稱); 整數宣告
char (變數名稱); 字元宣告
float (變數名稱); 浮點數(有小數點的數,佔 32 bits)宣告
double (變數名稱); 同上(佔 64 bits)



以組合語言為例 :
引言回覆:

(變數名稱) db (初始值) Byte長度資料宣告(8 bits)
(變數名稱) dw (初始值) Word長度宣告(16 bits)
(變數名稱) dd (初始值) Double Word長度宣告(32 bits)


3.然後就是學看懂指令行(就是一行程式碼) :

其實每種程式語言的程式碼中的每一行都不外乎分成 "指令" ,"物件" ,"指令架構" 3個部分
在這之前要先來瞭解程式碼的指令行結構(以c和組語為例),大概可以分成2種,不過還是要看指令用法 :

一般型 : (大部分的指令行結構)
引言回覆:

[指令]空格[物件和指令架構]

指定型 : (大部分是將右邊的物件指定給左邊的)
引言回覆:

[物件][指令][物件和指令架構]

以C為例 :

一般型 :
引言回覆:

int bb; int 是指令,bb; 是物件和指令架構
if (a>b); if 是指令,(a>b); 是物件和指令架構
for (i=1;i<=10;i++){;} for 是指令,(i=1;i<=10;i++){;} 是物件和指令架構


指定型 :
引言回覆:

a = b + c; = 是指令,a和b+c;是物件和指令架構


以組合語言為例 :

一般型 :
引言回覆:

mov ax,4 mov 是指令,ax,4 是物件和指令架構
add bx,3 add 是指令,bx,3 是物件和指令架構
sub cx,1 sub 是指令,cx,1 是物件和指令架構


指定型 :
引言回覆:

k dw 66666666h dw是指令,k和66666666h是物件和指令架構


(1)指令 : 就是指要用什麼方法來做事 :

以C為例 :
代碼:

 if 是判斷,int 是宣告整數,for 是要跑迴圈


以組合語言為例 :
代碼:

 mov 是搬資料,add 是要加,sub 是要減


(2)物件 : 知道要做什麼動作以後,總要有個被處理的東西吧,就是指那個.( 以開門這個動作來說,開這個動作就是指令,門就是被"開"的物件 )

引言回覆:

int bb; 宣告一個名為bb的整數.(bb就算是物件,被宣告的變數名)
if (a>b); 判斷a是否大於b .(a>b就算是物件,被運算的式子)
for (i=1;i<=10;i++){;} 先設i=1然後判斷i是否<=10 ,是的話就執行{;}內的程式,然後再執行i++,再繼續判斷 i是否<=10 .....等到i不<=10就結束迴圈了. (i=1 ,i<=10 和 i++都算是物件[也算是另外的指令行])

引言回覆:

mov ax,4 把4搬到ax去,也就是設定ax為4 (ax 和 4 都是物件)
add bx,3 將bx加3 (bx 和 3 都是物件)
sub cx,1 將cx減1 (cx 和 1 都是物件)


(3)指令架構 : 使用指令的格式符號,這是各程式語言規定的,有些指令也會有其特別的格式

引言回覆:

int bb; 分號就是指令架構
if (a>b); 括號,分號都是指令架構
for (i=1;i<=10;i++){;} 空格, ( ; ; ) { ; } 都是指令架構


引言回覆:

mov ax,4 逗號就是指令架構
add bx,3 逗號就是指令架構
sub cx,1 逗號就是指令架構


4.寫作程式之前,要先有一個目的(這程式要做什麼用?),然後再一步一步用程式行寫出來,寫完就是一個程式了(有問題就準備殺蟲劑吧 A_A Debug...除錯)


以C為範例 :
代碼:

  題目(輸入 2 個整數,並算出他們的加減乘除)


(1)嗯...先把基本架構打進去!
代碼:

int main()
{
return 0;
}


(2)要輸入2個整數,先宣告2個變數來放吧~
代碼:

int main()
{
int x,y; // 宣告整數變數 x 和 y
return 0;
}


(3)再來是輸入函數 scanf(),要記得先加前置檔(引入) stdio.h,然後,整數是用 %d,scanf()後面的變數記得要加上 & (找出變數的記憶體位置給輸入的數放) ~
代碼:

#include <stdio.h>
int main()
{
int x,y; // 宣告整數變數 x 和 y

scanf("%d %d",&x,&y);
return 0;
}


(4)直接空白輸入好像怪怪的 ? 前面加個顯示 "請輸入2個整數" 好了...
代碼:

#include <stdio.h>
int main()
{
int x,y; // 宣告整數變數 x 和 y

printf("請輸入2個整數 : ");
scanf("%d %d",&x,&y); // 輸入x 和 y
return 0;
}


(5)再來就~邊算邊印出來囉!要記得換行(\n)比較好看喔~裡面有幾個 %d 後面就要有幾個變數喔!!
代碼:

#include <stdio.h>
int main()
{
int x,y; // 宣告整數變數 x 和 y

printf("請輸入2個整數 : ");
scanf("%d %d",&x,&y); // 輸入x 和 y

printf("%d + %d = %d\n ",x,y,x+y); // 算出並印出 x + y
printf("%d - %d = %d\n ",x,y,x-y);
printf("%d * %d = %d\n ",x,y,x*y);
printf("%d / %d = %d\n ",x,y,x/y);
return 0;
}


(7)完成~




以組語為範例 :
代碼:

 題目(1+2+3+...+10 的和為 ? 請宣告一個變數 s 並將和放到 s 內,再用debug查看)


(1)嗯...還是先把架構打進去!
代碼:

.model small
.stack 100h
.data

.code
mov ax,@data
mov ds,ax

mov ah,4ch
int 21h
end


(2)宣告s,用dw應該夠了;初始值用 0,再加個 k = 66666666h 方便debug看好了
代碼:

.model small
.stack 100h
.data
k dd 66666666h ; 方便用
s dw 0 ; 和的家~16 bits大,放1加到10應該夠了
.code
mov ax,@data
mov ds,ax

mov ah,4ch
int 21h
end


(3)1+2+...+10 嗯~要用loop去跑,loop每跑一圈會從cx減一,就設10剛剛好就會從10+9+8+7...+1 跑下來,再加到s變數就可以了!
代碼:

.model small
.stack 100h
.data
k dd 66666666h ; 方便用
s dw 0 ; 和的家~16 bits大,放1加到10應該夠了
.code
mov ax,@data
mov ds,ax

mov cx,10 ; cx 設為10
a: add s,cx ; 把 cx 加到s
loop a  ; cx 減一,然後判斷是否為0,是的話就往下一行執行,不是的話就跳到 a: 標籤去執行

mov ah,4ch
int 21h
end


(4)結束 ~

_________________
已經畢業了!!
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作