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!
Cũng được
Trả lờiXóaBạn ơi! cho mình hỏi là: có thể dùng lệnh ngắt 21h để nhập và xuất ra màn hình thay cho hàm kia được k vậy bạn? Cảm ơn nhiều
Trả lờiXóangắt 21h là ngắt của hệ điều hành dos ngày trước. Không thể dùng vào trong chương trình nhúng kiểu kia nhé.
Trả lờiXóa