Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: ASM AT&T Syntax

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Mặc định ASM AT&T Syntax

    AT&T là 1 ngôn ngữ lập trình asm trên nền tảng linux,bài viết này có thể hơi không liên quan đến C cho lắm.Nhưng cũng là đáng để đọc

    AT&T hoạt động tương tự như x86 instruction của intel trên windows
    Tuy nhiên có 1 vài điểm khác biệt cũng cần lưu ý để phân biệt 2 cái này.
    đầu tiên cần đọc về x86 instruction tại đây để nắm về các opcode của x86:
    http://en.wikipedia.org/wiki/X86_instruction_listings
    Tiếp đầu ngữ cho AT&T :

    Intex Syntax


    Code:
    mov    eax,1
    mov    ebx,0ffh
    int    80h
    AT&T Syntax


    Code:
    movl    $1,%eax
    movl    $0xff,%ebx
    int     $0x80
    các thanh ghi thêm "%"
    Và các giá trị được thêm "$"

    đưa vào toán hạng ngược lại :


    Intex Syntax

    Code:
    instr    dest,source
    mov    eax,[ecx]
    AT&T Syntax


    Code:
    instr     source,dest
    movl    (%ecx),%eax
    Toán hạng nằm trong dấu "()".

    Intex Syntax

    Code:
    mov    eax,[ebx]
    mov    eax,[ebx+3]
    AT&T Syntax


    Code:
    movl    (%ebx),%eax
    movl    3(%ebx),%eax
    Các phép tính phức tạp hơn

    Intel Syntax


    Code:
    instr     foo,segreg:[base+index*scale+disp]
    mov    eax,[ebx+20h]
    add    eax,[ebx+ecx*2h
    lea    eax,[ebx+ecx]
    sub    eax,[ebx+ecx*4h-20h]
    AT&T Syntax

    Code:
    instr    %segreg:disp(base,index,scale),foo
    movl    0x20(%ebx),%eax
    addl    (%ebx,%ecx,0x2),%eax
    leal    (%ebx,%ecx),%eax
    subl    -0x20(%ebx,%ecx,0x4),%eax
    Các hậu tố thêm vào làm rõ hơn các lệnh:

    b = byte (8 bit)
    s = short (16 bit integer) or single (32-bit floating point)
    w = word (16 bit)
    l = long (32 bit integer or 64-bit floating point)
    q = quad (64 bit)
    t = ten bytes (80-bit floating point)



    Intel Syntax


    Code:
    mov    al,bl
    mov    ax,bx
    mov    eax,ebx
    mov    eax, dword ptr [ebx]
    AT&T Syntax


    Code:
    movb    %bl,%al
    movw    %bx,%ax
    movl    %ebx,%eax
    movl    (%ebx),%eax
    Inline ASM trong AT&T :

    C Code:
    1. #include "stdio.h"
    2. int Tong(int a, int b)
    3. {
    4. asm("movl 8(%ebp), %eax"); //ebp-8 là vị trí của a (4 byte)
    5. asm("addl 0xc(%ebp), %eax"); // ebp - 12 là vị trí của b(4 byte)
    6. }
    7.  
    8. int main()
    9. {
    10. printf("%d\n", Tong(2,4));
    11. return 0;
    12. }
    13. }

    tham khảo : http://en.wikibooks.org/wiki/X86_Ass...ation_Suffixes
    Đã được chỉnh sửa lần cuối bởi lttq : 15-10-2011 lúc 11:16 AM.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  2. #2
    Ngày gia nhập
    09 2011
    Bài viết
    84

    không biết Windows có system call giống Linux không nữa
    nghe nói nó xài ngắt 0x2e
    RISC better than CISC
    phamthechung0@gmail.com

  3. #3
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Trích dẫn Nguyên bản được gửi bởi hardwire Xem bài viết
    không biết Windows có system call giống Linux không nữa
    nghe nói nó xài ngắt 0x2e
    INT 2e là để switch từ ring 3 sang ring 0 mà.Là để nhảy vào kernel mode.Lúc đó thì có thể gọi ngắt được rồi.Các tham số để lựa chọn trong ngắt thì chắc là nằm trong EAX.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  4. #4
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi lttq Xem bài viết
    INT 2e là để switch từ ring 3 sang ring 0 mà.Là để nhảy vào kernel mode.Lúc đó thì có thể gọi ngắt được rồi.Các tham số để lựa chọn trong ngắt thì chắc là nằm trong EAX.
    INT 2E dùng với các hệ thống cũ, bây giờ với kiến trúc mới, windows đổi thành SYSCALL

    thanh ghi eax chứa chỉ số của hàm cần gọi
    edx chứa địa chỉ của dãy các tham số cần truyền cho hàm

  5. #5
    Ngày gia nhập
    09 2011
    Bài viết
    84

    bạn nào có chi tiết về ngắt 0x2e không mình xài 32 bit không có cái vụ syscall đâu
    ai có bảng system call number không
    RISC better than CISC
    phamthechung0@gmail.com

  6. #6
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Mặc định ASM AT&T Syntax

    Trích dẫn Nguyên bản được gửi bởi hardwire Xem bài viết
    bạn nào có chi tiết về ngắt 0x2e không mình xài 32 bit không có cái vụ syscall đâu
    ai có bảng system call number không
    Tớ nghĩ cậu cần gọi cái nào,tham số gì thì cứ google thôi.Còn cái bảng chi tiết thì mình chịu.trên 32bit cũng gọi được systemcall mà.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  7. #7
    Ngày gia nhập
    09 2011
    Bài viết
    84

    trên 32 bit không có íntruction syscall. Hình như có sysenter thôi
    RISC better than CISC
    phamthechung0@gmail.com

Các đề tài tương tự

  1. MS SQL Lỗi Lỗi Incorrect syntax near the keyword 'ON'.
    Gửi bởi kim.vu232 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 12-01-2013, 10:47 PM
  2. lỗi Incorrect syntax near '201'.
    Gửi bởi biencute trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 26-05-2012, 12:43 AM
  3. Database Lỗi : Syntax error in INSERT INTO statement.
    Gửi bởi holygon trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 30-04-2012, 11:03 PM
  4. syntax error : identifier '_TCHAR' : cho em hỏi lỗi này là sao ạ
    Gửi bởi Tan_Huynh trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 28-02-2012, 07:16 AM
  5. [Help] Syntax error in UPDATE statement.
    Gửi bởi badboyst trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 09-05-2010, 10:51 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn