Source code download here
Thứ Sáu, 28 tháng 11, 2014
Thứ Hai, 17 tháng 11, 2014
[objective-c]#1 - Check max length in textField
Mô tả:
Giới hạn không cho nhập ký tự trong 1 ô textfiled.
Souce code chạy trên xcode 6:
Nhấp chuột để tài về
Giới hạn không cho nhập ký tự trong 1 ô textfiled.
Souce code chạy trên xcode 6:
Nhấp chuột để tài về
Chủ Nhật, 16 tháng 11, 2014
Code thuật toán in tam giác
Hình ảnh chương trình:
CÁC BẠN VÀO ĐÂY ĐỂ XEM THÊM NHÉ:http://hocccoban.org/2014/11/29/c-code-thuat-toan-in-tam-giac.html
Link tải:
Thứ Bảy, 29 tháng 3, 2014
[C++] - Code chuyển trung tố về hậu tố và tính toán
Yêu cầu:
Biểu thức trung tố có 1 chữ số và các phép toán, dấu mở-đóng ngoặc.
Tính ra biểu thức đó.
Chương trình chạy:
Biểu thức trung tố có 1 chữ số và các phép toán, dấu mở-đóng ngoặc.
Tính ra biểu thức đó.
Chương trình chạy:
Tải code tại:
https://www.dropbox.com/s/ru015m0pfreesdx/tientohauto.zip
Thứ Sáu, 14 tháng 3, 2014
[C++] Code tạo giao diện menu trên Borland C
Chào các bạn!
Mình xin giới thiệu cho các bạn biết về cách để 1 chương
trình C++ của bạn có thể nhận click chuột.
Có nhiều dạng code để làm được việc đó. Mình chia sẻ một
cách đơn giản sau:
Chương trình của chúng ta sẽ gồm 2 nút bấm. Các bạn sẽ đưa
chuột và click vào đấy, chương trình sẽ thực hiện chức năng tương ứng.
Các bước thực hiện
i. Hàm hiển
thị nút bấm:
void Mouse::Show()
{
int
x=20,y=10;
gotoxy(25,5);
textcolor(10);
cprintf("YOU
HAS TWO BUTTON");
VarButton(BUTTON1,"[
BUTTON1 ]",x,y);
VarButton(BUTTON2,"[
BUTTON2 ]",x+20,y);
ShowButton(BUTTON1);
ShowButton(BUTTON2);
}
ii. Hàm xác
nhận click chuột:
void Mouse::EnterClick()
{
do
{
MOUSE_THERE=1;
if(kbhit())
getch();
get_mouse_button(&lbutton,&rbutton,&xmouse,&ymouse);
}while(lbutton==0);
}
iii. Hàm
phân loại click cho từng chức năng thiết kế:
Mouse::Click()
{
MOUSE_THERE=0;
if(ClickButton(BUTTON1,xmouse,ymouse))
{
EffectClick(BUTTON1) return 1;
}
if(ClickButton(BUTTON2,xmouse,ymouse))
{
EffectClick(BUTTON2) return 2;
}
return 3;
}
iv. Chức năng
người dùng thiết kế:
void Mouse::Program()
{
switch(Click())
{
case 1:
clrscr();
gotoxy(20,10);
textcolor(10);
cprintf("YOU
HAVE CLICK ON BUTTON 1. ENTER TO CONTINUE");
getch();
gotoxy(20,10);clreol();
break;
case 2:
clrscr();
gotoxy(20,10);
textcolor(10);
cprintf("YOU
HAVE CLICK ON BUTTON 2. ENTER TO EXIT");
getch();
gotoxy(20,10);clreol();
exit(1);
break;
}
}
v. Menu:
[CODE=C++]void Mouse::Menu()
{
while(1)
{
Show();
EnterClick();
Program();
}
}
OK, vậy là xong các hàm rồi nha, các bạn cứ đọc từ từ sẽ hiểu
thôi, cũng không khó lắm nhỉ?
Code:
include<string.h>
#include<stdlib.h>
#include<dos.h>
#include"button.ta"
#include<iostream.h>
#include"mouse.inc"
/*----------------------Dinh_Nghia_Doi_Tuong-------------------------------*/
class Mouse
{
private:
Button
BUTTON1,BUTTON2;
public:
void Show();
void EnterClick();
int Click();
void Program();
void Menu();
};
/*-------------------Hien_Thi_Cac_Nut_Bam----------------------------------*/
void Mouse::Show()
{
int x=20,y=10;
gotoxy(25,5);
textcolor(10);
cprintf("YOU
HAS TWO BUTTON");
VarButton(BUTTON1,"[
BUTTON1 ]",x,y);
VarButton(BUTTON2,"[ BUTTON2
]",x+20,y);
ShowButton(BUTTON1);
ShowButton(BUTTON2);
}
/*---------------------Nhan_Click_Chuot------------------------------------*/
void Mouse::EnterClick()
{
do
{
MOUSE_THERE=1;
if(kbhit())
getch();
get_mouse_button(&lbutton,&rbutton,&xmouse,&ymouse);
}while(lbutton==0);
}
/*-----------------------Phan_Loai_Click-----------------------------------*/
int Mouse::Click()
{
MOUSE_THERE=0;
if(ClickButton(BUTTON1,xmouse,ymouse))
{
EffectClick(BUTTON1);/*sau khi click chuot thi doi mau khac*/
return
1;
}
if(ClickButton(BUTTON2,xmouse,ymouse))
{
EffectClick(BUTTON2);/*sau khi click chuot thi doi mau khac*/
return
2;
}
return 3;
}
/*------------------------Cac_Chuc_Nang_Cua_Chuong_Trinh-------------------*/
void Mouse::Program()
{
switch(Click())
{
case 1:
clrscr();
gotoxy(20,10); textcolor(10);
cprintf("YOU HAVE CLICK ON BUTTON 1. ENTER TO CONTINUE");
getch();
gotoxy(20,10);clreol();
break;
case 2:
clrscr();
gotoxy(20,10); textcolor(10);
cprintf("YOU HAVE CLICK ON BUTTON 2. ENTER TO EXIT");
getch();
gotoxy(20,10);clreol();
exit(1);
break;
}
}
/*--------------------------Menu_Chinh-------------------------------------*/
void Mouse::Menu()
{
while(1)
{
Show();
EnterClick();
Program();
}
}
/*---------------------------Chuong_Trinh_Chinh----------------------------*/
int main()
{
Mouse ob;
ob.Menu();
return 0;
}
/*------------------------------The_End------------------------------------*/
[/CODE]
Trong chương trình trên, bạn sử dụng 2 thư viện tự tạo, đó
là:
[CODE=C++]#include"button.ta"
#include"mouse.inc"
Đoạn code của các thư viện như sau:
button.ta:
include<stdio.h>
#include<conio.h>
typedef struct
{
int
xbutton;
int
ybutton;
char
*name;
int
statusbutton;
}Button;
void VarButton(Button &B,char *s,int x,int y)
{
B.xbutton=x;
B.ybutton=y;
B.statusbutton=1;
B.name=s;
}
void ShowButton(Button B)
{
if(B.statusbutton==1)
{
textbackground(15);
gotoxy(B.xbutton,B.ybutton);textcolor(LIGHTRED);cprintf("%s",B.name);
textbackground(BLACK);
}
}
void EnableButton(Button& B)
{
B.statusbutton=1;
}
void DisableButton(Button& B)
{
textbackground(15);
gotoxy(B.xbutton,B.ybutton);textcolor(LIGHTGRAY);cprintf("%s",B.name);
B.statusbutton=0;
textbackground(BLACK);
}
int ClickButton(Button B,int xchuot,int ychuot)
{
if(B.statusbutton==1)
{
if(xchuot>=(B.xbutton-1)*8&&xchuot<=(B.xbutton+strlen(B.name)-1-1)*8&&ychuot==(B.ybutton-1)*8)
return
1;
}
return
0;
}
void EffectClick(Button B)
{
gotoxy(B.xbutton,B.ybutton);textcolor(LIGHTCYAN+BLINK);cprintf("%s",B.name);
delay(200);
ShowButton(B);
}
void EffectClickNonButton(int x,int y)
{
gotoxy(x,y);textbackground(WHITE);textcolor(WHITE);cprintf(".");
textbackground(BLACK);
delay(200);
}
mouse.inc:
define MV_LBUTTON 1
#define MV_RBUTTON 2
#define MV_BBUTTON 3
int NUMBER_BUTTONS = 2;
int MOUSE_SIZE = 16;
unsigned char MOUSE_THERE;
unsigned char MOUSE_VISIBLE;
unsigned char LBUTTON_DOWN,
RBUTTON_DOWN,
BBUTTON_DOWN,
LBUTTON_UP,
RBUTTON_UP,
BBUTTON_UP,
CURSOR_MOVED;
int CMX = 0,
CMY = 0;
int BSTATE = 0;
union REGS mregs;
struct SREGS msegregs;
unsigned char EGA_REG_READ = 1;
unsigned char lbutton, rbutton;
int xmouse, ymouse;
void reset_mouse()
{
MOUSE_THERE = 0;
MOUSE_SIZE = 16;
MOUSE_VISIBLE = 0;
if (getvect(0x33) !=
0L)
{
mregs.x.ax
= 0;
int86(0x33,
&mregs, &mregs);
if
(mregs.x.ax != 0)
{
MOUSE_THERE = 1;
NUMBER_BUTTONS = mregs.x.bx;
LBUTTON_DOWN = 0;
RBUTTON_DOWN = 0;
BBUTTON_DOWN = 0;
}
}
}
void show_mouse()
{
if (MOUSE_THERE)
{
mregs.x.ax
= 1;
int86(0x33,
&mregs, &mregs);
MOUSE_VISIBLE
= 1;
}
}
void hide_mouse()
{
if (MOUSE_THERE
&& MOUSE_VISIBLE)
{
mregs.x.ax
= 2;
int86(0x33,
&mregs, &mregs);
MOUSE_VISIBLE
= 0;
}
}
void get_mouse_button(unsigned char *lbutton, unsigned char
*rbutton, int *x, int *y)
{
if (MOUSE_THERE)
{
mregs.x.ax
= 3;
int86(0x33,
&mregs, &mregs);
*lbutton
= (mregs.x.bx == 1) ? 1 : 0;
*rbutton
= (mregs.x.bx == 2) ? 1 : 0;
if
(mregs.x.bx == 3)
*rbutton = *lbutton = 1;
*x =
mregs.x.cx;
*y =
mregs.x.dx;
}
}
unsigned char get_button_rls_info(int butt_no, int *count,
int *x, int *y)
{
if (MOUSE_THERE)
{
mregs.x.ax = 6;
mregs.x.bx = butt_no;
int86(0x33, &mregs, &mregs);
*count = mregs.x.bx;
*x = mregs.x.cx;
*y = mregs.x.dx;
if (butt_no == 0)
return
(!(mregs.x.ax & 1));
else
return
(!((mregs.x.ax & 2) >> 1));
}
return 0;
}
void set_event_handler(int call_mask, void (far
*location)(void))
{
if (MOUSE_THERE)
{
mregs.x.ax = 12;
mregs.x.cx = call_mask;
mregs.x.dx = FP_OFF(location);
msegregs.es = FP_SEG(location);
int86(0x33, &mregs, &mregs);
}
}
void set_hide_bound(int x1, int y1, int x2, int y2)
{
if (MOUSE_THERE)
{
mregs.x.ax = 16;
mregs.x.cx = x1;
mregs.x.dx = y1;
mregs.x.si = x2;
mregs.x.di = y2;
int86(0x33, &mregs, &mregs);
}
}
void set_mouse_position(int x,int y)
{
if (MOUSE_THERE)
{
mregs.x.ax = 4;
mregs.x.cx = x;
mregs.x.dx = y;
int86(0x33, &mregs, &mregs);
}
}
void set_mouse_hlimits(int x1,int x2)
{
if (MOUSE_THERE)
{
mregs.x.ax = 7;
mregs.x.cx = x1;
mregs.x.dx = x2;
int86(0x33, &mregs, &mregs);
}
}
void set_mouse_vlimits(int y1,int y2)
{
if (MOUSE_THERE)
{
mregs.x.ax = 8;
mregs.x.cx = y1;
mregs.x.dx = y2;
int86(0x33, &mregs, &mregs);
}
}
/*void far event_handler(void);
void near event_processor(int event_status, int
button_status, int x, int y)
{
if ((CMX != x) ||
(CMY != y))
{
CURSOR_MOVED = 1;
CMX = x;
CMY = y;
}
BSTATE =
button_status;
if (event_status
& 2)
LBUTTON_DOWN = 1;
if (event_status
& 8)
RBUTTON_DOWN = 1;
if (((event_status
& 2) || (event_status & 8)) && (button_status == 3))
BBUTTON_DOWN = 1;
if ((NUMBER_BUTTONS
== 3) && (event_status & 32))
BBUTTON_DOWN = 1;
if (event_status
& 4)
LBUTTON_UP = 1;
if (event_status
& 16)
RBUTTON_UP = 1;
if (LBUTTON_UP &
RBUTTON_UP)
BBUTTON_UP = 1;
if ((NUMBER_BUTTONS
== 3) && (event_status & 64))
BBUTTON_UP = 1;
}
void reset_event_handler(void)
{
CURSOR_MOVED = 0;
LBUTTON_DOWN =
LBUTTON_UP = 0;
RBUTTON_DOWN =
RBUTTON_UP = 0;
BBUTTON_DOWN =
BBUTTON_UP = 0;
}
void install_event_handler(void)
{
if (NUMBER_BUTTONS
== 3)
set_event_handler(127, event_handler);
else
set_event_handler(31, event_handler);
}*/
Các bạn lưu 3 file trên vào mục BIN của BORLAND C, sau đó chạy
thử để xem kết quả. Nếu bạn dùng WIN 7 thì bạn phải để BORLAND C vào
mục cài win mới chạy được. Thường là ổ C. Sau đó bạn open with tệp
menu và đặt mặc định mở các file code là BC trong BIN nhé!!
Hi vọng bài hướng dẫn này sẽ giúp các bạn hiểu hơn về cách
thiết kế để chương trình C++ của các bạn nhận click chuột.
Các bạn xem thêm tại đây để hiểu thêm nhé:http://hocccoban.org/2014/11/29/c-code-tao-giao-dien-menu-tren-borland-c.html
Các bạn xem thêm tại đây để hiểu thêm nhé:http://hocccoban.org/2014/11/29/c-code-tao-giao-dien-menu-tren-borland-c.html
Thứ Tư, 5 tháng 3, 2014
Thứ Bảy, 1 tháng 3, 2014
[MFC] Tài liệu MFC
1. Giới thiệu về MFC
MFC là Microsoft Foundation Classes bộ thư viện được Microsoft phát triển cho việc develope nhanh ứng dụng trên Windows bằng môi trường Visual C++. Ngày nay trên môi trường Visual C++ (VS200X,VS2010) cho ta 3 lựa chọn để phát triển ứng dụng như sau:
1.Lập trình Win32API:
Bản chất là lập trình với ngôn ngữ lập trình C và tương tác gọi các hàm API
do hệ điều hành Windows cung cấp.
Tuy nhiên bạn vẫn có thể trộn lẫn C++ vô:
Ưu điểm : + Code bằng C (không biết có nên cho vào ưu điểm ko nữa)
+ Mã sinh ra nhỏ gọn chạy nhanh và ko bị phụ thuộc vào các tập
tin DLL.
Nhược điểm:
+ Khó nhớ các hàm, tên hàm, các cấu trúc liên quan đến một
mảng thành phần nào đó mà ta cần sử dụng.
+ Vì thế thời gian develop một ứng dụng khá lâu.
+ Vì là lập trình C nên mã nguồn thường khó quản lý hơn, nhất là
với những bạn có phong cách lập trình không được tốt.
2.Lập trình C++.NET:
Bản chất là lập trình với bộ thư viện .NET của MS cung cấp, sử dụng với cú
pháp của C++.
Ưu điểm : + Hướng đối tượng với các thành phần của .NET sử dụng dễ dàng
nhanh chóng.
+ Cho phép trộn lẫn mã manged và unmagned. M$ hỗ trợ .NET
cho VC++ với mục đích là cho phép bạn từng bước chuyển các
ứng dụng cũ viết bằng C++ lên dần dần môi trường .NET, bởi
trước đó có khá nhiều ứng dụng mà các thành phần của nó
được viết bởi native C++.
Nhược điểm:
+ Yêu cần phải kèm theo bộ Microsoft .NET Framework cồng kềnh
để cài đặt và chạy trên máy client.
+ Nếu sử dụng lẫn lộn mã hoặc thành phần nào đó của native C++
và managed C++ nên khó quản lý và bảo trì.
+ Hỗ trợ về .NET không bằng C# được.Vì C# được thiết kế là ngôn
ngữ lập trình chính với nên .NET.
3.Lập trình MFC:
Bản chất là làm việc với C++ thông qua các lớp và đối tượng. Các lớp bao
gồm các hàm và cấu trúc của Win32API về một thành phần nào đó được
gói chung vào một lớp.
Ưu điểm: + Lập trình hướng đối tượng với C++
+ Đỡ phải nhớ nhiều hàm và cấu trúc bởi chúng gói chung vào hầu
hết một lớp.
+ Thời gian develope một ứng dụng sẽ nhanh hơn bởi sự hỗ trợ rất
tốt của bộ Wizard với Visual Studio.
Nhược điểm :
+ Chương trình khi biên dịch ra sẽ khá lớn cỡ độ từ vài MB đến vài
chục MB có khi hoặc hơn tùy vào chế độ biên dịch Static Link
(đưa toàn bộ vào một exe hoặc dll duy nhất) hoặc chế độ
Dynamic Linked (bắt đính kèm mấy tệp dll của MFC).
+ Chắc chắn vẫn phải đính kèm mấy tệp của Visual C++ như
msvcrtX.dll và msvcppX.dll (X tùy phiên bản VC++).
+ Tuy nhiên là vẫn phát triển ứng dụng nhanh hơn Win32API
đồng thời lại không quá cồng kềnh như .NET
2. Tài liệu MFC
Đây là link cuốn Visual C++ and MFC Programming 2nd.
Hình ảnh:
Chúc các bạn học tập tốt
MFC là Microsoft Foundation Classes bộ thư viện được Microsoft phát triển cho việc develope nhanh ứng dụng trên Windows bằng môi trường Visual C++. Ngày nay trên môi trường Visual C++ (VS200X,VS2010) cho ta 3 lựa chọn để phát triển ứng dụng như sau:
1.Lập trình Win32API:
Bản chất là lập trình với ngôn ngữ lập trình C và tương tác gọi các hàm API
do hệ điều hành Windows cung cấp.
Tuy nhiên bạn vẫn có thể trộn lẫn C++ vô:
Ưu điểm : + Code bằng C (không biết có nên cho vào ưu điểm ko nữa)
+ Mã sinh ra nhỏ gọn chạy nhanh và ko bị phụ thuộc vào các tập
tin DLL.
Nhược điểm:
+ Khó nhớ các hàm, tên hàm, các cấu trúc liên quan đến một
mảng thành phần nào đó mà ta cần sử dụng.
+ Vì thế thời gian develop một ứng dụng khá lâu.
+ Vì là lập trình C nên mã nguồn thường khó quản lý hơn, nhất là
với những bạn có phong cách lập trình không được tốt.
2.Lập trình C++.NET:
Bản chất là lập trình với bộ thư viện .NET của MS cung cấp, sử dụng với cú
pháp của C++.
Ưu điểm : + Hướng đối tượng với các thành phần của .NET sử dụng dễ dàng
nhanh chóng.
+ Cho phép trộn lẫn mã manged và unmagned. M$ hỗ trợ .NET
cho VC++ với mục đích là cho phép bạn từng bước chuyển các
ứng dụng cũ viết bằng C++ lên dần dần môi trường .NET, bởi
trước đó có khá nhiều ứng dụng mà các thành phần của nó
được viết bởi native C++.
Nhược điểm:
+ Yêu cần phải kèm theo bộ Microsoft .NET Framework cồng kềnh
để cài đặt và chạy trên máy client.
+ Nếu sử dụng lẫn lộn mã hoặc thành phần nào đó của native C++
và managed C++ nên khó quản lý và bảo trì.
+ Hỗ trợ về .NET không bằng C# được.Vì C# được thiết kế là ngôn
ngữ lập trình chính với nên .NET.
3.Lập trình MFC:
Bản chất là làm việc với C++ thông qua các lớp và đối tượng. Các lớp bao
gồm các hàm và cấu trúc của Win32API về một thành phần nào đó được
gói chung vào một lớp.
Ưu điểm: + Lập trình hướng đối tượng với C++
+ Đỡ phải nhớ nhiều hàm và cấu trúc bởi chúng gói chung vào hầu
hết một lớp.
+ Thời gian develope một ứng dụng sẽ nhanh hơn bởi sự hỗ trợ rất
tốt của bộ Wizard với Visual Studio.
Nhược điểm :
+ Chương trình khi biên dịch ra sẽ khá lớn cỡ độ từ vài MB đến vài
chục MB có khi hoặc hơn tùy vào chế độ biên dịch Static Link
(đưa toàn bộ vào một exe hoặc dll duy nhất) hoặc chế độ
Dynamic Linked (bắt đính kèm mấy tệp dll của MFC).
+ Chắc chắn vẫn phải đính kèm mấy tệp của Visual C++ như
msvcrtX.dll và msvcppX.dll (X tùy phiên bản VC++).
+ Tuy nhiên là vẫn phát triển ứng dụng nhanh hơn Win32API
đồng thời lại không quá cồng kềnh như .NET
2. Tài liệu MFC
Đây là link cuốn Visual C++ and MFC Programming 2nd.
Hình ảnh:
Chúc các bạn học tập tốt
Thứ Năm, 27 tháng 2, 2014
[C++] Hướng dẫn cài đặt cygwin lên windows
Nếu như các bạn lập trình C/C++ không muốn dùng IDE mà dùng luôn notepad để viết code, sau đó dùng cygwin để biên dịch code, chúng ta làm như sau:
Đầu tiên các bạn tải gói cygwin tại đây
Chọn đúng thư mục http%3a%2f%2fmirrors.163.com%2fcygwin%2f:
Đầu tiên các bạn tải gói cygwin tại đây
Sau đó giải nén file Cygwin_download.zip sẽ được
các file như hình:
Tiến hành cài đặt:
Chọn đúng thư mục http%3a%2f%2fmirrors.163.com%2fcygwin%2f:
Chọn OK:
Chọn các gói sau để tải về:
Chọn vào biểu tượng và mở chương trình lên:
Để biên dịch 1 file nguồn có tên là main.cpp, ta copy file này vào thư mục C:\cygwin\home
Sau đó gõ lệnh như hình:
Vậy là các bạn đã có thể biên dịch file nguồn trên cygwin :D
Chúc các bạn thành công!
Thứ Tư, 26 tháng 2, 2014
[C&asm] - Cách chèn code asm trong C
Bài này giới thiệu cách chạy 1 đoạn code asm trong visual C.
asm là viết tắt của ngôn ngữ bậc thấp assembly, một ngôn ngữ mạnh mẽ nhất trong các ngôn ngữ lập trình, nó chỉ yếu hơn mã nhị phân 1 tẹo :))
Để hiểu thêm về ngôn ngữ này, các bạn vào đây hay vào đây để học nhé :)
Bây giờ chúng ta cùng "nhúng" ngôn ngữ asm vào C, kiểu như nhúng thịt bò vào lẩu ấy, xem nó có ngon hơn không nhé.
Thôi không chém gió nữa, bắt đầu "nhúng thịt bò" nào :D
Yêu cầu:
- Trình biên dịch: visual 2010
Các bước thực hiện:
Bước 1: Mở visual 2010, tạo 1 project C++ mới, tích vào ô empty project. Cái này chắc mọi người biết :)
asm là viết tắt của ngôn ngữ bậc thấp assembly, một ngôn ngữ mạnh mẽ nhất trong các ngôn ngữ lập trình, nó chỉ yếu hơn mã nhị phân 1 tẹo :))
Để hiểu thêm về ngôn ngữ này, các bạn vào đây hay vào đây để học nhé :)
Bây giờ chúng ta cùng "nhúng" ngôn ngữ asm vào C, kiểu như nhúng thịt bò vào lẩu ấy, xem nó có ngon hơn không nhé.
Thôi không chém gió nữa, bắt đầu "nhúng thịt bò" nào :D
Yêu cầu:
- Trình biên dịch: visual 2010
Các bước thực hiện:
Bước 1: Mở visual 2010, tạo 1 project C++ mới, tích vào ô empty project. Cái này chắc mọi người biết :)
Bước 2:
Vào như hình vẽ, add 1 file C++ và đặt tên là main.cpp
Bước 3:
Bây giờ mình giới thiệu cú pháp "nhúng" mã asm trong C như sau:
__asm
{
mã asm chèn ở đây
}
Mã asm là gì? cái này các bạn phải đọc thêm nhiều bài viết về nó. Ở bài này mình giới thiệu 1 số mã cơ bản như sau:
mov adress1, adress2: Viết tắt tiếng Anh của nó là movie, nghĩa là di chuyển. Di chuyển địa chỉ ô nhớ máy tính từ địa chỉ 2 về địa chỉ 1. adress2 -> adress1. tùy trình biên dịch, dùng mov hoặc lea(tiếng Anh là leave)
push adress: như nghĩa từ push luôn, đẩy địa chỉ adress vào ngăn xếp
pop adress: Đẩy các giá trị của địa chỉ ra từ ngăn xếp
call: gọi các hàm cần dùng, xem ở đây
OK, bây giờ các bạn vào file main.cpp vừa tạo chèn code này vào:
#include<stdio.h>
#include<conio.h>
int main()
{
char hi[] = "Xin chao";
char earth[] = "The gioi";
char text[] = "%s %s";
__asm
{
lea eax,earth // eax = address of earth
push eax // put eax at the top of the stack
lea eax,hi // eax = address of hi
push eax
lea eax,text
push eax
call DWORD ptr printf
// or the indierct call
// mov eax, printf
// call eax
pop ebx // clean up the stack
pop ebx
pop ebx
}
getch();
return 0;
}
Bây giờ chúng ta F5 để chạy chương trình. Kết quả như sau:
Các tut sau mình sẽ giới thiệu cách code các bài đơn giản bằng asm :)
Hi vọng mọi người quan tâm!
Đăng ký:
Bài đăng (Atom)