SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
Hướng dẫn thực hành môn Hợp Ngữ                                                       Nhập môn

                                      Bài thực hành số 1

                                        Nhập môn
Mục đích
       Làm quen với ngôn ngữ lập trình Assembly
       Biết cách viết, dịch, chạy và chẩn lỗi (debug) một vài chương trình đơn giản

Tóm tắt lý thuyết
    Hợp ngữ (assembler) là ngôn ngữ bậc thấp, giúp cho người lập trình không phải ghi nhớ mã máy
(opcode) mà sử dụng các từ ngữ gợi nhớ (pseudo-code) gần với ngôn ngữ tự nhiên để miêu tả công
việc cần thực hiện. Tuy vậy, assembler rất gần với ngôn ngữ máy, đòi hỏi người lập trình phải hiểu
biết tương đối đầy đủ về cấu trúc phần cứng máy tính.
    Với mỗi kiểu kiến trúc của bộ vi xử lý, có một bộ lệnh riêng, do đó, có một ngôn ngữ assembler
riêng cho nó. Ở đây, chúng ta nghiên cứu assembler cho các bộ vi xử lý Intel thuộc họ x86. Các
chương trình sẽ được viết cho chế độ thực (real mode) trong DOS và được biên dịch bằng Turbo
Assembler.

   Cấu trúc thông thường của một chương trình hợp ngũ

.model    <Khai báo kiểu chương trình>
.stack    <Khai báo kích thước ngăn xếp>
.data
     <Khai báo dữ liệu>
.code
     <Các lệnh>
end

   Ví dụ: Chương trình sau in ra màn hình dòng chữ “Hello !”

.model        small
.stack        100h
.data
     s        DB     “Hello !$”            ; khai báo xâu kí tự cần in
.code
              mov    AX,@data              ; lấy địa chỉ data segment ghi vào DS
              mov    DS,AX                 ; Vì model small, đây cũng là địa chỉ
                                           ; segment của xâu s

              ; xuất chuỗi
              mov DX, OFFSET s             ; lấy địa chỉ offset ghi vào DX
              mov AH , 9
              int 21h                      ; gọi hàm 9, ngắt 21h để in

              mov    AH, 4Ch               ; Thoát khỏi chương trình
              int    21h
end

   Lưu ý:
      - Mọi chương trình đều phải có đoạn code thoát khỏi chương trình, nếu không chương
          trình sẽ không dừng khi hết chương trình của mình.

Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM                                             -1-
Hướng dẫn thực hành môn Hợp Ngữ                                                          Nhập môn

  Khai báo biến trong hợp ngữ

  Cú pháp:
     <tên biến>       D<Kiểu DL>           <giá trị khởi tạo>
  hoặc
     <tên biến>       D<Kiểu DL>           <số phần tử> dup(<giá trị khởi tạo>)

     Các kiểu dữ liệu: B (1 byte), W (2 bytes), D (4 bytes)
     Nếu không khởi tạo, dùng dấu hỏi “?”

  Ví dụ:

       Khai báo trong C                            Khai báo trong hợp ngữ
       char ch;                                    ch DB ?
       char ch = ‘a’;                              ch DB ‘a’
       char ch = 5;                                ch DB 5
       char s[]=”nhello world!”                   s DB 10,13,”hello world!$”
       int i=100;                                  i DW 100
       long l;                                     l DD ?
       char a[] = {1,2,3};                         a DB 1,2,3
       char a[100];                                a DB 100 dup(?)
       char a[100][50];                            a DB 100 dup(50 dup(?))


  Dịch, liên kết, chạy và chẩn lỗi chương trình từ dấu nhắc DOS

  Cần có các file: tasm.exe (dịch), tlink.exe (liên kết), td.exe (chẩn lỗi). Các bước như sau:
         B1. Thiết lập đường dẫn
            path = %path%;<đường dẫn đến thư mục chứa các file kể trên>

           B2. Biên dịch từ file .ASM sang file .OBJ
              Tasm <tên file chương trình>.ASM

           B3. Biên dịch từ file .OBJ sang file .EXE
              Tlink <tên file>.OBJ

           B4: chạy chương trình:
              <tên file>.EXE
           B5: chẩn lỗi (nếu cần thiết)
              Td <tên file>.EXE

  Để tự động hóa, ta có thể tạo file .BAT chứa các lệnh trên.

     Ví dụ:

     Tạo file RunASM.bat trong cùng thư mục với tập tin .ASM với nội dung như sau :

     tasm %1
     tlink  %1
Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM                                                 -2-
Hướng dẫn thực hành môn Hợp Ngữ                                                            Nhập môn
     %1

        (%1 là lấy tham số thứ nhất trong command line)
        Sau đó để biên dịch, liên kết và thực thi chương trình hello.ASM ta chỉ cần gõ :

        RunASM hello


   Công cụ EditPlus

       Đây là công cụ soạn thảo văn bản tiện dụng, cho phép tự động đổi màu chữ theo cú pháp.
   Ngoài ra còn có thể thiết đặt phím tắt để gọi các tiện ích khác. Để dùng cho soạn thảo chương
   trình assembler, cần copy file định nghĩa cú pháp vào thư mục cài đặt và đăng kí sử dụng nó cho
   những file có tên mở rộng “.asm”.

           B0. Cấu hình Edit Plus: xem trong file hướng dẫn
           B1. Biên dịch file .ASM : nhấn Ctrl + 1 sẽ biên dịch file đang soạn thảo thành .OBJ
           B2. Liên kết : nhấn Ctrl + 2 sẽ biên dịch file .OBJ thành .EXE
           B3. Chạy chương trình : nhấn Ctrl + 3 sẽ chạy chương trình .EXE
           B4. Chẩn lỗi chương trình : nhấn Ctrl + 4 sẽ debug chương trình .EXE

        Lưu ý:
        - Để tránh phiền phức khi làm việc với Turbo Assembler, tránh đặt tên thư mục có chứa
           khoảng trắng.
        - Trước khi nhấn Ctrl + 1 lần đầu tiên, nhớ lưu chương trình với tên cần thiết.

   Một số lệnh cơ bản

        MOV    des,src        : chép dữ liệu từ src sang des
        INC    des            : tăng des một đơn vị
        DEC    des            : giảm des một đơn vị
        ADD    des,src        : des = des + src
        SUB    des,src        : des = des – src
        INT    num            : gọi ngắt



Tài liệu tham khảo
   1.   Nguyễn Minh Tuấn, Giáo trình hợp ngữ - Chương 1, ĐHKHTN, 2002
   2.   Randall Hyde, The art of assembly language programming – Chapter 1.
   3.   Norton Guide
   4.   Dan Rollins, TechHelp v.6.0


Bài tập

Bài 1. Viết CT nhập vào 1 ký tự, xuất ra ký tự đó
       Ví dụ:
              Moi ban nhap 1 ky tu: b
              Ky tu vừa nhập: b
       Hướng dẫn:

Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM                                                -3-
Hướng dẫn thực hành môn Hợp Ngữ                                                   Nhập môn
            Để nhập 1 một ký tự sử dụng hàm 1 của ngắt 21h, để xuất, sử dụng hàm 2.
                  mov AH,1
                  int 21h ; kết quả trong AL

                      mov DL,AL ; kí tự cần xuất trong DL
                      mov AH,2
                      int 21h

Bài 2. Viết chương trình xuất ra màn hình một số dòng.
       Ví dụ:
              Đây là chương trình làm quen với Assembly.
              Để chay duoc 1 CT hop ngu ban can thuc hien cac buoc sau:
                 1) Dich file ASM thanh file OBJ
                 2) Lien ket file OBJ thanh file EXE
                 3) Chay file EXE
              Moi truong thuc hanh: Editplus
       Hướng dẫn:
              (Mã ASCII của các ký tự xuống dòng, về đầu dòng, tab là: 10, 13, 9 )
              Cách 1: xuất từng dòng
                     Msg1 DB “Đây là chương trình làm quen với Assembly.$”
                     Msg2 DB 10,13,“Để chay … cac buoc sau:$”
                     Msg3 DB 10,13,9,“1. Dich file ASM thanh file OBJ.$”
                     Msg4 DB 10,13,9,“2. Lien ket file OBJ thanh file EXE.$”
                     Msg5 DB 10,13,9,“3. Chay file EXE. $”
                     Msg6 DB 10,13,”Moi truong thuc hanh: Editplus.$”
              Cách 2: xuất 1 lần
                     Msg DB “Đây là chương trình làm quen với Assembly.”
                     DB 10,13,“Để chay … cac buoc sau:”
                     DB 10,13,9,“1. Dich file ASM thanh file OBJ.”
                     DB 10,13,9,“2. Lien ket file OBJ thanh file EXE.”
                     DB 10,13,9,“3. Chay file EXE. ”
                     DB 10,13,”Moi truong thuc hanh: Editplus.$”

Bài 3. Viết CT nhập vào 1 ký tự, xuất ra ký tự liền trước và liền sau.
       Ví dụ:
              Moi ban nhap 1 ky tu: b
              Ky tu lien truoc: a
              Ky tu lien sau: c
       Hướng dẫn:
              Sử dụng lệnh INC, DEC

Bài 4. Viết CT nhập vào 1 ký tự thường. In ra ký tự Hoa
       Ví dụ:
              Moi ban nhap 1 ky tu: b
              Ky tu Hoa: B
       Hướng dẫn:
              Kí tự hoa và kí tự thường của cùng một chữ cái tiếng Anh cách nhau 20h. Do đó, để
              chuyển đổi chữ hoa thành chữ thường và ngược lại, chỉ cần dùng lệnh ADD, SUB.

Bài 5. Viết CT nhập vào 1 ký tự hoa. In ra ký tự thường
       Ví dụ:
              Moi ban nhap 1 ky tu: B
              Ky tu thường: b
Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM                                            -4-
Hướng dẫn thực hành môn Hợp Ngữ                                                    Nhập môn
     Hướng dẫn:
            Kí tự hoa và kí tự thường của cùng một chữ cái tiếng Anh cách nhau 20h. Do đó, để
            chuyển đổi chữ hoa thành chữ thường và ngược lại, chỉ cần dùng lệnh ADD, SUB.

Bài 6. Viết CT nhập vào 2 ký tự, in ra ký tự tổng mã ascii của 2 ký tự đó
       Ví dụ:
              Ký tự 1: 1
              Ký tự 2: 2
              Ký tự tổng: c
       Hướng dẫn:
              Sử dụng lệnh ADD

Bài 7. Viết chương trình nhập vào 2 số nguyên dương x1, x2 (1 ≤ x2 < x1 < 9). Xuất ra kết quả các
phép tính: x1-1, x1 +2, x1+x2, x1-x2
       Ví dụ:
               x1 = 5
               x2 = 3
               x1 – 1 = 4
               x1 + 1 = 6
               x1 + x2 = 8
               x1 – x2 = 7
       Hướng dẫn:
               Để chuyển đổi các kí tự ‘0’ – ‘9’ thành số 0 – 9 chỉ cần thực hiện phép trừ đi 48 (mã
               của ‘0’). Sau khi thực hiện phép tính, chuyển đổi thành kí tự và in ra màn hình (có thể
               dùng biểu diễn Hex). Sử dụng lệnh INC, DEC, ADD, SUB.


Mở rộng
   1. Tự tìm hiểu xem hàm nào trong ngắt 21h dùng để nhập một xâu kí tự ? Ngoài ngắt 21h, còn
      ngắt nào có thể dùng để nhập xuất từ bàn phím ? (dùng NortonGuide hoặc TechHelp).
   2. Viết chương trình nhập tên và in ra màn hình câu “Hello ” + tên đã nhập.
   3. Tìm hiểu xem tại sao không có lệnh MOV x1, x2 (x1,x2 là hai biến trong bộ nhớ)
   4. Hai lệnh “INC AX” và “ADD AX, 1” khác nhau chỗ nào ?




Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM                                                 -5-

Weitere ähnliche Inhalte

Was ist angesagt?

Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.commai_non
 
Ky thuat lap trinh c++
Ky thuat lap trinh c++Ky thuat lap trinh c++
Ky thuat lap trinh c++ptquang160492
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taintvb2tin09
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]bookbooming1
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++ptquang160492
 
Bai tap lap trinh c
Bai tap lap trinh  cBai tap lap trinh  c
Bai tap lap trinh ctiểu minh
 
Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtMôi Trường Việt
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoBác Luân
 
Giao trinh c++ aptech
Giao trinh c++ aptechGiao trinh c++ aptech
Giao trinh c++ aptechTấn Nhật
 
Haiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlHaiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlGiang Nguyễn
 

Was ist angesagt? (14)

Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
 
Ky thuat lap trinh c++
Ky thuat lap trinh c++Ky thuat lap trinh c++
Ky thuat lap trinh c++
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taint
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taint
 
Bai tap lap trinh c
Bai tap lap trinh  cBai tap lap trinh  c
Bai tap lap trinh c
 
Bai 8
Bai 8Bai 8
Bai 8
 
Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việt
 
Bai5 tin10_ngongulaptrinh
Bai5 tin10_ngongulaptrinhBai5 tin10_ngongulaptrinh
Bai5 tin10_ngongulaptrinh
 
Tin 8
Tin 8Tin 8
Tin 8
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
 
Giao trinh c++ aptech
Giao trinh c++ aptechGiao trinh c++ aptech
Giao trinh c++ aptech
 
Haiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlHaiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sql
 

Andere mochten auch

CQ Campus
CQ CampusCQ Campus
CQ Campusrmaris
 
200901011455420 申請連任簡報
200901011455420 申請連任簡報200901011455420 申請連任簡報
200901011455420 申請連任簡報Kuo-Yi Chen
 
Programa video tutorial
Programa video tutorialPrograma video tutorial
Programa video tutorialUPBC
 
Adobe Illustrator CS5 Part 3 : Real World Illustrator
Adobe Illustrator CS5 Part 3 : Real World IllustratorAdobe Illustrator CS5 Part 3 : Real World Illustrator
Adobe Illustrator CS5 Part 3 : Real World Illustratorcsula its training
 
1 gustar and similar verbs
1 gustar and similar verbs1 gustar and similar verbs
1 gustar and similar verbsLaura Riddle
 
Sharing your-internet-connection-on-linux
Sharing your-internet-connection-on-linuxSharing your-internet-connection-on-linux
Sharing your-internet-connection-on-linuxjasembo
 
3 verbs with irregular forms in the preterit
3 verbs with irregular forms in the preterit3 verbs with irregular forms in the preterit
3 verbs with irregular forms in the preteritLaura Riddle
 
facepalm digital media foundation
facepalm digital media foundationfacepalm digital media foundation
facepalm digital media foundationFacepalm!
 
R11251356966751
R11251356966751R11251356966751
R11251356966751kenanselo
 
Front End Publishing for WordPress
Front End Publishing for WordPressFront End Publishing for WordPress
Front End Publishing for WordPressrfair404
 
1 jazz overview-karthik_k
1 jazz overview-karthik_k1 jazz overview-karthik_k
1 jazz overview-karthik_kIBM
 
1.5 installation manual_version_0.5
1.5 installation manual_version_0.51.5 installation manual_version_0.5
1.5 installation manual_version_0.5Giang Nguyễn
 
Dina yulianti xii ips 4
Dina yulianti xii ips 4Dina yulianti xii ips 4
Dina yulianti xii ips 4Paarief Udin
 
Framtiden och det livslånga lärandet prakticum 20 10 2010
Framtiden och det livslånga lärandet prakticum 20 10 2010Framtiden och det livslånga lärandet prakticum 20 10 2010
Framtiden och det livslånga lärandet prakticum 20 10 2010Heidi Backman
 
Programa oficial nº 11
Programa oficial nº 11Programa oficial nº 11
Programa oficial nº 11UTTA OSPAT
 

Andere mochten auch (20)

CQ Campus
CQ CampusCQ Campus
CQ Campus
 
200901011455420 申請連任簡報
200901011455420 申請連任簡報200901011455420 申請連任簡報
200901011455420 申請連任簡報
 
Programa video tutorial
Programa video tutorialPrograma video tutorial
Programa video tutorial
 
Ung dung web chuong 7
Ung dung web  chuong 7Ung dung web  chuong 7
Ung dung web chuong 7
 
Adobe Illustrator CS5 Part 3 : Real World Illustrator
Adobe Illustrator CS5 Part 3 : Real World IllustratorAdobe Illustrator CS5 Part 3 : Real World Illustrator
Adobe Illustrator CS5 Part 3 : Real World Illustrator
 
1 gustar and similar verbs
1 gustar and similar verbs1 gustar and similar verbs
1 gustar and similar verbs
 
Sharing your-internet-connection-on-linux
Sharing your-internet-connection-on-linuxSharing your-internet-connection-on-linux
Sharing your-internet-connection-on-linux
 
Lincoln thankful
Lincoln thankfulLincoln thankful
Lincoln thankful
 
3 verbs with irregular forms in the preterit
3 verbs with irregular forms in the preterit3 verbs with irregular forms in the preterit
3 verbs with irregular forms in the preterit
 
Bella thankful
Bella thankfulBella thankful
Bella thankful
 
facepalm digital media foundation
facepalm digital media foundationfacepalm digital media foundation
facepalm digital media foundation
 
R11251356966751
R11251356966751R11251356966751
R11251356966751
 
Front End Publishing for WordPress
Front End Publishing for WordPressFront End Publishing for WordPress
Front End Publishing for WordPress
 
1 jazz overview-karthik_k
1 jazz overview-karthik_k1 jazz overview-karthik_k
1 jazz overview-karthik_k
 
CSS Best Practices
CSS Best PracticesCSS Best Practices
CSS Best Practices
 
1.5 installation manual_version_0.5
1.5 installation manual_version_0.51.5 installation manual_version_0.5
1.5 installation manual_version_0.5
 
Dina yulianti xii ips 4
Dina yulianti xii ips 4Dina yulianti xii ips 4
Dina yulianti xii ips 4
 
Framtiden och det livslånga lärandet prakticum 20 10 2010
Framtiden och det livslånga lärandet prakticum 20 10 2010Framtiden och det livslånga lärandet prakticum 20 10 2010
Framtiden och det livslånga lärandet prakticum 20 10 2010
 
Programa oficial nº 11
Programa oficial nº 11Programa oficial nº 11
Programa oficial nº 11
 
Welcome to Chatfield
Welcome to Chatfield Welcome to Chatfield
Welcome to Chatfield
 

Ähnlich wie 1 -nhapmon

7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assemblyLy hai
 
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)Informatics and Maths
 
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)Tấn Nhật
 
86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-c86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-cHoa Cỏ May
 
Kỹ thuật lập trình
Kỹ thuật lập trìnhKỹ thuật lập trình
Kỹ thuật lập trìnhSơn Phạm
 
Bài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUBài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUNgô Doãn Tình
 
C++ dai hoc cong nghe[bookbooming.com]
C++ dai hoc cong nghe[bookbooming.com]C++ dai hoc cong nghe[bookbooming.com]
C++ dai hoc cong nghe[bookbooming.com]bookbooming1
 
lap trinh assembly cho VXL
lap trinh  assembly cho VXLlap trinh  assembly cho VXL
lap trinh assembly cho VXLThân Khương
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danVăn Võ Ntn
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascalLoan Nguyen
 
Giao trinh pascal toan tap
Giao trinh pascal toan tapGiao trinh pascal toan tap
Giao trinh pascal toan tapVõ Tâm Long
 
Phan 2 chuong 1-2
Phan 2   chuong 1-2Phan 2   chuong 1-2
Phan 2 chuong 1-2ngoclanh12
 
Lap trinh assembler
Lap trinh assemblerLap trinh assembler
Lap trinh assemblerleduanmtt
 
Lập trình c căn bản
Lập trình c căn bảnLập trình c căn bản
Lập trình c căn bảntienhien110293
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#Hihi Hung
 

Ähnlich wie 1 -nhapmon (20)

7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assembly
 
Ch assembly
Ch assemblyCh assembly
Ch assembly
 
C++ dai hoc cong nghe
C++ dai hoc cong ngheC++ dai hoc cong nghe
C++ dai hoc cong nghe
 
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
 
Ngon ngu lap trinh c&c++
Ngon ngu lap trinh c&c++Ngon ngu lap trinh c&c++
Ngon ngu lap trinh c&c++
 
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
Ngon ngu lap trinh c&c++ (pham hong thai coltech vnu)
 
86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-c86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-c
 
Kỹ thuật lập trình
Kỹ thuật lập trìnhKỹ thuật lập trình
Kỹ thuật lập trình
 
Bài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUBài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTU
 
C++ dai hoc cong nghe[bookbooming.com]
C++ dai hoc cong nghe[bookbooming.com]C++ dai hoc cong nghe[bookbooming.com]
C++ dai hoc cong nghe[bookbooming.com]
 
lap trinh assembly cho VXL
lap trinh  assembly cho VXLlap trinh  assembly cho VXL
lap trinh assembly cho VXL
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
 
Ltc 01
Ltc 01Ltc 01
Ltc 01
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascal
 
Giao trinh pascal toan tap
Giao trinh pascal toan tapGiao trinh pascal toan tap
Giao trinh pascal toan tap
 
Phan 2 chuong 1-2
Phan 2   chuong 1-2Phan 2   chuong 1-2
Phan 2 chuong 1-2
 
thu ha
thu hathu ha
thu ha
 
Lap trinh assembler
Lap trinh assemblerLap trinh assembler
Lap trinh assembler
 
Lập trình c căn bản
Lập trình c căn bảnLập trình c căn bản
Lập trình c căn bản
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 

Mehr von Giang Nguyễn

Php can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.comPhp can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.comGiang Nguyễn
 
Lap trinh web dong voi php my sql
Lap trinh web dong voi php my sqlLap trinh web dong voi php my sql
Lap trinh web dong voi php my sqlGiang Nguyễn
 
Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01Giang Nguyễn
 
Hay php architect eav modeling
Hay php architect   eav modelingHay php architect   eav modeling
Hay php architect eav modelingGiang Nguyễn
 
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dongHaiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dongGiang Nguyễn
 
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysqlHaiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysqlGiang Nguyễn
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Giang Nguyễn
 
Canbanvethietkevalaptrinhgame
CanbanvethietkevalaptrinhgameCanbanvethietkevalaptrinhgame
CanbanvethietkevalaptrinhgameGiang Nguyễn
 
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menuBuilding websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menuGiang Nguyễn
 
Eclipse pdt indigo release review
Eclipse pdt   indigo release reviewEclipse pdt   indigo release review
Eclipse pdt indigo release reviewGiang Nguyễn
 
Bai tap lap trinh web voi joomla csau
Bai tap   lap trinh web voi joomla csauBai tap   lap trinh web voi joomla csau
Bai tap lap trinh web voi joomla csauGiang Nguyễn
 

Mehr von Giang Nguyễn (20)

Php can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.comPhp can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.com
 
Os xmldomphp
Os xmldomphpOs xmldomphp
Os xmldomphp
 
Os php-7oohabits
Os php-7oohabitsOs php-7oohabits
Os php-7oohabits
 
Os php-5.3new1
Os php-5.3new1Os php-5.3new1
Os php-5.3new1
 
Lap trinh web dong voi php my sql
Lap trinh web dong voi php my sqlLap trinh web dong voi php my sql
Lap trinh web dong voi php my sql
 
Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01
 
Php day4
Php day4Php day4
Php day4
 
Hay php architect eav modeling
Hay php architect   eav modelingHay php architect   eav modeling
Hay php architect eav modeling
 
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dongHaiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
 
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysqlHaiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
 
Chuong07 php
Chuong07 phpChuong07 php
Chuong07 php
 
Bai th08 php voi csdl
Bai th08 php voi csdlBai th08 php voi csdl
Bai th08 php voi csdl
 
Hd lap pttkht2008
Hd lap pttkht2008Hd lap pttkht2008
Hd lap pttkht2008
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206
 
Canbanvethietkevalaptrinhgame
CanbanvethietkevalaptrinhgameCanbanvethietkevalaptrinhgame
Canbanvethietkevalaptrinhgame
 
C1
C1C1
C1
 
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menuBuilding websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
 
Eclipse pdt indigo release review
Eclipse pdt   indigo release reviewEclipse pdt   indigo release review
Eclipse pdt indigo release review
 
Bai tap lap trinh web voi joomla csau
Bai tap   lap trinh web voi joomla csauBai tap   lap trinh web voi joomla csau
Bai tap lap trinh web voi joomla csau
 
Analyse
AnalyseAnalyse
Analyse
 

1 -nhapmon

  • 1. Hướng dẫn thực hành môn Hợp Ngữ Nhập môn Bài thực hành số 1 Nhập môn Mục đích Làm quen với ngôn ngữ lập trình Assembly Biết cách viết, dịch, chạy và chẩn lỗi (debug) một vài chương trình đơn giản Tóm tắt lý thuyết Hợp ngữ (assembler) là ngôn ngữ bậc thấp, giúp cho người lập trình không phải ghi nhớ mã máy (opcode) mà sử dụng các từ ngữ gợi nhớ (pseudo-code) gần với ngôn ngữ tự nhiên để miêu tả công việc cần thực hiện. Tuy vậy, assembler rất gần với ngôn ngữ máy, đòi hỏi người lập trình phải hiểu biết tương đối đầy đủ về cấu trúc phần cứng máy tính. Với mỗi kiểu kiến trúc của bộ vi xử lý, có một bộ lệnh riêng, do đó, có một ngôn ngữ assembler riêng cho nó. Ở đây, chúng ta nghiên cứu assembler cho các bộ vi xử lý Intel thuộc họ x86. Các chương trình sẽ được viết cho chế độ thực (real mode) trong DOS và được biên dịch bằng Turbo Assembler. Cấu trúc thông thường của một chương trình hợp ngũ .model <Khai báo kiểu chương trình> .stack <Khai báo kích thước ngăn xếp> .data <Khai báo dữ liệu> .code <Các lệnh> end Ví dụ: Chương trình sau in ra màn hình dòng chữ “Hello !” .model small .stack 100h .data s DB “Hello !$” ; khai báo xâu kí tự cần in .code mov AX,@data ; lấy địa chỉ data segment ghi vào DS mov DS,AX ; Vì model small, đây cũng là địa chỉ ; segment của xâu s ; xuất chuỗi mov DX, OFFSET s ; lấy địa chỉ offset ghi vào DX mov AH , 9 int 21h ; gọi hàm 9, ngắt 21h để in mov AH, 4Ch ; Thoát khỏi chương trình int 21h end Lưu ý: - Mọi chương trình đều phải có đoạn code thoát khỏi chương trình, nếu không chương trình sẽ không dừng khi hết chương trình của mình. Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM -1-
  • 2. Hướng dẫn thực hành môn Hợp Ngữ Nhập môn Khai báo biến trong hợp ngữ Cú pháp: <tên biến> D<Kiểu DL> <giá trị khởi tạo> hoặc <tên biến> D<Kiểu DL> <số phần tử> dup(<giá trị khởi tạo>) Các kiểu dữ liệu: B (1 byte), W (2 bytes), D (4 bytes) Nếu không khởi tạo, dùng dấu hỏi “?” Ví dụ: Khai báo trong C Khai báo trong hợp ngữ char ch; ch DB ? char ch = ‘a’; ch DB ‘a’ char ch = 5; ch DB 5 char s[]=”nhello world!” s DB 10,13,”hello world!$” int i=100; i DW 100 long l; l DD ? char a[] = {1,2,3}; a DB 1,2,3 char a[100]; a DB 100 dup(?) char a[100][50]; a DB 100 dup(50 dup(?)) Dịch, liên kết, chạy và chẩn lỗi chương trình từ dấu nhắc DOS Cần có các file: tasm.exe (dịch), tlink.exe (liên kết), td.exe (chẩn lỗi). Các bước như sau: B1. Thiết lập đường dẫn path = %path%;<đường dẫn đến thư mục chứa các file kể trên> B2. Biên dịch từ file .ASM sang file .OBJ Tasm <tên file chương trình>.ASM B3. Biên dịch từ file .OBJ sang file .EXE Tlink <tên file>.OBJ B4: chạy chương trình: <tên file>.EXE B5: chẩn lỗi (nếu cần thiết) Td <tên file>.EXE Để tự động hóa, ta có thể tạo file .BAT chứa các lệnh trên. Ví dụ: Tạo file RunASM.bat trong cùng thư mục với tập tin .ASM với nội dung như sau : tasm %1 tlink %1 Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM -2-
  • 3. Hướng dẫn thực hành môn Hợp Ngữ Nhập môn %1 (%1 là lấy tham số thứ nhất trong command line) Sau đó để biên dịch, liên kết và thực thi chương trình hello.ASM ta chỉ cần gõ : RunASM hello Công cụ EditPlus Đây là công cụ soạn thảo văn bản tiện dụng, cho phép tự động đổi màu chữ theo cú pháp. Ngoài ra còn có thể thiết đặt phím tắt để gọi các tiện ích khác. Để dùng cho soạn thảo chương trình assembler, cần copy file định nghĩa cú pháp vào thư mục cài đặt và đăng kí sử dụng nó cho những file có tên mở rộng “.asm”. B0. Cấu hình Edit Plus: xem trong file hướng dẫn B1. Biên dịch file .ASM : nhấn Ctrl + 1 sẽ biên dịch file đang soạn thảo thành .OBJ B2. Liên kết : nhấn Ctrl + 2 sẽ biên dịch file .OBJ thành .EXE B3. Chạy chương trình : nhấn Ctrl + 3 sẽ chạy chương trình .EXE B4. Chẩn lỗi chương trình : nhấn Ctrl + 4 sẽ debug chương trình .EXE Lưu ý: - Để tránh phiền phức khi làm việc với Turbo Assembler, tránh đặt tên thư mục có chứa khoảng trắng. - Trước khi nhấn Ctrl + 1 lần đầu tiên, nhớ lưu chương trình với tên cần thiết. Một số lệnh cơ bản MOV des,src : chép dữ liệu từ src sang des INC des : tăng des một đơn vị DEC des : giảm des một đơn vị ADD des,src : des = des + src SUB des,src : des = des – src INT num : gọi ngắt Tài liệu tham khảo 1. Nguyễn Minh Tuấn, Giáo trình hợp ngữ - Chương 1, ĐHKHTN, 2002 2. Randall Hyde, The art of assembly language programming – Chapter 1. 3. Norton Guide 4. Dan Rollins, TechHelp v.6.0 Bài tập Bài 1. Viết CT nhập vào 1 ký tự, xuất ra ký tự đó Ví dụ: Moi ban nhap 1 ky tu: b Ky tu vừa nhập: b Hướng dẫn: Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM -3-
  • 4. Hướng dẫn thực hành môn Hợp Ngữ Nhập môn Để nhập 1 một ký tự sử dụng hàm 1 của ngắt 21h, để xuất, sử dụng hàm 2. mov AH,1 int 21h ; kết quả trong AL mov DL,AL ; kí tự cần xuất trong DL mov AH,2 int 21h Bài 2. Viết chương trình xuất ra màn hình một số dòng. Ví dụ: Đây là chương trình làm quen với Assembly. Để chay duoc 1 CT hop ngu ban can thuc hien cac buoc sau: 1) Dich file ASM thanh file OBJ 2) Lien ket file OBJ thanh file EXE 3) Chay file EXE Moi truong thuc hanh: Editplus Hướng dẫn: (Mã ASCII của các ký tự xuống dòng, về đầu dòng, tab là: 10, 13, 9 ) Cách 1: xuất từng dòng Msg1 DB “Đây là chương trình làm quen với Assembly.$” Msg2 DB 10,13,“Để chay … cac buoc sau:$” Msg3 DB 10,13,9,“1. Dich file ASM thanh file OBJ.$” Msg4 DB 10,13,9,“2. Lien ket file OBJ thanh file EXE.$” Msg5 DB 10,13,9,“3. Chay file EXE. $” Msg6 DB 10,13,”Moi truong thuc hanh: Editplus.$” Cách 2: xuất 1 lần Msg DB “Đây là chương trình làm quen với Assembly.” DB 10,13,“Để chay … cac buoc sau:” DB 10,13,9,“1. Dich file ASM thanh file OBJ.” DB 10,13,9,“2. Lien ket file OBJ thanh file EXE.” DB 10,13,9,“3. Chay file EXE. ” DB 10,13,”Moi truong thuc hanh: Editplus.$” Bài 3. Viết CT nhập vào 1 ký tự, xuất ra ký tự liền trước và liền sau. Ví dụ: Moi ban nhap 1 ky tu: b Ky tu lien truoc: a Ky tu lien sau: c Hướng dẫn: Sử dụng lệnh INC, DEC Bài 4. Viết CT nhập vào 1 ký tự thường. In ra ký tự Hoa Ví dụ: Moi ban nhap 1 ky tu: b Ky tu Hoa: B Hướng dẫn: Kí tự hoa và kí tự thường của cùng một chữ cái tiếng Anh cách nhau 20h. Do đó, để chuyển đổi chữ hoa thành chữ thường và ngược lại, chỉ cần dùng lệnh ADD, SUB. Bài 5. Viết CT nhập vào 1 ký tự hoa. In ra ký tự thường Ví dụ: Moi ban nhap 1 ky tu: B Ky tu thường: b Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM -4-
  • 5. Hướng dẫn thực hành môn Hợp Ngữ Nhập môn Hướng dẫn: Kí tự hoa và kí tự thường của cùng một chữ cái tiếng Anh cách nhau 20h. Do đó, để chuyển đổi chữ hoa thành chữ thường và ngược lại, chỉ cần dùng lệnh ADD, SUB. Bài 6. Viết CT nhập vào 2 ký tự, in ra ký tự tổng mã ascii của 2 ký tự đó Ví dụ: Ký tự 1: 1 Ký tự 2: 2 Ký tự tổng: c Hướng dẫn: Sử dụng lệnh ADD Bài 7. Viết chương trình nhập vào 2 số nguyên dương x1, x2 (1 ≤ x2 < x1 < 9). Xuất ra kết quả các phép tính: x1-1, x1 +2, x1+x2, x1-x2 Ví dụ: x1 = 5 x2 = 3 x1 – 1 = 4 x1 + 1 = 6 x1 + x2 = 8 x1 – x2 = 7 Hướng dẫn: Để chuyển đổi các kí tự ‘0’ – ‘9’ thành số 0 – 9 chỉ cần thực hiện phép trừ đi 48 (mã của ‘0’). Sau khi thực hiện phép tính, chuyển đổi thành kí tự và in ra màn hình (có thể dùng biểu diễn Hex). Sử dụng lệnh INC, DEC, ADD, SUB. Mở rộng 1. Tự tìm hiểu xem hàm nào trong ngắt 21h dùng để nhập một xâu kí tự ? Ngoài ngắt 21h, còn ngắt nào có thể dùng để nhập xuất từ bàn phím ? (dùng NortonGuide hoặc TechHelp). 2. Viết chương trình nhập tên và in ra màn hình câu “Hello ” + tên đã nhập. 3. Tìm hiểu xem tại sao không có lệnh MOV x1, x2 (x1,x2 là hai biến trong bộ nhớ) 4. Hai lệnh “INC AX” và “ADD AX, 1” khác nhau chỗ nào ? Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM -5-