30/09/2018, 23:53

Từ khóa asm trong C

500 anh em cho mình hỏi cái từ khóa asm trong C chuẩn để làm j vậy nếu đc ae có thể cho mình xin ví dụ để có thể hiểu rõ hơn
Cảm ơn Anh em nhiều

Sáng Béo viết 02:05 ngày 01/10/2018

chắc là hàm asm để chèn các lệnh Assembly vào chương trình C.

Khoa NTA viết 01:54 ngày 01/10/2018

Theo mình biết là asm (hay __asm, __asm__) là để chèn mã lệnh hợp ngữ vào tại chỗ đó. Cú pháp được dùng là AT&T syntax (thay vì Intel syntax khi học về hợp ngữ). Nếu bạn không phải đụng chạm gì đến kernel, vi điều khiển, low-level IO, … thì mình nghĩ không nhất thiết phải học cái này (vì mình thấy nó rất khó học).
Ví dụ đơn giản mình lấy ra từ codeproject.com dùng để tính cộng trừ nhân chia đơn giản:

#include <stdio.h>
int main() {

    int arg1, arg2, add, sub, mul, quo, rem ;

    printf( "Enter two integer numbers : " );
    scanf( "%d%d", &arg1, &arg2 );

    /* Perform Addition, Subtraction, Multiplication & Division */
    __asm__ ( "addl %%ebx, %%eax;" : "=a" (add) : "a" (arg1) , "b" (arg2) );
    __asm__ ( "subl %%ebx, %%eax;" : "=a" (sub) : "a" (arg1) , "b" (arg2) );
    __asm__ ( "imull %%ebx, %%eax;" : "=a" (mul) : "a" (arg1) , "b" (arg2) );

    printf( "%d + %d = %d\n", arg1, arg2, add );
    printf( "%d - %d = %d\n", arg1, arg2, sub );
    printf( "%d * %d = %d\n", arg1, arg2, mul );

    return 0 ;
} 
  • Mình đã bỏ đi phép chia vì trên máy mình xuất hiện “floating point exception” (và mình cũng chưa biết lỗi này nên thôi để như vậy cho đơn giản :)) )
Bài liên quan
0