Gia sư Cần Thơ, Dạy Kèm Cần Thơ

VỮNG TIN - TIẾP BƯỚC - THÀNH CÔNG


Swap thông thường và Swap Inline ASM!

Share
avatar
peterdrew
Nhập môn
Nhập môn

Tổng số bài gửi : 19
Points : 25
Join date : 09/07/2010
Age : 34
Đến từ : Viện Vũ khí_Bộ Quốc phòng

Swap thông thường và Swap Inline ASM!

Bài gửi  peterdrew on Fri Jul 09, 2010 8:44 pm

Peter đọc ở diễn đàn và thấy có bài viết hướng dẫn về truyền Tham trị và Tham chiếu với ví dụ là Swap; trong Topic này Peter sẽ tăng cường cho các bạn một code Inline các dòng lệnh ASM vào code C/C++ để các bạn có thể thực hiện được các thao tác Swap:
Code:
#include <stdio.h>
#include <conio.h>
int main()
{
    int a, b;
    printf("Nhap a= ");
    scanf("%d",&a);
    printf("Nhap b= ");
    scanf("%d",&b);
    printf("%d %d\n", a, b);
    _asm
    {
        mov eax,a
            mov ebx,b
            mov a,ebx
            mov b,eax
    }               
    printf("%d %d", a, b);
    getch();
    return 0;
}

Các bạn có thể kiểm chứng! Nhưng nói thật nhé: Code này là hình thức thôi, chứ chạy chậm hơn code Swap thông thường bằng C/C++ (dung lượng cũng lớn hơn đó).

pearlz
Nhập môn
Nhập môn

Tổng số bài gửi : 4
Points : 6
Join date : 11/07/2010

Re: Swap thông thường và Swap Inline ASM!

Bài gửi  pearlz on Sun Sep 05, 2010 7:09 pm

bác ơi cái Macro _asm em viết lại thế này liệu có nhanh hơn chút?
Code:
_asm{
  xchg  eax,a
  xchg  eax,b
  xchg  eax,a
}
giả sử a=1, b =2, eax = 0
sau lần 1: a=0, eax = 1(, b=2) <-- đặt trong ngặc vì phép hoán chuyển không tác động nên nó.
sau lần 2: b=1, eax = 2(, a=0)
sau lần 3: a=2, eax = 0(, b=1)
ưu điểm: chỉ cần sử dụng 1 thanh ghi eax, số câu lệnh ít hơn!
mà thật ra cái macro của bác còn thiếu việc bảo vệ dữ liệu của hai thanh ghi eax, ebx
còn cái của em thì không cần vì dữ liệu trước và sau của eax đều không thay đổi Very Happy


Được sửa bởi peterdrew ngày Sun Sep 05, 2010 10:37 pm; sửa lần 1. (Reason for editing : Đặt code vào thẻ!)
avatar
peterdrew
Nhập môn
Nhập môn

Tổng số bài gửi : 19
Points : 25
Join date : 09/07/2010
Age : 34
Đến từ : Viện Vũ khí_Bộ Quốc phòng

Re: Swap thông thường và Swap Inline ASM!

Bài gửi  peterdrew on Sun Sep 05, 2010 10:42 pm

Nói chung là Peter làm Inline cho vui thôi, phong phú thêm thôi, chứ thật ra thì chẳng ai làm thế cả, exe sau khi create ra sẽ có size lớn hơn so với khi không Inline;... Cậu thử thì biết!

pearlz
Nhập môn
Nhập môn

Tổng số bài gửi : 4
Points : 6
Join date : 11/07/2010

Re: Swap thông thường và Swap Inline ASM!

Bài gửi  pearlz on Mon Sep 06, 2010 1:58 pm

về khoản khi inline kích thước chương trình sẽ phình to, em không có ý kiến gì.
Có điều khi inline thì ta nên tối ưu mã nguồn để tránh chương trình phình quá to (mà code ít đỡ bug tìm lỗi cũng dễ hơn)

ngoài lề chút, Bác ơi 4Rum này là của hội nào thế?

Sponsored content

Re: Swap thông thường và Swap Inline ASM!

Bài gửi  Sponsored content


    Hôm nay: Tue Aug 22, 2017 4:21 pm