史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2006-01-24, 03:38 PM   #1
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設 C++與組合語言 入門教學(混例)

首先來看個最簡單的例子
PHP 語法:
#include<stdio.h>
#include<conio.h>

int xy;

int main(void){
    
0x13;

    
__asm("mov _x, %ax");
    
__asm("mov %ax, _y");
    
printf("%d"y);

    
getch();
    return 
0;

__asm("裡面寫組合語言");
%ax 是指暫存器 ax
_y 及 _x 是指讓組合語言巨集指令使用外部c++的變數 x 及 y
而 x、y 需宣告為全域變數

以上是 DEV-C++ 的限制
如果是用 VC++ 就比較開放
PHP 語法:
#include<stdio.h>
#include<conio.h>


int main(void){
int x=0x13y;

    
__asm{
       
mov axx
       mov y
ax
    
}
    
printf("%d"y);

    
getch();
    return 
0;

可以發現 DEV-C++ 顯然 把 mov 指令的 目的與來源 顛倒了
而 VC++ 則是正常
(mov ax,13 ; ax是目的 ,13是來源)
這不知是不是 DEV-C++ 的 bug


再來再舉一個兩變數交換實例
PHP 語法:
#include <cstdlib>
#include <iostream>

using namespace std;

long xy;

void swap(int xint y){
    
__asm
    
(
   
//放進堆疊空間
     
"push _x \n"
     "push _y \n"
   
//從堆疊空間取出
     
"pop  _x \n"
     "pop  _y"
    
);
}

int main(int argcchar *argv[]){
    
x=13;
    
y=2147483647;
    
//y = 0x7FFFFFFF = (0xFFFFFFFF)/2,如果大於 0xF0000000 等於負值 

    
cout << "X/Y 變數使用了 記憶體空間: " << sizeof(x) << " Byte\n\n";
    
cout << "(1)組合語言之堆疊(使用堆疊記憶體)交換實例" << endl;
    
printf("交換前\nX: %d\nY: %d\n",x,y);
    
swap(xy);
    
printf("交換後\nX: %d\nY: %d\n\n",x,y);
    
    
cout << "(2)布林運算(不需第三地暫存變數)交換實例" << endl;
    
xx^y;
    
yx^y;
    
xx^y;
    
printf("交換後\nX:%d\nY:%d\n\n",x,y);
    
    
system("PAUSE");
    return 
EXIT_SUCCESS;

裡面包含了兩種交換方法
理論很單純希望大家會喜歡
(至於 VC++之寫法就請看官自行改寫看看了)
mini 目前離線  
送花文章: 2013, 收花文章: 8002 篇, 收花: 26806 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 01:26 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1