Diễn đàn hỏi đáp học thuật - Download Tài Liệu Miễn Phí
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Diễn đàn hỏi đáp học thuật - Download Tài Liệu Miễn PhíĐăng Nhập

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


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

more_horiz
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 đó).

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

more_horiz
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ẻ!)

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

more_horiz
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!

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

more_horiz
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ế?

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

more_horiz
privacy_tip Permissions in this forum:
Bạn không có quyền trả lời bài viết
power_settings_newLogin to reply