1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Chương IV: Lập trình bằng hợp ngữ docx

23 555 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương IV: Lập trình bằng hợp ngữ
Chuyên ngành Lập trình hợp ngữ
Thể loại Tài liệu
Định dạng
Số trang 23
Dung lượng 179 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CHƯƠNG TRÌNH DỊCH HỢP NGỮ... Biến và hằng khái báo trong một chương trình hợp ngữ cũng có các chức năng giốngnhư trong một chương trình ngôn ngữ cấp cao... Tuy nhiê

Trang 1

CHƯƠNG IV: LẬP TRÌNH BẰNG HỢP NGỮ.

4.1 CHƯƠNG TRÌNH DỊCH HỢP NGỮ.

Như đã biết vi xử lý là một IC số hoạt động theo chương trình Chương trình là tậphợp của các lệnh, mỗi lệnh sẽ thực hiện một chức năng số cơ bản nào đó Hệ thống vixử lý là một hệ thống điện tử số, nên các chương trình cung cấp để nó hoạt động phảiở dưới dạng các mức điện áp cao và thấp, tương ứng với các bit nhị phân 0 và 1.Nhưng nếu chương trình bằng toàn các số 0 và 1 sẽ rất khó nhớ, khó kiểm tra và sửasai đối với người lập trình Để khắc phục tình trạng trên người ta đặt cho mỗi lệnh nhịphân thực hiện một chức năng số cơ bản một tên dễ nhớ hơn, chúng được gọi là mãgợi nhớ Khi lập trình người ta sử dụng các mã gợi nhớ, còn khi cần vi xử lý thực hiệnthì chương trình sẽ được đổi thành các mã nhị phân 0, 1 để nạp vào bộ nhớ của hệthống, công việc này được gọi là hợp dịch (assembler) chương trình Mỗi bộ vi xử lý

ra đời sẽ có một tập lệnh của nó dưới dạng mã gợi nhớ và mã nhị phân tương ứng, vìvậy việc hợp dịch chương trình có thể thực hiện thủ công bằng cách tra bảng lệnh Khimáy tính ra đời để nhanh chóng và chính xác, việc hợp dịch thường được thực hiệnbằng các chương trình viết sẵn, các chương trình này được gọi là các chương trình hợpdịch hay chương trình dịch hợp ngữ, chúng thường được cung cấp từ các hãng phầnmềm, hoặc chính từ các hãng sản xuất vi xử lý

Với máy vi tính, đầu tiên các chương trình cần được soạn thảo bao gồm các lệnh gợinhớ dưới dạng văn bản, bằng bất kỳ một phần mềm soạn thảo văn bản nào, tất nhiênchúng phải theo đúng cú pháp qui định của chương trình hợp dịch Sau đó tập tin vănbản này sẽ được dịch và liên kết bằng các chương trình chuyên dụng để tạo ra các tậptin nhị phân có thể thực hiện trên máy vi tính, hoặc nạp vào bộ nhớ cho các hệ thống vixử lý khác

Thông thường mỗi họ vi xử lý có ít nhất một chương trình hợp dịch, các chương trìnhhợp dịch khác nhau cũng thường có qui định cú pháp khác nhau Ví dụ các vi xử lý họZilog có phần mềm dịch và liên kết là M80 và L80, họ Intel có MASM, LINK vàEXEC2BIN của Microsoft và TASM, TLINK của Borland, họ vi điều khiển 8051 cóM51, L51 và OH… Tuy có qui định cú pháp khác nhau, nhưng cấu trúc các hàng lệnhvà khung chương trình cũng tương đối giống nhau, các lỗi khi soạn thảo sẽ được thôngbáo khi hợp dịch hoặc có thể tìm thấy trong phần trợ giúp của chương trình Sau đâychúng ta sẽ xem xét về các soạn thảo và cấu trúc của một chương trình hợp ngữ viếtcho các chương trình hợp dịch họ Intel TASM và TLINK

4.2 CẤU TRÚC CỦA CHƯƠNG TRÌNH HỢP NGỮ.

4.2.1 Cú pháp các câu lệnh.

Một chương trình hợp ngữ bao gồm các dòng lệnh, một dòng lệnh có thể bao gồm cáclệnh gợi nhớ chỉ thị cho vi xử lý thực hiện một chức năng số nào đó, cũng có thể làmột lệnh giả (Pseudo) chỉ có ý nghĩa sử dụng cho các chương trình dịch Một dònglệnh hợp ngữ có thể có các phần sau:

Nhãn: Mã lệnh Các toán hạng Chú giải

Ví dụ một dòng lệnh với mã gợi nhớ như sau:

Label1: MOV AH,[BX] ; nạp vào AH nội dung ô nhớ có địa chỉ [BX]

Dòng lệnh trên có phần nhãn là Label1, phần mã gợi nhớ là MOV biểu thị lệnh dichuyển dữ liệu, phần các toán hạng là AH và [BX] biểu diễn việc truyền dữ liệu từ ô

Trang 2

nhớ có địa chỉ DS:[BX] vào thanh ghi AH, phần chú giải bắt đầu từ sau dấu ‘;’ cho tớihết dòng.

Ví dụ về một dòng lệnh giả hợp ngữ như:

Phần mã lệnh.

Thông thường phần mã lệnh trong bất cứ dòng lệnh nào cũng có chứa các lệnh gợi

nhớ hoặc các lệnh giả hợp ngữ Các lệnh gợi nhớ sẽ được trình hợp dịch chuyển thànhmã máy nhị phân Các lệnh giả chỉ có tác dụng hướng dẫn cho các trình hợp dịch màkhông được dịch ra mã máy trong chương trình

Phần toán hạng.

Đối với các mã lệnh gợi nhớ, phần này chứa các toán hạng của lệnh như đã mô tảtrong các cách định vị địa chỉ Tuỳ theo từng lệnh mà phần toán hạng có thể bao gồm

0, 1 hoặc 2 toán hạng Thông thường khi không có phần toán hạng, thì toán hạng thaotác trong lệnh sẽ được hiểu ngầm, nếu chỉ có một toán hạng nó sẽ được gọi là toánhạng đích, nếu có hai toán hạng sẽ có một toán hạng nguồn và một toán hạng đích Đối với các lệnh giả phần này sẽ chứa các thông tin liên quan đến lệnh giả đó

Phần chú giải.

Phần này được tính bắt đầu từ sau dấu ‘;’ trên một dòng lệnh (có thể không có cácphần khác) Nó cho phép ghi vào các lời giải thích về dòng lệnh hoặc về hoạt động củachương trình, nó giúp ích cho người lập trình dễ nhớ hơn khi đang viết chương trình,hoặc khi đọc lại chương trình Khi hợp dịch các lời giải thích này sẽ không được dịch

ra mã lệnh, có nghĩa là nó không có giá trị gì trong chương trình mã máy

4.2.2 Dữ liệu cho chương trình.

Dữ liệu trong một chương trình hợp ngữ rất đa dạng Các dữ liệu có thể được chodưới dạng hệ nhị phân, thập phân, bát phân hoặc thập lục phân Khi số cho ở hệ nàocần phải có ký tự chỉ thị cho hệ đó ở phía sau: hệ nhị phân là chữ B (Binary), hệ bátphân là chữ O (Octal), hệ 16 là chữ H (Hexadecimal), riêng hệ thập phân có thể khôngcần viết ký tự phía sau Chú ý trong hệ 16, khi các dữ liệu được bắt đầu bằng các ký tựchữ, để phân biệt với các tên hoặc nhãn cần phải viết thêm một số 0 lên phía trước Nếu dữ liệu là một chuỗi ký tự thì chúng phải được để trong dấu nháy, chương trìnhsẽ dịch ra mã ASCII tương ứng của nó Ví dụ dữ liệu 41H sẽ tương ứng với ‘A’

4.2.3 Biến và hằng.

Biến và hằng khái báo trong một chương trình hợp ngữ cũng có các chức năng giốngnhư trong một chương trình ngôn ngữ cấp cao Một biến cần phải được định kiểu bằngcác lệnh giả như:

Trang 3

DB (define byte) : định nghĩa biến kiểu byte

DW (define word): định nghĩa biến kiểu từ (hai byte)

DD (define double word): định nghĩa biến từ kép (4 byte)

DT (define ten byte): định nghĩa biến 10 byte

Các biến có thể gán giá trị khởi động hoặc không

Ví dụ dòng lệnh: X1 DB 4 khai báo một biến byte có tên là X1 và giá trị khởi độnglà 4 Nếu dấu ? thay vào vị trí của số 4 thì biến X1 sẽ được dành chỗ trong bộ nhớ,nhưng khi chương trình bắt đầu hoạt động nó sẽ có giá trị bất kỳ do không được gángiá trị khởi động Khai báo hoàn toàn tương tự cho các biến kiểu khác

Biến mảng.

Biến mảng hình thành từ một dãy liên tiếp các phần tử cùng kiểu (byte, từ …), số ônhớ sẽ được dành ra tương ứng với số phần tử của dãy

Ví dụ dòng lệnh: A1 DB 3,5,6,7,8

Khai báo một biến mảng có tên là A1 có giá trị khởi động là 3,5,6,7,8 Phần tử đầutrong mảng là 3 có địa chỉ trùng với A1, phần tử thứ hai sẽ có địa chỉ kế tiếp …

Khi muốn khởi động các phần tử của mảng với cùng một giá trị có thể sử dụng toán tửDUP trong lệnh

Ví dụ dòng lệnh A2 DB 100 DUP (0) sẽ khai báo biến mảng có một trămphần tử đều có giá trị khởi động bằng 0 Khi thế số 0 bằng dấu ? thì một trăm phần tửcủa mảng sẽ không được gán trước giá trị khởi động

Cũng có thể khai báo một biến mảng theo kiểu hỗn hợp bao gồm nhiều toán tử DUP Ví dụ dòng lệnh: M DB 1,2, 2 DUP (8), 3 DUP (4), 9

sẽ hoàn toàn tương đương với dòng lệnh: M DB 1,2,8,8,4,4,4,9

Chú ý trong một số vi xử lý (như của Intel), nếu có một từ trong bộ nhớ thì byte thấpsẽ nằm ở địa chỉ thấp, byte cao nằm ở địa chỉ cao, còn ở một số vi xử lý khác(Motorola) lại có cách cất dữ liệu theo thứ tự ngược lại

Biến kiểu xâu ký tự.

Biến kiểu xâu ký tự là trường hợp đặc biệt của biến mảng, trong đó các phần tử củamảng là các ký tự Một xâu ký tự có thể định nghĩa bằng các ký tự hoặc bằng mãASCII tương ứng của chúng Các dòng lệnh sau cùng định nghĩa một xâu ký tự nhưnggán cho chúng các tên khai báo cho chúng khác nhau:

STR2 DB 73h, 74h, 72h, 69h, 6Eh, 67hSTR3 DB 73h, 74h, 'r', 'i', 'n', 67h

Hằng có tên.

Các hằng số trong các chương trình hợp ngữ cung thường được gán tên để dễ nhớ vàdễ đọc hơn Hằng có thể là kiểu số hoặc kiểu ký tự Việc gán tên cho hằng được thựchiện bằng lệnh EQU (equate) như sau:

CR EQU 0Dh ; CR là ký tự về đầu hàng (Carriage return)

LF EQU 0Ah ; LF là ký tự xuống hàng (Line Feed) Hằng cũng có thể là một chuỗi ký tự, ví dụ có thể tên cho một chuỗi ký tự sau đó sửdụng để định nghĩa cho một biến mảng khác

Trang 4

Do EQU là một lệnh giả không dành chỗ của bộ nhớ cho tên hằng nên có thể đặt dònglệnh khai báo này ở bất kỳ vị trí nào trong chương trình Tuy nhiên trong thực tế người

ta thường đặt chúng trong phần khai báo dữ liệu

4.3 LẬP TRÌNH VÀ CHO CHẠY MỘT CHƯƠNG TRÌNH HỢP NGỮ.

4.3.1 Khung của một chương trình hợp ngữ.

Một chương trình hợp ngữ chạy trên các hệ thống vi xử lý họ Intel bao gồm các đoạnvùng nhớ khác nhau để chứa mã lệnh, dữ liệu và ngăn xếp Các đoạn này sẽ được khaibáo bằng các lệnh giả hợp ngữ theo đúng cú pháp của trình biên dịch tạo thành khungcủa chương trình Sau đây chúng ta sẽ xem xét các từ khoá tối thiểu trong một chươngtrình hợp ngữ với các trình hợp dịch MASM và TASM

Khai báo qui mô sử dụng bộ nhớ.

Dung lượng bộ nhớ dành cho đoạn mã lệnh và đoạn dữ liệu được xác định nhờ lệnh

giả '.MODEL', lệnh này phải luôn đặt trước tất cả các lệnh khác trong chương trình.

Cú pháp lệnh: MODEL Kiểu kích thước bộ nhớ

Có nhiều kiểu kích thước bộ nhớ cho các chương trình với đòi hỏi dung lượng bộ nhớkhác nhau Với người mới lập trình thông thường các đoạn mã lệnh và dữ liệu đềukhông vượt quá 64KB nên chọn kiểu nhỏ (Small) hoặc kiểu hẹp (Tiny) Ngoài ra còncó các kiểu kích thước bộ nhớ khác như liệt kê trong bảng sau:

Kiểu kích thước

Tiny (hẹp) Mã lệnh và dữ liệu trong cùng một đoạn 64 KB

Small (nhỏ) Mã lệnh nằm trong một đoạn, dữ liệu nằm trong một đoạn

Medium (trung

bình) Mã lệnh không nằm trong một đoạn, dữ liệu nằm trong mộtđoạn.Compact (gọn) Mã lệnh nằm trong một đoạn, dữ liệu không nằm trong một

đoạn

Large (lớn) Mã lệnh không nằm trong một đoạn, dữ liệu không nằm trong

một đoạn, các mảng không lớn hơn 64KB

Huge (đồ sộ) Mã lệnh không nằm trong một đoạn, dữ liệu không nằm trong

một đoạn, các mảng có thể lớn hơn 64KB

Khai báo ngăn xếp.

Khai báo ngăn xếp để dành ra một vùng nhớ đủ lớn cho ngăn xếp Việc khai báo ngănxếp được thực hiện bằng lệnh giả sau:

.Stack Kích thước

Kích thước sẽ xác định số byte dành cho ngăn xếp, nếu không có khai báo kích thước

chương trình dịch sẽ tự động gán cho ngăn xếp kích thước 1KB, đây là một kích thướcquá lớn đối với các ứng dụng thông thường Các chương trình thông thường có thểkhai báo ngăn xếp từ 100 tới 256 byte Chú ý với các chương trình khai báo kiểu bộnhớ hẹp (.Model Tiny) sẽ không có khai báo ngăn xếp

Khai báo dữ liệu.

Đoạn dữ liệu sẽ chứa toàn bộ các khai báo về biến cho chương trình, các hằng cũng cóthể được khai báo trong phần này Việc khai báo dữ liệu được thực hiện bằng lệnhgiả DATA Các chương trình với kiểu Tiny cũng không có khai báo này

Khai báo đoạn mã.

Trang 5

Đoạn mã là nơi chứa các lệnh gợi nhớ của chương trình Việc khai báo đoạn mã đượcthực hiện bằng lệnh giả CODE Chương trình sẽ thực hiện lệnh đầu tiên nằm saulệnh CODE sau đó là các lệnh kế tiếp tùy theo cấu trúc điều khiển của nó Các chươngtrình con cũng được viết trong đoạn này, nhưng chú ý rằng chúng chỉ được chuyển tớibằng các lệnh gọi (CALL).

Khung của chương trình hợp ngữ để dịch ra dạng EXE.

Từ các khai báo của chương trình đã trình bày ở trên có thể xây dựng một khung tổngquát cho các chương trình hợp ngữ với kiểu kích thước bộ nhớ nhỏ, các chương trìnhloại này sau khi hợp dịch sẽ tạo ra một tập tin có thể thực hiện được (executable) vớiđuôi EXE Khung các chương trình loại này biểu diễn như sau:

; các chương trình con để tại phần này

End Main ; kết thúc toàn bộ chương trình

Khi một chương trình EXE được nạp vào bộ nhớ để thực hiện, DOS sẽ tạo ra mộtmảng 256 byte gọi là đoạn mào đầu chương trình (Program Segment Prefix- PSP)dùng để chứa các thông tin liên quan đến chương trình và đặt nó ngay phía trước vùngnhớ chứa các mã của chương trình DOS cũng cung cấp các thông số liên quan đến cácthanh ghi đoạn DS và ES Do đó DS và ES không chứa giá trị địa chỉ của đoạn dữ liệucủa chương trình, vì thế phải có các lệnh khởi động cho chúng

Khung chương trình hợp ngữ dịch ra dạng COM.

Trong chương trình EXE có đầy đủ các đoạn, với chương trình COM các đoạn ngănxếp, dữ liệu và mã lệnh sẽ được gộp chung Như vậy các chương trình COM sẽ ngắngọn và đơn giản hơn, nó sẽ tiết kiệm cả về thời gian thực hiện, dung lượng bộ nhớ vàdung lượng lưu trữ chương trình trên đĩa Sau đây là khung một chương trình hợp ngữdịch ra dạng COM:

Trang 6

; Các lệnh của chương trình chính để tại đây

INT 20H ; trở về DOS

Chương trình COM sẽ bị các hạn chế gây ra bởi dung lượng cực đại dành cho toàn bộchương trình gói gọn trong đoạn 64KB, nên chúng chỉ sử dụng cho các ứng dụngkhông lớn lắm Mặt khác chương trình cũng chỉ được sử dụng một ngăn xếp có dunglượng hạn chế, nếu có quá nhiều dữ liệu được nạp vào ngăn xếp sẽ làm mất các mãlệnh của chương trình

Cách tạo và thực hiện một chương trình hợp ngữ trên máy vi tính.

Máy vi tính IBM PC là tạo và thực hiện các chương trình hợp ngữ cho họ Intel Cácbước để thực hiện công việc này như sau:

- Dùng các phần mềm soạn thảo văn bản (SK, NC…) để soạn thảo các chương trìnhnguồn được mặc định có đuôi ASM

- Dùng các chương trình hợp dịch MASM hoặc TASM để dịch tập tin nguồn ASM

ra dạng mã máy có đuôi OBJ Các dòng lệnh dưới dấu nhắc DOS như sau:

Với MASM: C:\MASM filename.ASM

Với TASM: C:\TASM filename.ASM

- Dịch và liên kết các tập tin OBJ thành tập tin có thể chạy được:

Với MASM dùng LINK để liên kết các tập tin OBJ tạo ra chương trình EXE, nếuchương trình nguồn viết dưới dạng dịch ra EXE thì tập tin này có thể thực hiện được.Nếu viết dưới dạng COM thì cần phải sử dụng EXE2BIN để dịch ra tập tin COM mớicó thể chạy được

Với TASM dùng TLINK để liên kết và tạo ra tập tin chạy EXE, nếu viết dướidạng COM phải dùng dòng lệnh TLINK/t để tạo ra tập tin COM

4.4 Các cấu trúc lập trình cơ bản.

Các lệnh của một ngôn ngữ, nhất là các lệnh hợp ngữ thường chỉ thực hiện các tác vụ

cơ bản Vì vậy để viết một chương trình người ta thường chia nó ra thành các khốichức năng nhỏ hơn, các khối chức năng nhỏ này lại chia thành các khối chức năng nhỏhơn nữa Việc phân chia này được thực hiện cho tới khi mỗi khối chức năng trở nênđơn giản và dễ dàng thực hiện bằng các lệnh

Các khối chức năng thành phần thường được thực hiện bằng các cấu trúc lập trình cơbản Phương pháp chia chương trình thành các khối chức năng thành phần như trênlàm cho chương trình trở nên có cấu trúc, dễ dàng trong việc hiệu chỉnh, cải tiến và lậptài liệu lưu trữ cho nhiều người sử dụng Có ba cấu trúc lập trình cơ bản thường đượcsử dụng khi giải quyết các công việc khác nhau là :

+ Cấu trúc tuần tự

+ Cấu trúc lựa chọn

+ Cấu trúc lặp

Đặc điểm chung của tất cả các cấu trúc lập trình cơ bản là tính cấu trúc: tức là chỉ cómột lối vào và một lối ra cho cấu trúc đó Các cấu trúc này thường được chuẩn hoá ởcác ngôn ngữ cấp cao, trong phần này sẽ mô tả việc thực hiện chúng trong hợp ngữ

Trang 7

4.4.1 Cấu trúc tuần tự.

Cấu trúc tuần tự là cấu trúc thông dụng và đơn giản nhất Trong cấu trúc này các lệnh

được thực hiện một cách tuần tự, lệnh nọ kế tiếp lệnh kia Sau khi thực hiện xong lệnhcuối cùng thì công việc phải được hoàn tất

Ví dụ đoạn chương trình tính giá trị của biểu thức b2 – 4ac với a, b, c là các biến 8 bitnằm trong các thanh ghi BH, BL, CH có thể thực hiện như sau:

4.4.2 Cấu trúc lựa chọn.

Cấu trúc IF – THEN.

Ngữ pháp: IF Điều kiện THEN Công việc.

Trong cấu trúc này nếu điều kiện thoả công việc sẽ được thực hiện, nếu không côngviệc sẽ bị bỏ qua Trong hợp ngữ cấu trúc này có thể thực hiện bằng các lệnh nhảy cóđiều kiện Giải thuật của cấu trúc biểu diễn trên hình 4.1

Ví dụ : Viết đoạn chương trình xoá AH về 0 khi giá trị của nó lớn hơn 03

CMP AH,03JNA THOATMOV AH,0THOAT:

Cấu trúc IF – THEN – ELSE.

Ngữ pháp: IF Điều kiện THEN Công việc1 ELSE Công việc 2.

Giải thuật của cấu trúc trình bày trên hình 4.2 trong cấu trúc này nếu thỏa điều kiệnthì công việc 1 được thực hiện, nếu không thì công việc 2 được thực hiện Trong hợpngữ điều này tương đương với việc sử dụng các lệnh nhảy có điều kiện và không điềukiện đến các nhãn khác nhau

Công việc

Điều kiện

Đúng Sai

Hình 4.1 Giải thuật cấu trúc IF – THEN

Trang 8

Ví dụ : Tìm số nhỏ hơn trong hai số chứa trong AH và BH gán cho AL.

CMP AH,BH;AH<BH?

JNL GAN ; Nếu đúng gán AH cho AL

MOV AL,BH ; Nếu không lấy số nhỏ hơn trong BH vào AH

JMP RA

GAN:MOV AL,AH ; AL sẽ chứa số nhỏ hơn

RA:

Cấu trúc CASE.

Ngữ pháp: CASE Biểu thức

Giá trị 1: Công việc 1 Giá trị 2: Công việc 2

……

Giá trị N: Công việc N

END CASEGiải thuật của cấu trúc biểu diễn trên hình 4.3 Trong cấu trúc này nếu biểu thức có giátrị 1 thì công việc 1 được thực hiện, nếu biểu thức có giá trị 2 công việc 2 được thựchiện … Trong hợp ngữ có thể sử dụng các lệnh nhảy có điều kiện và không có điềukiện để chuyển điều khiển của chương trình tới các nhãn khác nhau

Ví dụ : Xét giá trị của AX để thực hiện các công việc khác nhau:

Trang 9

4.4.3 Cấu trúc lặp.

Cấu trúc FOR – DO.

Ngữ pháp: FOR Số lần lặp DO Công việc.

Giải thuật của cấu trúc trình bày trên hình 4.4 Trong cấu trúc này công việc sẽ đượcthực hiện nhiều lần (bằng số lần lặp được khai báo) Trong hợp ngữ công việc này cóthể dùng lệnh LOOP, hoặc cặp lệnh giảm (DEC) và nhảy khi chưa bằng 0

Ví dụ : viết chương trình tính tổng các số tự nhiên từ 1 tới 99.

MOV AX,0 ;Khởi động tổng bằng 0

MOV DX,1 ; Số thứ nhất

MOV CX,99 ; Tất cả bao gồm 99 số

LAP: ADD AX,DX ; Tổng := Tổng + 1

INC DX ; Tăng để có số tiếp theo

LOOP LAP ; Lặp cho tới khi hết 99 số

Khởi động bộ đếm

Giảm bộ đếm

Trang 10

Cấu trúc lặp WHILE – DO.

Ngữ pháp: WHILE Điều kiện DO Công việc.

Giải thuật của cấu trúc trình bày trên hình 4.5 Trước hết điều kiện sẽ được kiểm tra,công việc sẽ được lặp lại khi điều kiện còn đúng Trong hợp ngữ cấu trúc này có thểthực hiện bằng cách sử dụng lệnh CMP hoặc một lệnh nào đó để kiểm tra điều kiện,sau đó dùng lệnh nhảy có điều kiện để thoát khỏi vòng lặp

Ví dụ :Đọc và hiển thị các ký tự nhập từ bàn phím cho đến khi gặp ESC thì dừng,

đếm số ký tự đọc được

XOR CX,CX ; Xoá số đếm

MOV AH,1 ; Hàm đọc ký tự từ bàn phím của INT 21H có hiện

TIEP:INT 21H ; gọi ngắt 21H AL chứa mã ký tự

CMP AL,27H ;Kiểm tra ký tự vừa hiện có phải là ESC không

JE RA

INC CX ; tăng số đếm

JMP TIEP

RA:

Cấu trúc lặp REPEAT – UNTIL.

Ngữ pháp: REPEAT công việc UNTIL điều kiện.

Giải thuật của cấu trúc trình bày trên hình trên hình 4.6 Trong cấu trúc này công việcđược thực hiện trước ít nhất một lần, sau đó điều kiện sẽ được kiểm tra Nếu điều kiệnthoả công việc tiếp tục được lặp lại Trong hợp ngữ điều kiện thường được kiểm trabằng lệnh CMP, và công việc sẽ được tiếp tục bằng một lệnh nhảy có điều kiện

Ví dụ : Xác định xem có bao nhiêu số tự nhiên bắt đầu từ 1 có tổng nhỏ hơn 1000 ?

MOV AX,0 ;khởi động tổng bằng 0

MOV DX,1 ;khởi động số đầu tiên để cộng

TIEP: ADD AX,DX ;cộng để có tổng

INC DX ;tăng để có số tiếp theo và cũng chính là số đếm

CMP AX,1000 ; tổng còn nhỏ hơn 1000 thì cộng tiếp

Hình 4.5 Giải thuật cấu trúc WHILE - DO.

Trang 11

4.5. Một số chương trình mẫu tiêu biểu.

Khi lập trình bằng hợp ngữ trên các máy vi tính IBM PC, để đơn giản có thể sử dụng

các chương trình điều khiển thiết bị sẵn có của BIOS và DOS Ít nhất trước hết cũngcần chấp nhận các thủ tục có sẵn này để sử dụng được các thiết bị giao tiếp cơ bản vớimáy tính như bàn phím, màn hình trong bước đầu lập trình Còn khi đã có đầy đủ cáckiến thức về hợp ngữ, cũng như về cấu trúc phần cứng máy tính chúng ta hoàn toàn cóthể thực hiện các chương trình điều khiển các thiết bị bằng các lệnh gợi nhớ căn bảntrong tập lệnh, hoặc viết các chương trình điều khiển thiết bị cho các hệ thống phầncứng của riêng mình

BIOS (Base Input Output System) là chương trình trong bộ nhớ ROM, nó sẽ đượcthực hiện trước tiên ngay khi khởi động máy BIOS sẽ kiểm tra các thiết bị cơ bảntrong hệ thống sau đó nó chuyển điều khiển cho hệ điều hành Hệ điều hành thôngdụng khi máy tính mới ra đời là DOS (Disk Operation System) Trong DOS và BIOScó các chương trình con viết sẵn cho việc điều khiển các thiết bị Để sử dụng chúngtrong chương trình hợp ngữ chúng ta dùng lời gọi ngắt mềm (INT) kèm theo số hiệungắt Các số hiệu ngắt được qui định sẵn cho các thiết bị, mỗi ngắt sẽ có các qui địnhkhác nhau về các biến vào và ra khi thực hiện Sau đây là mô tả về một số ngắt thườngsử dụng trong chương trình hợp ngữ

- Ngắt 20H dành riêng để kết thúc chương trình loại COM Hàm này ra lệnh cho hệ

điều hành kết thúc chương trình đang chạy và chuyển điều khiển về cho chương trìnhgọi

- Ngắt 21H:

Hàm 01H: đọc một ký tự từ bàn phím

Một ký tự sẽ được đọc vào từ bàn phím và hiện lên màn hình Nếu tại thời điểm gọihàm chưa có ký tự sẵn sàng, thì hàm sẽ đợi cho tới khi có phím được nhấn

Vào: AH = 01

Ra: AL chứa mã ASCII của phím nhấn

Khi nhận được các ký tự có mã mở rộng AL = 0 Lúc này có thể gọi hàm một lần nữađể đọc được mã mở rộng

Khi ký tự vào là Ctrl – C (mã ASCII là 3) ngắt 23H sẽ được gọi trả điều khiển vềDOS

Ngoài AL, nội dung các thanh ghi khác không bị thay đổi sau khi gọi hàm

Công việc

Điều kiện

Sai Đúng

Hình 4.6 Giải thuật cấu trúc REPEAT – UNTIL.

Ngày đăng: 12/12/2013, 16:15

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w