Assembler

Nguyễn Chí Thanh
(NCT)

Điều hành viên
Mình đang học assembler. Chẳng hiểu sao bọn trường mình lại bắt học cái này, trong khi đấy hỏi tất cả các cao thủ thì đều được nghe bảo là Assembler bây giờ chẳng còn ai sờ đến nữa. Thế nhưng mà đang học, vẫn thấy hứng lắm. Có ai biết thì xin chỉ giáo cho vài cái.
1-Assembler có các Interupter dùng để tiện cho việc lập trình, giống như là những programes nhỏ có sẵn. Các interupter thì được nạp vào đầu bộ nhớ RAM ngay khi khỏi động máy. Nhưng mình không biết cách nào để xem được hết các interupter, nó làm gì, như thế nào. Có ai biết xin chỉ giáo.

2-Ở trường mình dậy lập trình Assembler bằng command của Debug. Thường thì trương trình lập xong không ghi lại, chỉ ghi tạm vào RAM, rồi cho chạy thử ngay, rồi bỏ đi luôn (chỉ là những trương trình rất nhỏ, để hiểu các instructions là chính. Một chương trình cũng có thể lưu lại vào ổ cứng, nhưng mỗi lần muốn chạy, thì phải gọi ra RAM và cho chạy bằng command của Debug, từng bước một. Mình muốn hỏi có cách nào chạy 1 chương trình Assembler bằng WINDOWS không??
 
Hè hè lâu lắm không động đến mấy cái thứ này. Em chỉ nhớ mang máng vài chi tiết:

Về interupt(ngắt) thì có 2 loại : ngắt cứng và ngắt mềm. Ngắt cứng là ngắt có sẵn ở trên bios (hình như là từ 0h - 20h thì phải) được activate mỗi khi khởi động máy. Ngắt mềm là ngắt của hệ điều hành, drivers hoặc các ứng dụng I/O khác. Hồi xưa(thời 486) em nhớ mang máng ngắt của DOS là 21h, ngắt ổ cứng là 13h, ngắt màn hình là 9h... không hiểu bây giờ các ngắt thay đổi ntn. Ngắt đúng là giống như các program nhỏ dùng để xử lý một sự kiện và lấy tham số từ các thanh ghi (registers). Thời xưa thì dùng thanh ghi 16 bit thời nay thì là 32 bit. Để xem được hết các interupt thì là điều gần như không tưởng vì chỉ cần xem và hiểu được hết các ngắt của windows thôi thì coi như anh đã hiểu được phần lớn mã nguồn của windows rồi đó :D. May ra thì anh có thể xem được các ngắt cứng ở bios và một phần các ngắt mềm mà thôi. Để biết thông tin về các ngắt cứng này thì anh có thể tham khảo một số cuốn sách về lập trình asm hoặc như em hồi xưa thì có cuốn cẩm nang lập trình hệ thống của micheal tister cũng khá chi tiết và đầy đủ(Cuốn này cũng cố gắng cover các ngắt của DOS mặc dầu không đầy đủ và chính xác). Về ASM ở windows thì anh có thể dùng softice một phần mềm debug khá nổi tiếng tương tích với môi trường địa chỉ và thanh ghi 32 bít của windows. Các kỹ thuật sử dụng softice thì có thể tham khảo ở các website chuyên về craking. Nói chung làm việc với ASM khá đau đầu và đỏi hỏi kiên nhẫn nếu muốn làm một cái gì đấy nên hồn. Hồi xưa nta sử dụng ASM để viết virus, driver với cracking là chính. Còn dạy trong nhà trường chỉ đơn giản là để cho mình biết và làm quen với phương pháp tính toán, ngôn ngữ thô của máy tính là chính chứ thời buổi này người thật sự master ASM chỉ đếm trên đầu ngón tay và toàn là các cao thủ đầu to kính dày. Nếu anh muốn tìm hiểu thêm nữa về ASM thì nên tham gia vào các diễn đàn chuyên môn như diendantinhoc.com thì may ra sẽ học hỏi thêm được nhiều.
 
tèn ten!
Anh Minh đúng là cao thủ. Thảo nào em thấy ở trường em có mấy quyển sách về Bios dầy cộp, không hiểu bios có cái đếch gì mà lắm thứ thế. Trước em không biết xem mấy cái interruptions ở đâu, bây giờ biết là trong đấy rồi. Cám ơn anh Minh phát.

Tiện thể tham lam tí. Hỏi luôn có bác nào biết câu 2, trả lời giúp em luôn cái.
 
Này mấy cái máy PC mới kiểu nhu Athlon 64 thì có còn dùng ngắt ko nhỉ?
 
Nguyễn Chí Thanh đã viết:
Tiện thể tham lam tí. Hỏi luôn có bác nào biết câu 2, trả lời giúp em luôn cái.
Thằng bạn tôi nó trả lời thế này:
Viết file asm bằng bất cứ text editor nào, dùng tlink để dịch ra obj, dùng make để dịch ra exe mà chạy!
Thế đủ chưa nhỉ!
 
64 bit hay bao nhiêu nữa thì cũng phải dùng ngắt. ngắt thực chất là các chương trình con viết sẵn để thực hiện được các mục đích cơ bản khi thao tác trên máy tính mà ko cần thò tay trực tiếp vào mã máy. ko có các chương trình ngắt mà ngồi viết 0101 có mà ốm. cũng giống như các bác đang viết C# mà phải quay về làm assembly vậy.
64 bit chỉ là sự mở rộng độ dài các thanh ghi trong bộ nhớ mà thôi. Cũng giống như ở kiến trúc 8086 (16 bit) các thanh ghi có độ dài 16 bit như ax thì lên kiến trúc 80386 (32bit) các thanh ghi được mở rộng thành 32 bit: vẫn giữ nguyên các thanh ghi như ở kiến trúc 16 bit và thêm vào các than ghi mở rộng cũng có độ dài 16 bit -> 32 bit. Ví dụ như thêm eax vào ax để tạo thanh ghi 32 bit có 16 bit thấp nằm trên ax và 16 bit cao nằm trên eax. kiến trúc 64 bit cũng thế, chẳng phải là cái gì cao siêu quá đâu. đẻ thêm con thì phải xây thêm nhà, chứ ko phải đẻ thằng B ra thì cho thằng A vào trại mồ côi :))

Ah, còn vấn đề bác gì hỏi về việc lập trình + dịch Assembly trên windows. Các bác dùng lệnh command của debug mà làm thì khốn khổ quá. Hồi xưa học Assembly em dùng chương trình Emu8086. Lập trình trên windows như lập trình các ngôn ngữ hiện đại ý :D. Có cả phân biệt màu sắc các đoạn code. Rất nhiều sample code, lập trình + dịch luôn trên windows và đủ thứ tiện dụng khác. Hay lắm. Bác lên download.com mà tải về. Một số tính năng rất hay ho thì phải bỏ tiền ra đăng kí mới dùng đc nhưng mà đang từ debug.exe mà lên cái này cũng giống kiểu đang dùng Notepad mà lên VS 2003 ý hehe :D
 
Back
Bên trên