Chương IV: Lập trình bằng hợp ngữ

Chia sẻ: Hoang Cuong | Ngày: | Loại File: DOC | Số trang:23

0
214
lượt xem
117
download

Chương IV: Lập trình bằng hợp ngữ

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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ập hợ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 đó.

Chủ đề:
Lưu

Nội dung Text: Chương IV: Lập trình bằng hợp ngữ

  1. CHƯƠNG IV: LÂP TRINH BĂNG HƠP NGƯ. ̣ ̀ ̀ 4.1. CHƯƠNG TRINH DICH HƠP NGƯ. ̀ ̣ Như đã biêt vi xư lý là môt IC số hoat đông theo chương trinh. Chương trinh là tâp ́ ̣ ̣ ̣ ̀ ̀ ̣ hơp cua cac lênh, môi lênh sẽ thưc hiên môt chưc năng số cơ ban nao đo. Hệ thông vi ̉ ́ ̣ ̃ ̣ ̣ ̣ ̉ ̀ ́ ́ xư lý là môt hệ thông điên tư sô, nên cac chương trinh cung câp để nó hoat đông phai ơ ̣ ́ ̣ ́ ́ ̀ ́ ̣ ̣ ̉ dươi dang cac mưc điên ap cao và thâp, tương ưng vơi cac bit nhị phân 0 và 1. Nhưng ̣ ́ ̣ ́ ́ ́ nêu chương trinh băng toan cac số 0 và 1 sẽ rât khó nhơ, khó kiêm tra và sưa sai đôi ́ ̀ ̀ ̀ ́ ́ ̉ ́ vơi ngươi lâp trinh. Để khăc phuc tinh trang 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ơ ban môt tên dễ nhơ hơn, chung đươc goi là mã gơi ̣ ̣ ̉ ̣ ́ ̣ nhơ. Khi lâp trinh ngươi ta sư dung cac mã gơi nhơ, con khi cân vi xư lý thưc hiên thì ̣ ̀ ̣ ́ ̀ ̀ ̣ chương trinh sẽ đươc đôi thanh cac mã nhị phân 0, 1 để nap vao bộ nhơ cua hệ thông, ̀ ̉ ̀ ́ ̣ ̀ ̉ ́ công viêc nay đươc goi là hơp dich (assembler) chương trinh. Môi bộ vi xư lý ra đơi sẽ ̣ ̀ ̣ ̣ ̀ ̃ có môt tâp lênh cua nó dươi dang mã gơi nhơ và mã nhị phân tương ưng, vì vây viêc ̣ ̣ ̣ ̉ ̣ ̣ ̣ hơp dich chương trinh có thể thưc hiên thủ công băng cach tra bang lênh. Khi may tinh ̣ ̀ ̣ ̀ ́ ̉ ̣ ́ ́ ra đơi để nhanh chong và chinh xac, viêc hơp dich thương đươc thưc hiên băng cac ́ ́ ́ ̣ ̣ ̣ ̀ ́ chương trinh viêt săn, cac chương trinh nay đươc goi là cac chương trinh hơp dich hay ̀ ́ ̃ ́ ̀ ̀ ̣ ́ ̀ ̣ chương trinh dich hơp ngư, chung thương đươc cung câp tư cac hang phân mêm, hoăc ̀ ̣ ́ ́ ́ ̃ ̀ ̀ ̣ chinh tư cac hang san xuât vi xư ly. ́ ́ ̃ ̉ ́ ́ Vơi may vi tinh, đâu tiên cac chương trinh cân đươc soan thao bao gôm cac lênh gơi ́ ́ ̀ ́ ̀ ̀ ̣ ̉ ̀ ́ ̣ nhơ dươi dang văn ban, băng bât kỳ môt phân mêm soan thao văn ban nao, tât nhiên ̣ ̉ ̀ ́ ̣ ̀ ̀ ̣ ̉ ̉ ̀ ́ chung phai theo đung cú phap qui đinh cua chương trinh hơp dich. Sau đó tâp tin văn ́ ̉ ́ ́ ̣ ̉ ̀ ̣ ̣ ban nay sẽ đươc dich và liên kêt băng cac chương trinh chuyên dung để tao ra cac tâp ̉ ̀ ̣ ́ ̀ ́ ̀ ̣ ̣ ́ ̣ tin nhị phân có thể thưc hiên trên may vi tinh, hoăc nap vao bộ nhơ cho cac hệ thông vi ̣ ́ ́ ̣ ̣ ̀ ́ ́ xư lý khac. ́ Thông thương môi họ vi xư lý có it nhât môt chương trinh hơp dich, cac chương trinh ̃ ́ ́ ̣ ̀ ̣ ́ ̀ hơp dich khac nhau cung thương có qui đinh cú phap khac nhau. Ví dụ cac vi xư lý họ ̣ ́ ̃ ̣ ́ ́ ́ Zilog có phân mêm dich và liên kêt là M80 và L80, họ Intel có MASM, LINK và ̀ ̀ ̣ ́ EXEC2BIN cua Microsoft và TASM, TLINK cua Borland, họ vi điêu khiên 8051 có ̉ ̉ ̀ ̉ M51, L51 và OH…. Tuy có qui đinh cú phap khac nhau, nhưng câu truc cac hang lênh ̣ ́ ́ ́ ́ ́ ̀ ̣ và khung chương trinh cung tương đôi giông nhau, cac lôi khi soan thao sẽ đươc thông ̀ ̃ ́ ́ ́ ̃ ̣ ̉ bao khi hơp dich hoăc có thể tim thây trong phân trơ giup cua chương trinh. Sau đây ́ ̣ ̣ ̀ ́ ̀ ́ ̉ ̀ chung ta sẽ xem xet về cac soan thao và câu truc cua môt chương trinh hơp ngư viêt ́ ́ ́ ̣ ̉ ́ ́ ̉ ̣ ̀ ́ cho cac chương trinh hơp dich họ Intel TASM và TLINK. ́ ̀ ̣ 4.2. CÂU TRUC CUA CHƯƠNG TRINH HƠP NGƯ. ́ ́ ̉ ̀ 4.2.1. Cú phap cac câu lênh. ́ ́ ̣ Môt chương trinh hơp ngư bao gôm cac dong lênh, môt dong lênh có thể bao gôm cac ̣ ̀ ̀ ́ ̀ ̣ ̣ ̀ ̣ ̀ ́ lênh gơi nhơ chỉ thị cho vi xư lý thưc hiên môt chưc năng số nao đo, cung có thể là môt ̣ ̣ ̣ ̀ ́ ̃ ̣ lênh giả (Pseudo) chỉ có ý nghia sư dung cho cac chương trinh dich. Môt dong lênh hơp ̣ ̃ ̣ ́ ̀ ̣ ̣ ̀ ̣ ngư có thể có cac phân sau: ́ ̀ Nhan: ̃ Mã lênh ̣ Cac toan hang ́ ́ ̣ Chú giai ̉ Ví dụ môt dong lênh vơi mã gơi nhơ như sau:̣ ̀ ̣ Label1: MOV AH,[BX] ; nap vao AH nôi dung ô nhơ có đia chỉ [BX] ̣ ̀ ̣ ̣ Dong lênh trên có phân nhan là Label1, phân mã gơi nhơ là MOV biêu thị lênh di ̀ ̣ ̀ ̃ ̀ ̉ ̣ chuyên dư liêu, phân cac toan hang là AH và [BX] biêu diên viêc truyên dư liêu tư ô ̉ ̣ ̀ ́ ́ ̣ ̉ ̃ ̣ ̀ ̣ 71
  2. nhơ có đia chỉ DS:[BX] vao thanh ghi AH, phân chú giai băt đâu tư sau dâu ‘;’ cho tơi ̣ ̀ ̀ ̉ ́ ̀ ́ hêt dong.́ ̀ Ví dụ về môt dong lênh giả hơp ngư như: ̣ ̀ ̣ MAIN PROC Lênh bao gôm phân tên MAIN thông bao tên cua môt thủ tuc, phân lênh PROC để xac ̣ ̀ ̀ ́ ̉ ̣ ̣ ̀ ̣ ́ đinh thủ tuc. ̣ ̣ • Phân nhan/tên. ̀ ̃ Thông thương chỉ thị cac nhan cho cac lênh nhay chuyên điêu khiên tơi, chỉ thị cac tên ́ ̃ ́ ̣ ̉ ̉ ̀ ̉ ́ biên hoăc tên thủ tuc. Như vây không phai bât cư dong lênh nao cung cân phân nay. Khi ́ ̣ ̣ ̣ ̉ ́ ̀ ̣ ̀ ̃ ̀ ̀ ̀ hơp dich cac nhan hoăc tên nay sẽ đươc gan băng cac đia chỉ cụ thể cua cac ô nhơ. Cac ̣ ́ ̃ ̣ ̀ ́ ̀ ́ ̣ ̉ ́ ́ tên và nhan trong chương trinh có thể có độ dai tư 1 tơi 31 ký tư, nó không bao gôm ký ̃ ̀ ̀ ̀ tư khoang trông và không đươc băt đâu băng môt sô. Có thể dung cac ký tư đăc biêt ̉ ́ ́ ̀ ̀ ̣ ́ ̀ ́ ̣ ̣ trong phân nay, dâu ‘.’ chỉ đươc đăt ơ vị trí đâu tiên cua nhan. Môt nhan sẽ kêt thuc ̀ ̀ ́ ̣ ̀ ̉ ̃ ̣ ̃ ́ ́ băng dâu ‘:’, cac nhan và tên thông thương đươc đăt sao cho dễ nhơ khi viêt và kiêm ̀ ́ ́ ̃ ̣ ́ ̉ tra chương trinh. ̀ • Phân mã lênh. ̀ ̣ Thông thương phân mã lênh trong bât cư dong lênh nao cung có chưa cac lênh gơi ̀ ̣ ́ ̀ ̣ ̀ ̃ ́ ̣ nhơ hoăc cac lênh giả hơp ngư. Cac lênh gơi nhơ sẽ đươc trinh hơp dich chuyên thanh ̣ ́ ̣ ́ ̣ ̀ ̣ ̉ ̀ mã may nhị phân. Cac lênh giả chỉ có tac dung hương dân cho cac trinh hơp dich mà ́ ́ ̣ ́ ̣ ̃ ́ ̀ ̣ không đươc dich ra mã may trong chương trinh. ̣ ́ ̀ • Phân toan hang. ̀ ́ ̣ Đôi vơi cac mã lênh gơi nhơ, phân nay chưa cac toan hang cua lênh như đã mô tả ́ ́ ̣ ̀ ̀ ́ ́ ̣ ̉ ̣ trong cac cach đinh vị đia chi. Tuỳ theo tưng lênh mà phân toan hang có thể bao gôm 0, ́ ́ ̣ ̣ ̉ ̣ ̀ ́ ̣ ̀ 1 hoăc 2 toan hang. Thông thương khi không có phân toan hang, thì toan hang thao tac ̣ ́ ̣ ̀ ́ ̣ ́ ̣ ́ trong lênh sẽ đươc hiêu ngâm, nêu chỉ có môt toan hang nó sẽ đươc goi là toan hang ̣ ̉ ̀ ́ ̣ ́ ̣ ̣ ́ ̣ đich, nêu có hai toan hang sẽ có môt toan hang nguôn và môt toan hang đich. ́ ́ ́ ̣ ̣ ́ ̣ ̀ ̣ ́ ̣ ́ Đôi vơi cac lênh giả phân nay sẽ chưa cac thông tin liên quan đên lênh giả đo. ́ ́ ̣ ̀ ̀ ́ ́ ̣ ́ • Phân chú giai. ̀ ̉ Phân nay đươc tinh băt đâu tư sau dâu ‘;’ trên môt dong lênh (có thể không có cac phân ̀ ̀ ́ ́ ̀ ́ ̣ ̀ ̣ ́ ̀ khac). Nó cho phep ghi vao cac lơi giai thich về dong lênh hoăc về hoat đông cua ́ ́ ̀ ́ ̉ ́ ̀ ̣ ̣ ̣ ̣ ̉ chương trinh, nó giup ich cho ngươi lâp trinh dễ nhơ hơn khi đang viêt chương trinh, ̀ ́ ́ ̣ ̀ ́ ̀ hoăc khi đoc lai chương trinh. Khi hơp dich cac lơi giai thich nay sẽ không đươc dich ̣ ̣ ̣ ̀ ̣ ́ ̉ ́ ̀ ̣ ra mã lênh, có nghia là nó không có giá trị gì trong chương trinh mã may. ̣ ̃ ̀ ́ 4.2.2. Dư liêu cho chương trinh. ̣ ̀ Dư liêu trong môt chương trinh hơp ngư rât đa dang. Cac dư liêu có thể đươc cho ̣ ̣ ̀ ́ ̣ ́ ̣ dươi dang hệ nhị phân, thâp phân, bat phân hoăc thâp luc phân. Khi số cho ơ hệ nao cân ̣ ̣ ́ ̣ ̣ ̣ ̀ ̀ phai có ký tư chỉ thị cho hệ đó ơ phia sau: hệ nhị phân là chư B (Binary), hệ bat phân là ̉ ́ ́ chư O (Octal), hệ 16 là chư H (Hexadecimal), riêng hệ thâp phân có thể không cân viêt ̣ ̀ ́ ký tư phia sau. Chú ý trong hệ 16, khi cac dư liêu đươc băt đâu băng cac ký tư chư, để ́ ́ ̣ ́ ̀ ̀ ́ phân biêt vơi cac tên hoăc nhan cân phai viêt thêm môt số 0 lên phia trươc. ̣ ́ ̣ ̃ ̀ ̉ ́ ̣ ́ Nêu dư liêu là môt chuôi ký tư thì chung phai đươc để trong dâu nhay, chương trinh sẽ ́ ̣ ̣ ̃ ́ ̉ ́ ́ ̀ dich ra mã ASCII tương ưng cua no. 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 khai bao trong môt chương trinh hơp ngư cung có cac chưc năng giông ́ ̀ ́ ́ ̣ ̀ ̃ ́ ́ như trong môt chương trinh ngôn ngư câp cao. Môt biên cân phai đươc đinh kiêu băng ̣ ̀ ́ ̣ ́ ̀ ̉ ̣ ̉ ̀ cac lênh giả như: ́ ̣ 72
  3. DB (define byte) : đinh nghia biên kiêu byte ̣ ̃ ́ ̉ DW (define word): đinh nghia biên kiêu tư (hai byte) ̣ ̃ ́ ̉ DD (define double word): đinh nghia biên tư kep (4 byte) ̣ ̃ ́ ́ DT (define ten byte): đinh nghia biên 10 byte. ̣ ̃ ́ Cac biên có thể gan giá trị khơi đông hoăc không. ́ ́ ́ ̣ ̣ Ví dụ dong lênh: ̀ ̣ X1 DB 4 khai bao môt biên byte có tên là X1 và giá trị khơi đông ́ ̣ ́ ̣ là 4. Nêu dâu ? thay vao vị trí cua số 4 thì biên X1 sẽ đươc danh chỗ trong bộ nhơ, ́ ́ ̀ ̉ ́ ̀ nhưng khi chương trinh băt đâu hoat đông nó sẽ có giá trị bât kỳ do không đươc gan ̀ ́ ̀ ̣ ̣ ́ ́ giá trị khơi đông. Khai bao hoan toan tương tư cho cac biên kiêu khac. ̣ ́ ̀ ̀ ́ ́ ̉ ́ • Biên mang. ́ ̉ Biên mang hinh thanh tư môt day liên tiêp cac phân tư cung kiêu (byte, tư …), số ô ́ ̉ ̀ ̀ ̣ ̃ ́ ́ ̀ ̀ ̉ nhơ sẽ đươc danh ra tương ưng vơi số phân tư cua day. ̀ ̀ ̉ ̃ Ví dụ dong lênh: ̀ ̣ A1 DB 3,5,6,7,8 Khai bao môt biên mang có tên là A1 có giá trị khơi đông là 3,5,6,7,8. Phân tư đâu ́ ̣ ́ ̉ ̣ ̀ ̀ trong mang là 3 có đia chỉ trung vơi A1, phân tư thư hai sẽ có đia chỉ kế tiêp … ̉ ̣ ̀ ̀ ̣ ́ Khi muôn khơi đông cac phân tư cua mang vơi cung môt giá trị có thể sư dung toan tư ́ ̣ ́ ̀ ̉ ̉ ̀ ̣ ̣ ́ DUP trong lênh. ̣ Ví dụ dong lênh ̀ ̣ A2 DB 100 DUP (0) sẽ khai bao biên mang có môt trăm ́ ́ ̉ ̣ phâ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ư ̀ ̀ ̣ ̀ ̀ ́ ̣ ̀ cua mang sẽ không đươc gan trươc giá trị khơi đông. ̉ ̉ ́ ̣ Cung có thể khai bao môt biên mang theo kiêu hôn hơp bao gôm nhiêu toan tư DUP. ̃ ́ ̣ ́ ̉ ̉ ̃ ̀ ̀ ́ Ví dụ dong lênh: ̀ ̣ M DB 1,2, 2 DUP (8), 3 DUP (4), 9 sẽ hoan toan tương đương vơi dong lênh: M DB 1,2,8,8,4,4,4,9 ̀ ̀ ̀ ̣ Chú ý trong môt số vi xư lý (như cua Intel), nêu có môt tư trong bộ nhơ thì byte thâp ̣ ̉ ́ ̣ ́ sẽ năm ơ đia chỉ thâp, byte cao năm ơ đia chỉ cao, con ơ môt số vi xư lý khac ̀ ̣ ́ ̀ ̣ ̀ ̣ ́ (Motorola) lai có cach cât dư liêu theo thư tư ngươc lai. ̣ ́ ́ ̣ ̣ • Biên kiêu xâu ký tư. ́ ̉ Biên kiêu xâu ký tư là trương hơp đăc biêt cua biên mang, trong đó cac phân tư cua ́ ̉ ̣ ̣ ̉ ́ ̉ ́ ̀ ̉ mang là cac ký tư. Môt xâu ký tư có thể đinh nghia băng cac ký tư hoăc băng mã ASCII ̉ ́ ̣ ̣ ̃ ̀ ́ ̣ ̀ tương ưng cua chung. Cac dong lênh sau cung đinh nghia môt xâu ký tư nhưng gan cho ̉ ́ ́ ̀ ̣ ̀ ̣ ̃ ̣ ́ ́ ́ chung cac tên khai bao cho chung khac nhau: ́ ́ ́ STR1 DB 'string' STR2 DB 73h, 74h, 72h, 69h, 6Eh, 67h STR3 DB 73h, 74h, 'r', 'i', 'n', 67h • Hăng có tên. ̀ Cac hăng số trong cac chương trinh hơp ngư cung thương đươc gan tên để dễ nhơ và ́ ̀ ́ ̀ ́ dễ đoc hơn. Hăng có thể là kiêu số hoăc kiêu ký tư. Viêc gan tên cho hăng đươc thưc ̣ ̀ ̉ ̣ ̉ ̣ ́ ̀ hiên băng lênh EQU (equate) như sau: ̣ ̀ ̣ CR EQU 0Dh ; CR là ký tư về đâu hang (Carriage return) ̀ ̀ LF EQU 0Ah ; LF là ký tư xuông hang (Line Feed) ́ ̀ Hăng cung có thể là môt chuôi ký tư, ví dụ có thể tên cho môt chuôi ký tư sau đó sư ̀ ̃ ̣ ̃ ̣ ̃ dung để đinh nghia cho môt biên mang khac. ̣ ̣ ̃ ̣ ́ ̉ ́ Chao EQU 'Hello' MSG DB CHAO, '$' 73
  4. Do EQU là môt lênh giả không danh chỗ cua bộ nhơ cho tên hăng nên có thể đăt dong ̣ ̣ ̀ ̉ ̀ ̣ ̀ lênh khai bao nay ơ bât kỳ vị trí nao trong chương trinh. Tuy nhiên trong thưc tế ngươi ̣ ́ ̀ ́ ̀ ̀ ta thương đăt chung trong phân khai bao dư liêu. ̣ ́ ̀ ́ ̣ 4.3. LÂP TRINH VÀ CHO CHAY MÔT CHƯƠNG TRINH HƠP NGƯ. ̣ ̀ ̣ ̣ ̀ 4.3.1. Khung cua môt chương trinh hơp ngư. ̉ ̣ ̀ Môt chương trinh hơp ngư chay trên cac hệ thông vi xư lý họ Intel bao gôm cac đoan ̣ ̀ ̣ ́ ́ ̀ ́ ̣ vung nhơ khac nhau để chưa mã lênh, dư liêu và ngăn xêp. Cac đoan nay sẽ đươc khai ̀ ́ ̣ ̣ ́ ́ ̣ ̀ bao băng cac lênh giả hơp ngư theo đung cú phap cua trinh biên dich tao thanh khung ́ ̀ ́ ̣ ́ ́ ̉ ̀ ̣ ̣ ̀ cua chương trinh. Sau đây chung ta sẽ xem xet cac tư khoá tôi thiêu trong môt chương ̉ ̀ ́ ́ ́ ́ ̉ ̣ trinh hơp ngư vơi cac trinh hơp dich MASM và TASM. ̀ ́ ̀ ̣ • Khai bao qui mô sư dung bộ nhơ. ́ ̣ Dung lương bộ nhơ danh cho đoan mã lênh và đoan dư liêu đươc xac đinh nhơ lênh ̀ ̣ ̣ ̣ ̣ ́ ̣ ̣ giả '.MODEL', lênh nay phai luôn đăt trươc tât cả cac lênh khac trong chương trinh. ̣ ̀ ̉ ̣ ́ ́ ̣ ́ ̀ Cú phap lênh: .MODEL ́ ̣ Kiêu kich thươc bộ nhơ ̉ ́ Có nhiêu kiêu kich thươc bộ nhơ cho cac chương trinh vơi đoi hoi dung lương bộ nhơ ̀ ̉ ́ ́ ̀ ̀ ̉ khac nhau. Vơi ngươi mơi lâp trinh thông thương cac đoan mã lênh và dư liêu đêu ́ ̣ ̀ ́ ̣ ̣ ̣ ̀ không vươt quá 64KB nên chon kiêu nhỏ (Small) hoăc kiêu hep (Tiny). Ngoai ra con có ̣ ̉ ̣ ̉ ̣ ̀ ̀ cac kiêu kich thươc bộ nhơ khac như liêt kê trong bang sau: ́ ̉ ́ ́ ̣ ̉ Kiêu kich thươc ̉ ́ Mô tả bộ nhơ ̣ Tiny (hep) Mã lênh và dư liêu trong cung môt đoan 64 KB ̣ ̣ ̀ ̣ ̣ Small (nho)̉ Mã lênh năm trong môt đoan, dư liêu năm trong môt đoan ̣ ̀ ̣ ̣ ̣ ̀ ̣ ̣ Medium (trung Mã lênh không năm trong môt đoan, dư liêu năm trong môt ̣ ̀ ̣ ̣ ̣ ̀ ̣ ̀ binh) đoan. ̣ Compact (gon)̣ Mã lênh năm trong môt đoan, dư liêu không năm trong môt ̣ ̀ ̣ ̣ ̣ ̀ ̣ đoan. ̣ Large (lơn) Mã lênh không năm trong môt đoan, dư liêu không năm trong ̣ ̀ ̣ ̣ ̣ ̀ môt đoan, cac mang không lơn hơn 64KB. ̣ ̣ ́ ̉ Huge (đồ sô) ̣ Mã lênh không năm trong môt đoan, dư liêu không năm trong ̣ ̀ ̣ ̣ ̣ ̀ môt đoan, cac mang có thể lơn hơn 64KB. ̣ ̣ ́ ̉ • Khai bao ngăn xêp. ́ ́ Khai bao ngăn xêp để danh ra môt vung nhơ đủ lơn cho ngăn xêp. Viêc khai bao ngăn ́ ́ ̀ ̣ ̀ ́ ̣ ́ xêp đươc thưc hiên băng lênh giả sau: ́ ̣ ̀ ̣ .Stack Kich thươc ́ Kich thươc sẽ xac đinh số byte danh cho ngăn xêp, nêu không có khai bao kich thươc ́ ́ ̣ ̀ ́ ́ ́ ́ chương trinh dich sẽ tư đông gan cho ngăn xêp kich thươc 1KB, đây là môt kich thươc ̀ ̣ ̣ ́ ́ ́ ̣ ́ quá lơn đôi vơi cac ưng dung thông thương. Cac chương trinh thông thương có thể ́ ́ ̣ ́ ̀ khai bao ngăn xêp tư 100 tơi 256 byte. Chú ý vơi cac chương trinh khai bao kiêu bộ ́ ́ ́ ̀ ́ ̉ nhơ hep (.Model Tiny) sẽ không có khai bao ngăn xêp. ̣ ́ ́ • Khai bao dư liêu. ́ ̣ Đoan dư liêu sẽ chưa toan bộ cac khai bao về biên cho chương trinh, cac hăng cung có ̣ ̣ ̀ ́ ́ ́ ̀ ́ ̀ ̃ thể đươc khai bao trong phân nay. Viêc khai bao dư liêu đươc thưc hiên băng lênh ́ ̀ ̀ ̣ ́ ̣ ̣ ̀ ̣ giả .DATA. Cac chương trinh vơi kiêu Tiny cung không có khai bao nay. ́ ̀ ̉ ̃ ́ ̀ • Khai bao đoan ma. ́ ̣ ̃ 74
  5. Đoan mã là nơi chưa cac lênh gơi nhơ cua chương trinh. Viêc khai bao đoan mã đươc ̣ ́ ̣ ̉ ̀ ̣ ́ ̣ thưc hiên băng lênh giả .CODE. Chương trinh sẽ thưc hiên lênh đâu tiên năm sau ̣ ̀ ̣ ̀ ̣ ̣ ̀ ̀ lênh .CODE sau đó là cac lênh kế tiêp tuy theo câu truc điêu khiên cua no. Cac chương ̣ ́ ̣ ́ ̀ ́ ́ ̀ ̉ ̉ ́ ́ trinh con cung đươc viêt trong đoan nay, nhưng chú ý răng chung chỉ đươc chuyên tơi ̀ ̃ ́ ̣ ̀ ̀ ́ ̉ ̀ ́ ̣ băng cac lênh goi (CALL). ̣ • Khung cua chương trinh hơp ngư để dich ra dang .EXE. ̉ ̀ ̣ ̣ Tư cac khai bao cua chương trinh đã trinh bay ơ trên có thể xây dưng môt khung tông ́ ́ ̉ ̀ ̀ ̀ ̣ ̉ quat cho cac chương trinh hơp ngư vơi kiêu kich thươc bộ nhơ nho, cac chương trinh ́ ́ ̀ ̉ ́ ̉ ́ ̀ loai nay sau khi hơp dich sẽ tao ra môt tâp tin có thể thưc hiên đươc (executable) vơi ̣ ̀ ̣ ̣ ̣ ̣ ̣ đuôi .EXE. Khung cac chương trinh loai nay biêu diên như sau: ́ ̀ ̣ ̀ ̉ ̃ . Model Small .Stack 100 . Data ; Cac đinh nghia cho biên và hăng để tai phân nay ́ ̣ ̃ ́ ̀ ̣ ̀ ̀ .Code Main Proc MOV AX,@Data ; khơi tao DS ̣ ́ ̀ ̉ ́ MOV DS, AX ; nêu cân phai viêt thêm lênh MOV ES,AX ̣ ; cac lênh cua chương trinh chinh. ́ ̣ ̉ ̀ ́ MOV AH,4CH INT 21H ; Trơ về DOS Main Endp ; cac chương trinh con để tai phân nay. ́ ̀ ̣ ̀ ̀ End Main ; kêt thuc toan bộ chương trinh ́ ́ ̀ ̀ Khi môt chương trinh .EXE đươc nap vao bộ nhơ để thưc hiên, DOS sẽ tao ra môt ̣ ̀ ̣ ̀ ̣ ̣ ̣ mang 256 byte goi là đoan mao đâu chương trinh (Program Segment Prefix- PSP) dung ̉ ̣ ̣ ̀ ̀ ̀ ̀ để chưa cac thông tin liên quan đên chương trinh và đăt nó ngay phia trươc vung nhơ ́ ́ ̀ ̣ ́ ̀ chưa cac mã cua chương trinh. DOS cung cung câp cac thông số liên quan đên cac ́ ̉ ̀ ̃ ́ ́ ́ ́ thanh ghi đoan DS và ES. Do đó DS và ES không chưa giá trị đia chỉ cua đoan dư liêu ̣ ̣ ̉ ̣ ̣ cua chương trinh, vì thế phai có cac lênh khơi đông cho chung. ̉ ̀ ̉ ́ ̣ ̣ ́ • Khung chương trinh hơp ngư dich ra dang .COM. ̀ ̣ ̣ Trong chương trinh .EXE có đây đủ cac đoan, vơi chương trinh .COM cac đoan ngăn ̀ ̀ ́ ̣ ̀ ́ ̣ xêp, dư liêu và mã lênh sẽ đươc gôp chung. Như vây cac chương trinh .COM sẽ ngăn ́ ̣ ̣ ̣ ̣ ́ ̀ ́ gon và đơn gian 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 trinh trên đia. Sau đây là khung môt chương trinh hơp ngư ̀ ̃ ̣ ̀ ̣ ̣ dich ra dang .COM: .Model Tiny .Code Org 100H Start: Jmp Begin ; Cac đinh nghia cho biên hăng và cac chương trinh con để tai đây ́ ̣ ̃ ́ ̀ ́ ̀ ̣ Begin: Main Proc 75
  6. ; Cac lênh cua chương trinh chinh để tai đây ́ ̣ ̉ ̀ ́ ̣ INT 20H ; trơ về DOS Main Endp ; Cac chương trinh con có thể để tai phân nay ́ ̀ ̣ ̀ ̀ End Start Môt chương trinh .COM cung đươc nap vao bộ nhơ sau vung PSP như chương ̣ ̀ ̃ ̣ ̀ ̀ trinh .EXE. Ngăn xêp cua chương trinh .COM sẽ đăt tai cuôi đoan 64K danh cho no, ̀ ́ ̉ ̀ ̣ ̣ ́ ̣ ̀ ́ tưc là đinh ngăn xêp khi chương trinh băt đâu thưc hiên sẽ là FFFEH. ̉ ́ ̀ ́ ̀ ̣ Chương trinh .COM sẽ bị cac han chế gây ra bơi dung lương cưc đai danh cho toan bộ ̀ ́ ̣ ̣ ̀ ̀ chương trinh goi gon trong đoan 64KB, nên chung chỉ sư dung cho cac ưng dung ̀ ́ ̣ ̣ ́ ̣ ́ ̣ không lơn lăm. Măt khac chương trinh cung chỉ đươc sư dung môt ngăn xêp có dung ́ ̣ ́ ̀ ̃ ̣ ̣ ́ lương han chê, nêu có quá nhiêu dư liêu đươc nap vao ngăn xêp sẽ lam mât cac mã ̣ ́ ́ ̀ ̣ ̣ ̀ ́ ̀ ́ ́ lênh cua chương trinh. ̣ ̉ ̀ • Cach tao và thưc hiên môt chương trinh hơp ngư trên may vi tinh. ́ ̣ ̣ ̣ ̀ ́ ́ May vi tinh IBM PC là tao và thưc hiên cac chương trinh hơp ngư cho họ Intel. Cac ́ ́ ̣ ̣ ́ ̀ ́ bươc để thưc hiên công viêc nay như sau: ̣ ̣ ̀ - Dung cac phân mêm soan thao văn ban (SK, NC…) để soan thao cac chương trinh ̀ ́ ̀ ̀ ̣ ̉ ̉ ̣ ̉ ́ ̀ nguôn đươc măc đinh có đuôi .ASM. ̀ ̣ ̣ - Dung cac chương trinh hơp dich MASM hoăc TASM để dich tâp tin nguôn .ASM ̀ ́ ̀ ̣ ̣ ̣ ̣ ̀ ra dang mã may có đuôi .OBJ. Cac dong 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 - Dich và liên kêt cac tâp tin .OBJ thanh tâp tin có thể chay đươc: ̣ ́ ́ ̣ ̀ ̣ ̣ Vơi MASM dung LINK để liên kêt cac tâp tin .OBJ tao ra chương trinh .EXE, nêu ̀ ́ ́ ̣ ̣ ̀ ́ chương trinh nguôn viêt dươi dang dich ra .EXE thì tâp tin nay có thể thưc hiên đươc. ̀ ̀ ́ ̣ ̣ ̣ ̀ ̣ Nêu viêt dươi dang .COM thì cân phai sư dung EXE2BIN để dich ra tâp tin .COM mơi ́ ́ ̣ ̀ ̉ ̣ ̣ ̣ có thể chay đươc. ̣ Vơi TASM dung TLINK để liên kêt và tao ra tâp tin chay .EXE, nêu viêt dươi ̀ ́ ̣ ̣ ̣ ́ ́ dang .COM phai dung dong lênh TLINK/t để tao ra tâp tin .COM. ̣ ̉ ̀ ̀ ̣ ̣ ̣ 4.4. Cac câu truc lâp trinh cơ ban. ́ ́ ́ ̣ ̀ ̉ Cac lênh cua môt ngôn ngư, nhât là cac lênh hơp ngư thương chỉ thưc hiên cac tac vụ ́ ̣ ̉ ̣ ́ ́ ̣ ̣ ́ ́ cơ ban. Vì vây để viêt môt chương trinh ngươi ta thương chia nó ra thanh cac khôi ̉ ̣ ́ ̣ ̀ ̀ ́ ́ chưc năng nhỏ hơn, cac khôi chưc năng nhỏ nay lai chia thanh cac khôi chưc năng nhỏ ́ ́ ̀ ̣ ̀ ́ ́ hơn nưa. Viêc phân chia nay đươc thưc hiên cho tơi khi môi khôi chưc năng trơ nên ̣ ̀ ̣ ̃ ́ đơn gian và dễ dang thưc hiên băng cac lênh. ̉ ̀ ̣ ̀ ́ ̣ Cac khôi chưc năng thanh phân thương đươc thưc hiên băng cac câu truc lâp trinh cơ ́ ́ ̀ ̀ ̣ ̀ ́ ́ ́ ̣ ̀ ban. Phương phap chia chương trinh thanh cac khôi chưc năng thanh phân như trên ̉ ́ ̀ ̀ ́ ́ ̀ ̀ lam cho chương trinh trơ nên có câu truc, dễ dang trong viêc hiêu chinh, cai tiên và lâp ̀ ̀ ́ ́ ̀ ̣ ̣ ̉ ̉ ́ ̣ tai liêu lưu trư cho nhiêu ngươi sư dung. Có ba câu truc lâp trinh cơ ban thương đươc ̀ ̣ ̀ ̣ ́ ́ ̣ ̀ ̉ sư dung khi giai quyêt cac công viêc khac nhau là : ̣ ̉ ́ ́ ̣ ́ + Câu truc tuân tư. ́ ́ ̀ + Câu truc lưa chon. ́ ́ ̣ + Câu truc lăp. ́ ́ ̣ Đăc điêm chung cua tât cả cac câu truc lâp trinh cơ ban là tinh câu truc: tưc là chỉ có ̣ ̉ ̉ ́ ́ ́ ́ ̣ ̀ ̉ ́ ́ ́ môt lôi vao và môt lôi ra cho câu truc đo. Cac câu truc nay thương đươc chuân hoá ơ ̣ ́ ̀ ̣ ́ ́ ́ ́ ́ ́ ́ ̀ ̉ cac ngôn ngư câp cao, trong phân nay sẽ mô tả viêc thưc hiên chung trong hơp ngư. ́ ́ ̀ ̀ ̣ ̣ ́ 76
  7. 4.4.1. Câu truc tuân tư. ́ ́ ̀ Câu truc tuân tư là câu truc thông dung và đơn gian nhât. Trong câu truc nay cac lênh ́ ́ ̀ ́ ́ ̣ ̉ ́ ́ ́ ̀ ́ ̣ đươc thưc hiên môt cach tuân tư, lênh nọ kế tiêp lênh kia. Sau khi thưc hiên xong lênh ̣ ̣ ́ ̀ ̣ ́ ̣ ̣ ̣ cuôi cung thì công viêc phai đươc hoan tât. ́ ̀ ̣ ̉ ̀ ́ Ví dụ đoan chương trinh tinh giá trị cua biêu thưc b 2 – 4ac vơi a, b, c là cac biên 8 bit ̣ ̀ ́ ̉ ̉ ́ ́ năm trong cac thanh ghi BH, BL, CH có thể thưc hiên như sau: ̀ ́ ̣ MOV AL,BL MUL BL ; AL=AL*BL vơi giả thiêt kêt quả là 8 bit́ ́ MOV CL,AL MOV AL,4 MUL BH MUL CL ; AL=4ac vơi giả thiêt kêt quả là 8 bit ́ ́ SUB CH,AL 4.4.2. Câu truc lưa chon. ́ ́ ̣ • Câu truc IF – THEN. ́ ́ Ngư phap: ́ ̀ IF Điêu kiên THEN Công viêc. ̣ ̣ Trong câu truc nay nêu điêu kiên thoả công viêc sẽ đươc thưc hiên, nêu không công ́ ́ ̀ ́ ̀ ̣ ̣ ̣ ́ viêc sẽ bị bỏ qua. Trong hơp ngư câu truc nay có thể thưc hiên băng cac lênh nhay có ̣ ́ ́ ̀ ̣ ̀ ́ ̣ ̉ ̀ ̣ ̉ ̣ ̉ điêu kiên. Giai thuât cua câu truc biêu diên trên hinh 4.1. ́ ́ ̉ ̃ ̀ Ví dụ : Viêt đoan chương trinh xoá AH về 0 khi giá trị cua nó lơn hơn 03 ́ ̣ ̀ ̉ CMP AH,03 JNA THOAT MOV AH,0 THOAT: Sai ̀ ̣ Điêu kiên ́ Đung ̣ Công viêc ̀ ̉ ̣ ́ ́ Hinh 4.1. Giai thuât câu truc IF – THEN. • Câu truc IF – THEN – ELSE. ́ ́ Ngư phap: IF Điêu kiên THEN Công viêc1 ELSE Công viêc 2. ́ ̀ ̣ ̣ ̣ Giai thuât cua câu truc trinh bay trên hinh 4.2. trong câu truc nay nêu thoa điêu kiên thì ̉ ̣ ̉ ́ ́ ̀ ̀ ̀ ́ ́ ̀ ́ ̉ ̀ ̣ 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ơp ngư ̣ ̣ ́ ̣ ̣ điêu nay tương đương vơi viêc sư dung cac lênh nhay có điêu kiên và không điêu kiên ̀ ̀ ̣ ̣ ́ ̣ ̉ ̀ ̣ ̀ ̣ ́ ́ ̃ ́ đên cac nhan khac nhau. 77
  8. Ví dụ : Tim số nhỏ hơn trong hai số chưa trong AH và BH gan cho AL. ̀ ́ CMP AH,BH ;AH
  9. Biêu thức ̉ ̣ Công viêc 1 ̣ Công viêc 2 …… ̣ Công viêc N ̀ ̉ ̣ ́ ́ Hinh 4.3: Giai thuât câu truc CASE. ́ ́ ̣ 4.4.3. Câu truc lăp. • Câu truc FOR – DO. ́ ́ Khởi đông bộ đêm ̣ ́ ̣ Công viêc Giam bộ đêm ̉ ́ Sai ̀ ̣ Điêu kiên ́ Đung ̀ ̉ ̣ ́ ́ Hinh 4.4. Giai thuât câu truc WHILE – DO. Ngư phap: FOR Số lân lăp DO Công viêc. ́ ̀ ̣ ̣ Giai thuât cua câu truc trinh bay trên hinh 4.4. Trong câu truc nay công viêc sẽ đươc ̉ ̣ ̉ ́ ́ ̀ ̀ ̀ ́ ́ ̀ ̣ thưc hiên nhiêu lân (băng số lân lăp đươc khai bao). Trong hơp ngư công viêc nay có ̣ ̀ ̀ ̀ ̀ ̣ ́ ̣ ̀ thể dung lênh LOOP, hoăc căp lênh giam (DEC) và nhay khi chưa băng 0. ̀ ̣ ̣ ̣ ̣ ̉ ̉ ̀ Ví dụ : viêt chương trinh tinh tông cac 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ô. ̣ ́ ́ 79
  10. • Câu truc lăp WHILE – DO. ́ ́ ̣ Ngư phap: WHILE Điêu kiên DO Công viêc. ́ ̀ ̣ ̣ Giai thuât cua câu truc trinh bay trên hinh 4.5. Trươc hêt điêu kiên sẽ đươc kiêm tra, ̉ ̣ ̉ ́ ́ ̀ ̀ ̀ ́ ̀ ̣ ̉ công viêc sẽ đươc lăp lai khi điêu kiên con đung. Trong hơp ngư câu truc nay có thể ̣ ̣ ̣ ̀ ̣ ̀ ́ ́ ́ ̀ thưc hiên băng cach sư dung lênh CMP hoăc môt lênh nao đó để kiêm tra điêu kiên, sau ̣ ̀ ́ ̣ ̣ ̣ ̣ ̣ ̀ ̉ ̀ ̣ đó dung lênh nhay có điêu kiên để thoat khoi vong lăp. ̀ ̣ ̉ ̀ ̣ ́ ̉ ̀ ̣ Sai ̀ ̣ Điêu kiên ́ Đung ̣ Công viêc ̀ ̉ ̣ ́ ́ Hinh 4.5. Giai thuât câu truc WHILE - DO. Ví dụ :Đoc và hiên thị cac ký tư nhâp tư ban phim cho đên khi găp ESC thì dưng, đêm ̣ ̉ ́ ̣ ̀ ́ ́ ̣ ́ số ký tư đoc đươc.̣ XOR CX,CX ; Xoá số đêm ́ MOV AH,1 ; Ham đoc ký tư tư ban phim cua INT 21H có hiên ̀ ̣ ̀ ́ ̉ ̣ TIEP:INT 21H ; goi ngăt 21H AL chưa mã ký tư ̣ ́ CMP AL,27H ;Kiêm tra ký tư vưa hiên có phai là ESC không ̉ ̣ ̉ JE RA INC CX ; tăng số đêm ́ JMP TIEP RA: • Câu truc lăp REPEAT – UNTIL. ́ ́ ̣ Ngư phap: REPEAT công viêc UNTIL điêu kiên. ́ ̣ ̀ ̣ ̉ ̣ ̉ ́ ́ ̀ ̀ Giai thuât cua câu truc trinh bay trên hinh trên hinh 4.6. Trong câu truc nay công viêc ̀ ̀ ́ ́ ̀ ̣ đươc thưc hiên trươc it nhât môt lân, sau đó điêu kiên sẽ đươc kiêm tra. Nêu điêu kiên ̣ ́ ́ ̣ ̀ ̀ ̣ ̉ ́ ̀ ̣ thoả công viêc tiêp tuc đươc lăp lai. Trong hơp ngư điêu kiên thương đươc kiêm tra ̣ ́ ̣ ̣ ̣ ̀ ̣ ̉ băng lênh CMP, và công viêc sẽ đươc tiêp tuc băng môt lênh nhay có điêu kiên. ̀ ̣ ̣ ́ ̣ ̀ ̣ ̣ ̉ ̀ ̣ Ví dụ : Xac đinh 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à cung chinh là số đêm ́ ̃ ́ ́ CMP AX,1000 ; tông con nhỏ hơn 1000 thì công tiêp ̉ ̀ ̣ ́ JB TIEP RA: 80
  11. ̣ Công viêc ́ Đung ̀ ̣ Điêu kiên Sai ̀ ̉ ̣ ́ ́ Hinh 4.6. Giai thuât câu truc REPEAT – UNTIL. 4.5. Môt số chương trinh mâu tiêu biêu. ̣ ̀ ̃ ̉ Khi lâp trinh băng hơp ngư trên cac may vi tinh IBM PC, để đơn gian có thể sư dung ̣ ̀ ̀ ́ ́ ́ ̉ ̣ cac chương trinh điêu khiên thiêt bị săn có cua BIOS và DOS. It nhât trươc hêt cung ́ ̀ ̀ ̉ ́ ̃ ̉ ́ ́ ́ ̃ cân châp nhân cac thủ tuc có săn nay để sư dung đươc cac thiêt bị giao tiêp cơ ban vơi ̀ ́ ̣ ́ ̣ ̃ ̀ ̣ ́ ́ ́ ̉ may tinh như ban phim, man hinh trong bươc đâu lâp trinh. Con khi đã có đây đủ cac ́ ́ ̀ ́ ̀ ̀ ̀ ̣ ̀ ̀ ̀ ́ kiên thưc về hơp ngư, cung như về câu truc phân cưng may tinh chung ta hoan toan có ́ ̃ ́ ́ ̀ ́ ́ ́ ̀ ̀ thể thưc hiên cac chương trinh điêu khiên cac thiêt bị băng cac lênh gơi nhơ căn ban ̣ ́ ̀ ̀ ̉ ́ ́ ̀ ́ ̣ ̉ trong tâp lênh, hoăc viêt cac chương trinh điêu khiên thiêt bị cho cac hệ thông phân ̣ ̣ ̣ ́ ́ ̀ ̀ ̉ ́ ́ ́ ̀ cưng cua riêng minh. ̉ ̀ BIOS (Base Input Output System) là chương trinh trong bộ nhơ ROM, nó sẽ đươc ̀ thưc hiên trươc tiên ngay khi khơi đông may. BIOS sẽ kiêm tra cac thiêt bị cơ ban ̣ ̣ ́ ̉ ́ ́ ̉ trong hệ thông sau đó nó chuyên điêu khiên cho hệ điêu hanh. Hệ điêu hanh thông dung ́ ̉ ̀ ̉ ̀ ̀ ̀ ̀ ̣ khi may tinh mơi ra đơi là DOS (Disk Operation System). Trong DOS và BIOS có cac ́ ́ ́ chương trinh con viêt săn cho viêc điêu khiên cac thiêt bi. Để sư dung chung trong ̀ ́ ̃ ̣ ̀ ̉ ́ ́ ̣ ̣ ́ chương trinh hơp ngư chung ta dung lơi goi ngăt mêm (INT) kem theo số hiêu ngăt. ̀ ́ ̀ ̣ ́ ̀ ̀ ̣ ́ Cac số hiêu ngăt đươc qui đinh săn cho cac thiêt bi, môi ngăt sẽ có cac qui đinh khac ́ ̣ ́ ̣ ̃ ́ ́ ̣ ̃ ́ ́ ̣ ́ nhau về cac biên vao và ra khi thưc hiên. Sau đây là mô tả về môt số ngăt thương sư ́ ́ ̀ ̣ ̣ ́ dung trong chương trinh hơp ngư. ̣ ̀ - Ngăt 20H danh riêng để kêt thuc chương trinh loai .COM. Ham nay ra lênh cho hệ ́ ̀ ́ ́ ̀ ̣ ̀ ̀ ̣ điêu hanh kêt thuc chương trinh đang chay và chuyên điêu khiên về cho chương trinh ̀ ̀ ́ ́ ̀ ̣ ̉ ̀ ̉ ̀ goi. ̣ - Ngăt 21H: ́ Ham 01H: đoc môt ký tư tư ban phim ̀ ̣ ̣ ̀ ́ Môt ký tư sẽ đươc đoc vao tư ban phim và hiên lên man hinh. Nêu tai thơi điêm goi ̣ ̣ ̀ ̀ ́ ̣ ̀ ̀ ́ ̣ ̉ ̣ ham chưa có ký tư săn sang, thì ham sẽ đơi cho tơi khi có phim đươc nhân. ̀ ̃ ̀ ̀ ́ ́ Vao: AH = 01 ̀ Ra: AL chưa mã ASCII cua phim nhân ̉ ́ ́ Khi nhân đươc cac ký tư có mã mơ rông AL = 0. Luc nay có thể goi ham môt lân nưa ̣ ́ ̣ ́ ̀ ̣ ̀ ̣ ̀ để đoc đươc mã mơ rông. ̣ ̣ Khi ký tư vao là Ctrl – C (mã ASCII là 3) ngăt 23H sẽ đươc goi trả điêu khiên về DOS. ̀ ́ ̣ ̀ ̉ Ngoai AL, nôi dung cac thanh ghi khac không bị thay đôi sau khi goi ham. ̀ ̣ ́ ́ ̉ ̣ ̀ Ví dụ khi goi ham nay có thể viêt: ̣ ̀ ̀ ́ 81
  12. MOV AH,02 INT 21H Ham 02H: Hiên môt ký tư lên man hinh. ̀ ̣ ̣ ̀ ̀ Ham nay cho phep hiên môt ký tư lên man hinh ̀ ̀ ́ ̣ ̣ ̀ ̀ Vao: AH = 02 ̀ DL chưa mã ASCII cua ký tư cân hiên thi. ̉ ̀ ̉ ̣ Ra: không. Tât cả cac thanh ghi không bị thay đôi sau khi goi ham, cac mã đăc biêt như Backspace ́ ́ ̉ ̣ ̀ ́ ̣ ̣ (xoá ký tư trươc), Carriage Return (về đâu hang) và Line Feed (xuông hang) sẽ đươc ̀ ̀ ́ ̀ ghi trên man hinh dươi dang lênh. ̀ ̀ ̣ ̣ Ham 09: Hiên chuôi ký tư lên man hinh. ̀ ̣ ̃ ̀ ̀ Vao: AH = 09 ̀ DX chưa đia chỉ offset cua chuôi cân hiên thi. ̣ ̉ ̃ ̀ ̉ ̣ Ra:không Chuôi ký tư cân đăt trong bộ nhơ dươi dang môt chuôi cac byte ASCII, kêt thuc là ký ̃ ̀ ̣ ̣ ̣ ̃ ́ ́ ́ tư ‘$’ (mã ASCII là 36). Cac mã đăc biêt như Backspace (xoá ký tư trươc), Carriage ́ ̣ ̣ Return (về đâu hang) và Line Feed (xuông hang) sẽ đươc ghi trên man hinh dươi dang ̀ ̀ ́ ̀ ̀ ̀ ̣ lênh. Chỉ có AL bị thay đôi sau khi goi ham. ̣ ̉ ̣ ̀ Ham 4CH:kêt thuc chương trinh loai .EXE. ̀ ́ ́ ̀ ̣ Ham nay kêt thuc chương trinh và truyên về môt mã lôi, chương trinh goi có thể nhân ̀ ̀ ́ ́ ̀ ̀ ̣ ̃ ̀ ̣ ̣ đươc mã lôi nay băng cach goi ham 4DH, bộ nhơ RAM cho chương trinh chiêm sẽ ̃ ̀ ̀ ́ ̣ ̀ ̀ ́ đươc giai phong. ̉ ́ - Ngăt 10H cua BIOS và chế độ văn ban trên man hinh mau: ́ ̉ ̉ ̀ ̀ ̀ Man hinh mau có đia chỉ RAM là B800:0000. Trong chế độ văn ban 80 hang 25 côt ̀ ̀ ̀ ̣ ̉ ̀ ̣ môi ký tư sẽ đươc chưa băng hai byte trong bộ nhơ man hinh, byte đâu là mã ASCII ̃ ̀ ̀ ̀ ̀ cua ký tư và byte sau là thuôc tinh cua ký tư. Như vây đia chỉ mã ASCII cua môt ký tư ̉ ̣ ́ ̉ ̣ ̣ ̉ ̣ trên man hinh trong bộ nhơ sẽ là : ̀ ̀ Offset(hang, côt) = hang x160 + côt x 2. ̀ ̣ ̀ ̣ Ham 00: Đăt chế độ man hinh. ̀ ̣ ̀ ̀ Ham nay cho phep đăt lai chế độ man hinh. Toan bộ man hinh sẽ bị xoa, vì vây có thể ̀ ̀ ́ ̣ ̣ ̀ ̀ ̀ ̀ ̀ ́ ̣ dung ham nay để xoá toan bộ man hinh ngay cả khi không muôn thay đôi chế độ man ̀ ̀ ̀ ̀ ̀ ̀ ́ ̉ ̀ ̀ hinh. Vao: AH = 0 ̀ AL = chế độ man hinh: ̀ ̀ 0: chế độ 40x25 ký tư, đen trăng. ́ 1: chế độ 40x25 ký tư, mau. ̀ 2: chế độ 80x25 ký tư, đen trăng. ́ 3: chế độ 80x25 ký tư, mau. ̀ 4: chế độ 320x200 điêm đồ thi, 4 mau. ̉ ̣ ̀ 5: chế độ 320x200 điêm đồ thi, 2 mau. ̉ ̣ ̀ 6: chế độ 640x200 điêm đồ thi, 2 mau. ̉ ̣ ̀ 7: chế độ cua man hinh mono. ̉ ̀ ̀ 8: chế độ 160x200 điêm đồ thi, 16 mau. ̉ ̣ ̀ 9: chế độ 320x200 điêm đồ thi, 16 mau. ̉ ̣ ̀ 0A: chế độ 640x200 điêm đồ thi, 4 mau. ̉ ̣ ̀ 0B: chế độ 640x200 điêm đồ thi, 16 mau. ̉ ̣ ̀ 82
  13. 10H: chế độ 640x350 điêm đồ thi, 16 mau. ̉ ̣ ̀ 11H: chế độ 640x480 điêm đồ thi, 2 mau. ̉ ̣ ̀ 12H: chế độ 640x480 điêm đồ thi, 256 mau. ̉ ̣ ̀ Ra: không Nôi dung cac thanh ghi BX, CX, DX, SS, CS, DS không bị thay đôi sau khi goi ham. ̣ ́ ̉ ̣ ̀ Cac thanh ghi con lai có thể bị thay đôi. ́ ̀ ̣ ̉ Ham 02: Đăt vị trí con tro. ̀ ̣ ̉ Ham nay cho phep đăt con trỏ tơi môt vị trí nao đó trên man hinh, để sau đó cho phep ̀ ̀ ́ ̣ ̣ ̀ ̀ ̀ ́ đưa ra man hinh băng cac ham khac cua BIOS. ̀ ̀ ̀ ́ ̀ ́ ̉ ̀ Vao: AH = 02 BH = số trang man hinh (0 tơi 7) ̀ ̀ DH = Toạ độ dong. ̀ DL = Toạ độ côt. ̣ Ra: không Chú ý : - Con trỏ nhâp nhay trên man hinh chỉ bị thay đôi vị trí khi trang man hinh là trang ́ ́ ̀ ̀ ̉ ̀ ̀ ̣ hiên hanh. ̀ - Toạ độ dong nhân cac giá trị tư 0 tơi 24, côt tư 0 tơi 79. Có thể lam con trỏ biên ̀ ̣ ́ ̣ ̀ ́ mât băng cach đăt nó năm ngoai cac toạ độ nêu trên. ́ ̀ ́ ̣ ̀ ̀ ́ - Nôi dung cac thanh ghi BX, CX, DX, CS, DS và SS không bị thay đôi. ̣ ́ ̉ Ham 03: Đoc vị trí con tro. ̀ ̣ ̉ Ham nay cho phep đoc vị trí con trỏ trên môt trang man hinh và kich thươc nhâp nhay ̀ ̀ ́ ̣ ̣ ̀ ̀ ́ ́ ́ ̉ cua no. ́ ̀ Vao: AH = 03H BH = số trang man hinh. ̀ ̀ Ra: DH = toạ độ dong, DL = toạ độ côt. ̀ ̣ ̀ CH = dong băt đâu cua con tro, CL dong kêt thuc cua con tro. ́ ̀ ̉ ̉ ̀ ́ ́ ̉ ̉ ̀ Ham 05: Chon trang man hinh hiên hanh ̣ ̀ ̀ ̣ ̀ ̀ Vao : AH = 05 AL = số trang. Ra:không Khi trang đươc chon nó sẽ hiên lên trên man hinh, con trỏ sẽ lây toạ độ cua trang đo, ̣ ̣ ̀ ̀ ́ ̉ ́ luc nay có thể ghi vao trang đang đươc kich hoat. ́ ̀ ̀ ́ ̣ Ham 06: Cuôn cưa sổ lên. ̀ ́ Cho phep cuôn môt số dong văn ban cua cưa sô, hoăc xoá toan bộ cưa sô. ́ ́ ̣ ̀ ̉ ̉ ̉ ̣ ̀ ̉ Vao: AH = 06 ̀ AL = số dong muôn cuôn lên (0 là xoá cưa sô). ̀ ́ ́ ̉ CH = toạ độ dong goc cao bên trai. ̀ ́ ́ CL = toạ độ côt goc cao bên trai. ̣ ́ ́ DH= toạ độ dong goc dươi bên phai. ̀ ́ ̉ DL = toạ độ côt goc dươi bên phai. ̣ ́ ̉ BH = mau thuôc tinh cho cac dong bị xoa. ̀ ̣ ́ ́ ̀ ́ ́ Cac bit thuôc tinh cua BL bao gôm: ̣ ́ ̉ ̀ D7: nhâp nhay (1 cho phep chư nhâp nhay) ́ ́ ́ ́ ́ D6, D5, D4: mau nên. ̀ ̀ D3 – D0: mau chư ̀ 83
  14. Cac mau tương ưng vơi cac giá trị tư 0 tơi 0FH là : Đen, Xanh da trơi, Xanh luc, Xanh ́ ̀ ́ ̣ dương, Đo, Tim, Nâu, Xam nhat, Xam sâm, Xanh da trơi nhat, Luc nhat, Xanh dương ̉ ́ ́ ̣ ́ ̃ ̣ ̣ ̣ ̣ ̀ nhat, Hông, Tim nhat, Vang, Trăng. ́ ̣ ̀ ́ Ra: không. Chú ý : Ham nay chỉ lam viêc vơi trang man hinh hiên hanh. Khi AL = 0 cưa sổ sẽ ̀ ̀ ̀ ̣ ̀ ̀ ̣ ̀ đươc xoá và điên vao băng cac ký tư trăng (mã ASCII là 32). Nôi dung cac dong cuôn ̀ ̀ ̀ ́ ́ ̣ ́ ̀ ́ sẽ bị mât và không thể khôi phuc lai. ́ ̣ ̣ Ham 0A: ghi ký tư. ̀ Cho phep ghi ký tư vao vị trí hiên hanh cua con trỏ trong môt trang man hinh. ́ ̀ ̣ ̀ ̉ ̣ ̀ ̀ ̀ Vao : AH = 0AH BH = số trang man hinh. ̀ ̀ CX = số lân lăp lai cua ký tư. ̀ ̣ ̣ ̉ AL = mã ASCII cua ký tư. ̉ BL = thuôc tinh cua ký tư (chỉ có ý nghia mô tả ) ̣ ́ ̉ ̃ Ra: không Chú ý : Trong chế độ đồ thị nêu phai lăp lai ký tư nhiêu lân, thì trang man hinh sẽ là ́ ̉ ̣ ̣ ̀ ̀ ̀ ̀ hiên hanh. Cac mã điêu khiên sẽ đươc in ra như cac ký tư ASCII thương. ̣ ̀ ́ ̀ ̉ ́ Ham 13H: Ghi chuôi ký tư ra man hinh. ̀ ̃ ̀ ̀ ̀ Vao : AH = 13H AL = chế độ ghi. AL = 0: Thuôc tinh trong BL, không thay đôi vị trí con tro. ̣ ́ ̉ ̉ 1: Thuôc tinh trong BL, chuyên con trỏ tơi cuôi chuôi. ̣ ́ ̉ ́ ̃ 2: Thuôc tinh trong vung đêm, không thay đôi vị trí con tro. ̣ ́ ̀ ̣ ̉ ̉ 3: Thuôc tinh trong vung đêm, chuyên con trỏ tơi cuôi chuôi. ̣ ́ ̀ ̣ ̉ ́ ̃ BL = thuôc tinh cua cac ký tư.̣ ́ ̉ ́ CX = số ký tư cân ghi. ̀ DH = toạ độ dong băt đâu, DL = toạ độ côt băt đâu. ̀ ́ ̀ ̣ ́ ̀ BH = số trang man hinh. ̀ ̀ ES = đia chỉ đoan cua vung đêm; BP = đia chỉ offset cua vung đêm. ̣ ̣ ̉ ̀ ̣ ̣ ̉ ̀ ̣ Ra: không. Ví dụ 1: Viêt chương trinh hiên lên man hinh câu ‘Welcome to Assembler’. ́ ̀ ̣ ̀ ̀ Giai : ̉ Trong ví dụ nay để hiên môt chuôi lên man hinh có thể sư dung ham 09 ngăt 21H. ̀ ̣ ̣ ̃ ̀ ̀ ̣ ̀ ́ .Model Tiny .Code Start: Jmp begin CRLF db 13,10,’$’ St DB ‘Welcome to Assembler$’ Begin:Mov ah,09 Lea dx,CRLF Int 21h ;Về đâu hang mơi ̀ ̀ Mov ah,09 Lea dx,st Int 21h ; hiên thị st ̉ Mov ah,09 Lea dx,CRLF 84
  15. Int 21h ; xuông dong về đâu dong mơi ́ ̀ ̀ ̀ Int 20h End start Ví dụ 2: Viêt chương trinh nhâp vao tư ban phim môt ký tư thương, thông bao lôi cho ́ ̀ ̣ ̀ ̀ ́ ̣ ́ ̃ phep nhâp lai khi nhâp sai, và sau đó hiên thị ký tư hoa tương ưng vơi nó trên dong tiêp ́ ̣ ̣ ̣ ̉ ̀ ́ theo. Giai : ̉ Để đơn gian có thể chia chương trinh thanh nhiêu chưc năng nhỏ như sau: ̉ ̀ ̀ ̀ - Hiên thị thông bao nhâp ký tư thương. ̉ ́ ̣ - Chơ nhâp ký tư và kiêm tra, nêu sai hiên thị thông bao nhâp lai. ̣ ̉ ́ ̉ ́ ̣ ̣ - Đôi thanh ký tư hoa tương ưng, hiên thị thông bao cung ký tư hoa trên dong tiêp ̉ ̀ ̉ ́ ̀ ̀ ́ theo. .Model Small .Stack 100h .Data CR equ 0dh LF equ 0ah Tb1 db CR, LF, ‘Nhap vao mot ky tu thuong : $’ Tb2 db CR, LF, ‘Nhap sai – nhap lai: $’ Tb3 db CR, LF, ‘Ký tư hoa tương ưng vơi nó là :’ Char db ?,’$’ .Code Main proc ;khơi tao ds ̣ Mov ax,@data Mov ds,ax ;hiên thông bao nhâp ký tư ̣ ́ ̣ Mov ah,09 Lea dx,tb1 Int 21h ; nhâp ký tư tư ban phim ̣ ̀ ́ NHAP:Mov ah,01 Int 21h ;kiêm tra có phai là môt ký tư thương hay không ̉ ̉ ̣ Cmp al,61h Jb SAI Cmp al,7ah Jbe DUNG SAI: Mov ah,09 Lea dx,tb2 Int 21h Jmp NHAP ;Đôi thanh ký tư hoa hiên thị lên man hinh ̉ ̀ ̉ ̀ ̀ DUNG:Sub al,20h Mov char,al Mov ah,09 85
  16. Lea dx,tb3 Int 21h ; trơ về DOS mov ax,4c00h int 21h Main endp End main Ví dụ 3: Viêt chương trinh nhâp vao tư ban phim hai số hex có môt chư số sau đó tinh ́ ̀ ̣ ̀ ̀ ́ ̣ ́ tông cua chung và hiên thị lên man hinh. Yêu câu chương trinh thưc hiên như sau: ̉ ̉ ́ ̉ ̀ ̀ ̀ ̀ ̣ Nhap so thu nhat:ST1 Nhap so thu hai: ST2 Tong cua ST1 va ST2 la:TONG ̉ Giai : .Model Tiny .Code Start: Jmp Begin Tb1 db 0ah,0dh,’Nhap so thu nhat: $’ Tb2 db 0ah,0dh, ‘Nhap so thu hai : $’ Tb3 db 0ah, 0dh, ‘Tong cua hai so ? va ? la: $’ ST1 DB ? ST2 DB ? Tong DB ??’$’ Nhap: mov ah,09 Int 21h Mov ah,01 Int 21h Ret AS_HEX: Cmp al,39h Ja @ Sub al,30h ;nêu là cac số tư 0 tơi 9 thì trư đi 30H ́ ́ Jmp @@@ @: Cmp al,61h Jae @@ ;nêu là chư thương trư đi 57H ́ Sub al,37H ;nêu là chư hoa trư đi 37H ́ Jmp @@@ @@:Sub al,57H @@@:Ret HEX_AS:Cmp al,09 Ja * Add al,30H ;tư 0 tơi 9 công vơi 30H ̣ Jmp ** *: Add al,37H ;tư a tơi F công vơi 37H ̣ **: Ret Begin:lea dx,tb1 Call Nhap Lea bp,tb3 86
  17. Mov [bp+17],al Call AS_HEX Mov dl,al Lea dx,tb2 Call Nhap Mov [bp+22],al Call AS_HEX Add al,dl Mov dl,al And al,0fH Call HEX_AS Lea bx,Tong Mov [bx+1],al Mov cl,4 Shr dl,cl Call HEX_AS Cmp al,30h Jne # Sub al,10H ;nêu số hang chuc băng 0 thì thay băng khoang trăng ́ ̀ ̣ ̀ ̀ ̉ ́ #: Mov [bx],al Lea dx,tb3 Mov ah,09 Int 21h Lea dx,tong Int 21h End Start. Ví dụ 4: Viêt chương trinh nhâp vao tư ban phim môt chuôi ký tư kêt thuc băng phim ́ ̀ ̣ ̀ ̀ ́ ̣ ̃ ́ ́ ̀ ́ ENTER sau đó săp xêp chung theo trinh tư tư lơn đên nho. ́ ́ ́ ̀ ́ ̉ ̉ Giai : Chương trinh chia thanh cac bươc sau: ̀ ̀ ́ - Nhâp chuôi ký tư tư ban phim đưa vao bộ đêm. ̣ ̃ ̀ ́ ̀ ̣ - Săp xêp chuôi theo trinh tư tư lơn đên nhỏ theo giai thuât đôi chỗ hai phân tư liên ́ ́ ̃ ̀ ́ ̉ ̣ ̉ ̀ tiêp theo trinh tư lơn trươc nhỏ sau cho đên khi không con sư đôi chỗ nao. ́ ̀ ́ ̀ ̉ ̀ - Hiên thị chuôi. ̉ ̃ .Model Tiny .Code Start: Jmp Begin TB1 db 0ah,0dh, ‘Nhap vao mot chuoi ky tu : $’ TB2 db 0ah,0dh, ‘Chuoi sap xep theo trinh tu tu lon den nho la: $’ Buffer db 100 dup ‘$’ Count db 0 F_change db 0 ; Nhâp chuôi tư ban phim cât vao bộ đêm ̣ ̃ ̀ ́ ́ ̀ ̣ Begin: Lea bp,buffer Nhap: Mov ah,01 Int 21h 87
  18. Cmp al,0dh ;có phai phim ENTER không ̉ ́ Je sort ;nêu đung thì thoat khoi vong lăp nhâp ký tư ́ ́ ́ ̉ ̀ ̣ ̣ Mov [bp],al Inc bp Inc Count Jmp Nhap ;tiêp tuc nhâp ký tư ́ ̣ ̣ ; Săp xêp lai chuôi theo trinh tư tư lơn đên nhỏ ́ ́ ̣ ̃ ̀ ́ Sort: Lea bp,buffer ;trỏ đên đâu vung đêm chưa mã ký tư ́ ̀ ̀ ̣ Mov F_change,0 Mov cx,Count Sort1: Mov al,[bp] Cmp al,[bp+1] Jae NoChange Mov ah,[bp+1] Mov [bp+1],al Mov [bp],ah Mov F_change,01 ;nhơ lai có it nhât môt lân đôi chỗ ̣ ́ ́ ̣ ̀ ̉ NoChange: Inc bp Loop sort1 Cmp F_change,1 ;con có sư đôi chỗ chuôi chưa đươc săp xêp xong ̀ ̉ ̃ ́ ́ JE Sort ; Hiên thị chuôi đã săp xêp lên man hinh ̉ ̃ ́ ́ ̀ ̀ Lea dx,buffer Mov ah,09 Int 21H Int 20H End Start Ví dụ 5: Viêt chương trinh nhâp vao tư ban phim môt số HEX 2 byte, sau đó hiên thị ́ ̀ ̣ ̀ ̀ ́ ̣ ̉ nó trên dong tiêp theo dươi dang số nhị phân 16 bit. ̀ ́ ̣ Giai :̉ Chương trinh có thể chia ra thanh cac công viêc như sau: ̀ ̀ ́ ̣ - Nhâp số Hex 2 byte: có thể sư dung ham 01 cua INT 21H để nhâp tưng ký tư, ký tư ̣ ̣ ̀ ̉ ̣ nhân đươc ơ dươi dang mã ASCII nên chung cân phai biên đôi thanh số Hex sau ̣ ̣ ́ ̀ ̉ ́ ̉ ̀ đó dôn lai thanh môt số hai byte. ̀ ̣ ̀ ̣ - Hiên thị dươi dang số nhị phân: để hiên thị tuân tư 16 bit có thể sư dung lênh dich ̉ ̣ ̣ ̀ ̣ ̣ ̣ để lân lươt đưa cac bit ra thanh ghi cơ, nêu bit là 1 đưa giá trị 31H (mã ASCII cua ̀ ́ ́ ̉ 1) ra man hinh, nêu bit là 0 đưa 30H (mã ASCII cua 0) ra man hinh. Quá trinh trên ̀ ̀ ́ ̉ ̀ ̀ ̀ sẽ đươc lăp lai 16 lân. ̣ ̣ ̀ .Model Small .Stack 100H .Data TB1 db ‘Nhap vao mot so Hex hai byte : $’ TB2 db 0AH, 0DH, ‘Dang nhi phan cua no la : $’ SO dw 0 .Code Main proc 88
  19. ;khơi đông cho DS ̣ Mov ax,@data Mov ds,ax ;Hiên thị thông bao 1 ̉ ́ Mov ah,09 Lea dx,TB1 Int 21h ;Nhâp số Hex hai byte ̣ Call Nhap ;chương trinh nhâp môt số tư ban phim và đôi thanh số ̀ ̣ ̣ ̀ ́ ̉ ̀ Mov cl,12 ;Hex trong dx dươi dang 000X1H ̣ Shl dx,cl ;Dich trai 12 bit để trơ thanh dang X1000H ̣ ́ ̀ ̣ Or SO,dx ;Biên chưa số có dang X1000 ́ ̣ Call Nhap ;Nhâp ký tư thư hai trả về dx=000X2H ̣ Mov cl,8 Shl dx,cl ;dx có dang 0X200H ̣ Or SO,dx ;SO =X1X200H Call Nhap ;Nhâp ký tư thư 3 ̣ Mov cl,4 Shl dx,cl ;dx = 00X30H Or SO,dx ;SO = X1X2X30H Call Nhap ;Nhâp ký tư thư 4 ̣ Or SO,dx ;SO = X1X2X3X4 ;Hiên thị dươi dang số nhị phân ̉ ̣ Mov ah,09 Lea dx,TB2 Int 21H ;hiên thị thông bao 2 ̉ ́ Mov cx,16 ̣ ;lăp 16 lân ̀ Mov bx,SO @: Shr bx,1 ;dich bit cao nhât ra cơ CF ̣ ́ JC Hien_1 Mov dl,30H Jmp Hien Hien_1: Mov dl,31H Hien: Call Disp ;chương trinh hiên môt mã ASCII lên man hinh ̀ ̣ ̣ ̀ ̀ Loop @ ́ ;tiêp tuc 16 lân ̣ ̀ Main End Nhap: Mov dh,0 Mov ah,01 Int 21H Cmp al,09 Ja N1 Sub al,30h ;là số trư đi 30H Jmp N2 N1: Sub al,37H ;là chư trư đi 37H N2: Mov dl,al 89
  20. Ret Disp: Mov ah,02 Int 21H Ret END MAIN Ví dụ 6: Viêt chương trinh nhâp môt chuôi ký tư tư ban phim kêt thuc băng phim ́ ̀ ̣ ̣ ̃ ̀ ́ ́ ́ ̀ ́ ENTER, sau đó hiên thị trên dong tiêp theo vơi trinh tư ngươc lai. ̉ ̀ ́ ̀ ̣ Giai : ̉ Để thưc hiên chương trinh nay có thể ap dung nguyên tăc hoat đông cua ngăn xêp. ̣ ̀ ̀ ́ ̣ ́ ̣ ̣ ̉ ́ Trươc hêt nhâp cac ký tư nap vao ngăn xêp, sau đó lây lân lươt tư ngăn xêp ra để hiên ́ ̣ ́ ̣ ̀ ́ ́ ̀ ́ ̉ thi, như vây trinh tư chuôi sẽ đươc đao ngươc. ̣ ̣ ̀ ̃ ̉ .Model tiny .Code Start: Jmp begin TB1 db ‘Nhap mot chuoi ky tu ket thuc bang ENTER :’,0ah,0dh,’$’ TB2 db 0ah,0dh,‘Chuoi dao nguoc la :’,0ah,odh,’$’ Begin: Mov ah,09 Lea dx,TB1 Int 21h ;hiên thị lơi nhăc nhâp chuôi ̉ ́ ̣ ̃ Xor cx,cx;khơi đông biên đêm số ký tư ̣ ́ ́ Nhap: Mov ah,01 Int 21h ;đoc môt ký tư ̣ ̣ Cmp 0Ah ;kiêm tra xem có phai phim ENTER không ̉ ̉ ́ JE KT_nhap ;nêu phai thì kêt thuc nhâp ́ ̉ ́ ́ ̣ Push al ;cât ký tư vưa nhâp vao ngăn xêp ́ ̣ ̀ ́ Inc cx Jmp Nhap KT_nhap:Mov ah,09 Lea dx,TB2 Int 21h ;hiên thị thông bao 2 ̉ ́ Hien: Mov ah,02 Pop dl Int 21h ;hiên thị ký tư tai đinh ngăn xêp ̉ ̣ ̉ ́ Loop Hien ̣ ̣ ;lăp lai cho đên hêt chuôi (cung=0) ́ ́ ̃ ̃ Int 20h End Start Ví dụ 7: Viêt chương trinh tim tât cả cac số thâp phân có ba chư số mà giá trị cua nó ́ ̀ ̀ ́ ́ ̣ ̉ băng tông lâp phương ba chư số tao thanh no. ̀ ̉ ̣ ̣ ̀ ́ Ví dụ : 153 = 1 + 5 + 3 3 3 3 Giai : ̉ Bai toan có thể giai quyêt băng giai thuât vet can, chung ta có thể thư lân lươt cac số có ̀ ́ ̉ ́ ̀ ̉ ̣ ́ ̣ ́ ̀ ́ 3 chư số tư 100 tơi 999, nêu số nao có tông lâp phương cua 3 chư số băng chinh nó thì ́ ̀ ̉ ̣ ̉ ̀ ́ hiên thị lên man hinh. Chương trinh đươc thưc hiên như sau: ̉ ̀ ̀ ̀ ̣ .Model Tiny .Code Start: Jmp Begin 90

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản