Giáo trình ngôn ngữ assembly

114 373 0
Giáo trình ngôn ngữ assembly

Đ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

1 CHƯƠNG 1 : SỐ NHỊ PHÂN Trong Computer dữ liệu được ghi nhớ bằng các mạch điện có khả năng thể hiện một số trạng thái xác đònh . Mỗi mạch điện như vậy là một phần tử nhớ căn bản . Số giá trò một phần tử nhớ căn bản có thể biểu diễn cũng chính là số trạng thái mạch điện tạo nên nó có thể xác đònh. Do khả năng của kỹ thuật chế tạo mạch, và cũng do giá thành của mạch điện, các phần tử nhớ trên các Computer hiện nay đều được thiết lập từ các mạch điện có hai trạng thái xác đònh bởi mức điện thế cao và thấp. Tương ứng với hai trạng thái của mạch điện, mỗi phần tử nhớ mang một trong hai giá trò 0 và 1. Một phần tử nhớ như vậy được gọi là một bit . * Các toán tử trên bit : A B NOT A A AND B A OR B A XOR B A XOR (A XOR B) 0 0 1 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 1 1 0 1 1.1_ ĐƠN VỊ LƯU CHỨA THÔNG TIN: Để có thể biểu diễn được nhiều giá trò hơn, thông thường người ta lưu chứa thông tin dưới dạng từng nhóm bit, mỗi nhóm biểu thò cho một phần tử của thông tin. - Một nhóm 4 bit được gọi là nibble. - Một nhóm 8 bit được gọi là byte. Byte là đơn vò lưu chứa thông tin cơ sở trên các Computer hiện nay. Các bội số của byte là : 1 KB = 1024 byte ( 2 lũy thừa 10 ) 1 MB = 1024 KB 1 GB = 1024 MB - Một nhóm 16 bit được gọi là word. - Một nhóm 32 bit được gọi là double word (dword). Computer truy nhập đến các thông tin theo đơn vò nhỏ nhất là byte . 1.2_HỆ ĐẾM: Các giá trò số lưu chứa trong Computer dưới dạng từng nhóm các bit với cách biểu diễn 0 và 1 khác hẳn cách biểu diễn số thông thường của chúng ta (dùng các ký số 0,1 9). Cách biểu diễn số của chúng ta dựa trên cơ sở mười ký số 0,1 9 được gọi là hệ đếm thập phân, cách biểu diễn số trong Computer dựa trên cơ sở hai ký số 0 và 1 được gọi là hệ đếm nhò phân. 1.2.1_Quy tắc của một hệ đếm theo vò trí: Hệ đếm của chúng ta hiện nay là một hệ đếm theo vò trí, dựa trên cơ sở mười ký số 0,1 9. Giá trò của một số được biểu diễn bằng một dãy các ký số, trong đó giá trò của mỗi ký số tùy thuộc vào vò trí của nó ở trong dãy. Thí dụ : 1 9 7 4 3 5 1*100000 + 9*10000 + 7*1000 + 4*100 + 3*10 + 5 10 5 10 4 10 3 10 2 10 1 10 2 Gọi số các ký hiệu để biểu diễn một hệ đếm theo vò trí gọi là cơ số C của hệ đếm ta có công thức tổng quát : x = Σ C i * K i (K i là các ký số của hệ đếm) 1.2.2_Các hệ đếm thông dụng : Hệ nhò phân : sử dụng các ký số 0 và 1 (bin : binary ) Hệ bát phân : sử dụng các ký số 0,1 7 (Oct: ) Hệ thập phân: sử dụng các ký số 0,1 9 (dec : decimal) Hệ thập lục : sử dụng các ký số 0,1 9,A F (hex : hexa ) Bảng đối chiếu các hệ đếm: Dec Hex Bin Dec Hex Bin 0 0 0000 8 8 1000 1 1 0001 9 9 1001 2 2 0010 10 A 1010 3 3 0011 11 B 1011 4 4 0100 12 C 1100 5 5 0101 13 D 1101 6 6 0110 14 E 1110 7 7 0111 15 F 1111 1.2.3_Quy ước biểu diễn các hệ đếm : • Các số dạng bin kết thúc bằng b. • Các số dạng hex kết thúc bằng h. • Các số hex nên bắt đầu bởi ký số 0 (bắt buộc khi ký số đầu tiên là A F). Thí dụ : 1991, 01000101b, 0F1h, 078h. Việc sử dụng hệ nhò phân trên Computer gặp một số khó khăn : để biểu diễn một giá trò cần quá nhiều ký số làm cho người sử dụng phải ghi chép nhiều và rất khó nhớ. Từ nhận xét : hệ nhò phân là một hệ con hoàn toàn của hệ thập lục: tập hợp 4 bit nhò phân có thể biểu diễn 16 giá trò số khác nhau ( 2 4 ), người ta thường dùng các ký số thập lục (0,1 9,Ạ.Z) để biểu diễn thay cho từng nhóm 4 bit trong một số nhò phân. 1 1 1 1 1 0 1 0 0 1 0 0 1 1 0 1 F A 4 D 1.3_ CÁC PHÉP TÍNH TRÊN HỆ NHỊ PHÂN Các phép tính cơ bản + - * / trên số nhò phân được thực hiện với các quy tắc như trên hệ thập phân . Tuy vậy, phải chú ý rằng các số nhò phân lưu trong Computer được ghi nhận bằng một số các bit xác đònh : có số các ký số xác đònh. Do đó các phép tính chỉ có thể thực hiện trên khuôn khổ các là các bit tràn . Các số nhò phân chúng ta đề cập kế tiếp là các số nhò phân được lưu trong một số bit xác đònh (8,16,32), tức là có chiều dài không đổi . 1.3.1_Phép cộng nhò phân: 3 Quy tắc : 0 + 0 = 0 0 + 1 = 1 1 + 1 = 0 nhớ 1 ( 10 ) Thí dụ : 1 0 0 1 1 0 1 1 1 1 0 1 0 1 1 1 + + 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 ______________ ________________ 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0 Bít tràn 1.3.2_Phép trừ nhò phân: Quy tắc : 0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 nhớ 1 Thí dụ : 1 0 0 1 1 0 1 1 1 1 0 1 0 1 1 1 - - 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 _____________ ______________ 0 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1.3.3_Phép nhân nhò phân: Quy tắc : 0 * 0 = 0 0 * 1 = 0 1 * 1 = 1 Thí dụ : 1 1 0 1 0 1 1 1 x 1 0 1 ____________ 1 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 ___________________ 1 0 0 0 0 1 1 0 0 0 1 1.3.4_Phần bù nhò phân: Phần bù của một số nhò phân được đònh nghóa là một số nhò phân được tạo thành từ số ban đầu theo quy tắc các bit đều được đảo ngược (NOT). Thí dụ : phần bù của 01001101 là 10110010 4 0 1 0 0 1 1 0 1 1 0 1 1 0 0 1 0 < Phần bù Một số cộng với phần bù của nó sẽ cho kết quả là một giá trò nhò phân có tất cả các bit bằng 1 . Phần bù của một số nhò phân cũng được gọi là bù 1 của số nhò phân đó. 1.4_SỐ ÂM TRONG HỆ NHỊ PHÂN: Các số nhò phân trên là các số không dấu (nguyên dương). Để biểu diễn số có dấu (nguyên âm) ta không thể đơn thuần thêm một dấu trừ trước một số nhò phân bởi vì Computer chỉ có hai ký hiệu 0 và 1 để ghi nhớ thông tin! Yêu cầu cần phải có một cách mô tả các số âm cũng trên cơ sở các ký hiệu 0 và 1 đã phát sinh từ đây . Người ta đònh nghóa số âm qua khái niệm số đối trong đại số : một số khi cộng với số đối của nó sẽ bằng 0. Như vậy số nhò phân biểu diễn cho giá trò -3 phải là một số khi cộng với số nhò phân biểu diễn cho giá trò +3 tạo ra kết quả là 0 . Từ nhận xét một số cộng với phần bù của nó sẽ cho kết quả là một số nhò phân có tất cả các bit đều bằng 1, ta có kết luận sau: số-nhò-phân + phần-bù + 1 = 0 ( có một bit tràn ! ) ===> số đối = phần bù + 1 ( bù 2 ) Trong quá trình xác đònh cách ký hiệu cho các số âm người ta nhận thấy các số âm tạo thành bao giờ cũng có bit cao nhất là 1, và các số dương tương ứng có bit cao nhất là 0 . Các nhận xét trên đưa đến các hệ quả về số nhò phân có dấu như sau : • Các số âm bao giờ cũng có bit cao nhất là 1 . • Một số âm cộng số đối tương ứng của nó sẽ cho kết quả là 0 . • Các số có dấu cộng với nhau sẽ cho kết quả đúng như phép cộng các số nguyên ( Hãy chứng minh -3+2 = -1 ) . 5 CHƯƠNG 2 : CẤU TRÚC MỘT MÁY VI TÍNH IBM PC 2.1_BỘ XỬ LÝ TRUNG ƯƠNG Trung tâm của một máy vi tính IBM PC là bộ xử lý trung ương (CPU) 8088 do Intel sản xuất . 8088 là một vi mạch đặc biệt, có khả năng tự thực hiện một loạt các mệnh lệnh được liệt kê trước,có khả năng tự phán đoán để chọn cách đáp ứng với các tình huống trong quá trình thực hiện lệnh. Mỗi mệnh lệnh 8088 được biểu thò bằng một nhóm các byte. Các byte ấy được gọi là mã lệnh (opcode) của bộ xử lý . Khi thực hiện công việc của mình CPU đọc các mã lệnh được lưu chứa trong bộ nhớ của máy tính và thực hiện chúng theo thứ tự liên tiếp nhau. 2.2_BỘ NHỚ Bộ nhớ là nơi lưu chứa các mệnh lệnh mà CPU sẽ phải thực hiện,cũng là nơi ghi nhớ các thông tin, các giá trò trung gian, các kết quả của quá trình làm việc Bộ nhớ được tạo thành từ hai loại chính : - Bộ nhớ chỉ đọc - ROM (Read Only Memory) - Bộ nhớ đọc/ghi - RAM (Random Access Memory) Các thông tin ghi trên ROM là cố đònh và không xóa được: mang tính chất “vónh cửu” Các thông tin trên RAM có thể được sửa đổi tùy thích, nhưng những gì đang được lưu giữ trong RAM sẽ mất đi khi tắt máy. Trong một máy tính, mỗi phần tử nhớ thuộc ROM hoặc RAM được ghi nhận bởi một số thứ tự (gọi là đòa chỉ). 2.3_CÁC MẠCH HỖ TR Để có thể hoạt động được, CPU cần đến sự hỗ trợ của nhiều vi mạch khác. Đồng thời, CPU cũng không thể giao tiếp với người sử dụng bằng các giá trò nhò phân biểu diễn dưới dạng các xung điện . Nó phải nhờ đến các mạch giao diện (Interface) như keyboard controller,video controller Các mạch giao diện này sẽ điều động trực tiếp đến các phương tiện giao tiếp cụ thể với người sử dụng (như màn hình,bàn phím,máy in ) theo các yêu cầu,các thông tin được gởi đến từ CPU. 2.4_PORT Để liên lạc với các vi mạch hỗ trợ,các mạch giao diện, CPU dùng một hệ thống đòa chỉ riêng ( khác với hệ thống đòa chỉ đònh vò của bộ nhớ ) để xác đònh đối tượng cần đối thoại . Mỗi đòa chỉ trong hệ thống này được gọi là một cổng (port) . Mỗi vi mạch hỗ trợ, mỗi mạch giao diện sẽ chiếm dụng một số cổng xác đònh . Khi cần giao tiếp, CPU chỉ cần sử dụng đến các cổng tương ứng. SYSTEM BUS TIMER CLOCK CPU MEMORY DMA INTERRUPT CONTROLLER VIDEO CONTROLLER KEYBOARD CONTROLLER IO INTERFACE HARD DISK CONTROLLER DISKETTE C ONTROLLER 6 2.5_CLOCK Các mạch điện ít khi nào có thời gian thực hiện giống nhau. Do đó, để các phần tử trong một máy tính hoạt động nhòp nhàng ăn khớp với nhau phải có một bộ phận đếm nhòp . Đảm nhiệm công việc này là một bộ phận tạo xung nhòp cho tất cả các mạch điện trong máy . Bộ phận này được gọi là đồng hồ của máy . Máy có đồng hồ với tần số càng cao thì sẽ chạy càng nhanh. 2.6_BUS CPU và các mạch có liên quan được nối song song với một dải các kênh liên lạc, nguồn cung cấp điện cấu trúc này được gọi là bus. Bus được chia thành 4 phần chính: 1. Command bus 2. Address bus 3. Data bus 4. Power bus Hệ thống quản lý bus gọi là Bus controller Giao tiếp thông qua bus được thực hiện như sau : Giả sử CPU cần tăng giá trò từ một phần tử nhớ tại đòa chỉ X lên 1 đơn vò, nó phải trải qua các bước sau : 1. Đặt đòa chỉ X vào address bus 2. Đưa yêu cầu đọc memo vào command bus 3. Đợi Bus thông báo sẵn sàng : bus controller lấy giá trò tại đòa chỉ X đặt vào Data bus 4. Tiếp nhận giá trò cần đọc từ data bus 5. Tăng giá trò ấy lên 1 ( phép toán được thực hiện trong CPU ) 6. Đặt giá trò mới trở lại data bus 7. Đưa yêu cầu ghi memo vào command bus (address bus đang giữ giá trò cũ) 7 8. CHƯƠNG 3 : BỘ VI XỬ LÝ 8088 3.1_CÁC THANH GHI CỦA BỘ VI XỬ LÝ 8088 Bộ vi xử lý 8088 có một số phần tử dùng để ghi nhớ các giá trò trung gian trong quá trình làm việc,tạo ra các đòa chỉ,làm các phép tính Các phần tử này gọi là các thanh ghi (Register). 8088 là bộ vi xử lý 16 bit, các tác vụ của 8088 thường dược thực hiện trên 16 bit dồng thời,các thanh ghi của 8088 đều là các phần tử nhớ 16 bit.Các thanh ghi hoàn toàn có thể sử dụng như các phần tử nhớ thuộc về RAM. Điểm khác nhau giữa thanh ghi và các phần tử nhớ thuộc RAM là Thanh ghi là các phần tử thuộc bộ vi xử lý (về mặt vật lý). Một số tác vụ đặc biệt như nhân hay chia, kết quả bắt buộc phải đặt trong thanh ghi Một số thanh ghi chỉ dùng để xác đònh đòa chỉ cho 8088 Các tác vụ trên thanh ghi nhanh hơn nhiều so với các tác vụ trên RAM. Bởi vì để thực hiện các tác vụ trên RAM,8088 phải đi qua một quá trình như sau : a) Đọc thông tin từ RAM (thông qua Bus) b) Thực hiện tác vụ c) Ghi trả lại thông tin vào RAM (thông qua Bus) Bộ vi xử lý 8088 có 14 thanh ghi 16 bit,được chia thành nhóm theo chức năng như sau: 3.1.1_Nhóm thanh ghi đa dụng : AX,BX,CX,DX : Mỗi thanh ghi có thể sử dụng như hai thanh ghi 8 bit với các tên AH,AL,BH,BL,CH,CL,DH,DL F E D C B A 9 8 7 6 5 4 3 2 1 AH AL AX BH BL BX CH CL CX DH DL DX 3.1.2_Nhóm thanh ghi con trỏ và chỉ mục : SP,BP,SI,DI : thường dùng để tạo các đòa chỉ, cũng có thể dùng để lưu chứa các số liệu như nhóm thanh ghi đa dụng 3.1.3Nhóm thanh ghi phân đoạn : CS,DS,SS,ES : Chỉ dùng để xác đònh Segment, không cho phép thực hiện các phép tính số học,logic 3.1.4Thanh ghi con trỏ lệnh IP : Chỉ dùng để xác đònh offset của mã lệnh 3.1.5Thanh ghi cờ hiệu Flag : Ghi lại trạng thái của các phép tính số học, kết quả của các phép so sánh F E D C B A 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 3.2CÁCH XÁC ĐỊNH ĐỊA CHỈ CỦA 8088 8 Bộ vi xử lý 8088 dùng một số 20 bit để xác đònh đòa chỉ cho các phần tử trong vùng nhớ (memory), tương đương với 1MB vò trí. Bằng các giá trò 16 bit,ta chỉ có thể tạo ra đòa chỉ cho 0FFFFh phần tử ( 64 KB hay 65536 byte ). Do đó để có thể đònh vò 1 MB đòa chỉ bằng các thanh ghi 16 bit, 8088 sử dụng nguyên tắc truy nhập bộ nhớ theo từng segment,mỗi segment có kích thước 64 KB, điểm bắt đầu của segment phải là một đòa chỉ chia hết cho 010h ( 16 thập phân ) . Đòa chỉ của segment được tính bằng paragraph ( 1 paragraph = 16 byte ). Đòa chỉ một phần tử nào đó thuộc đoạn sẽ được xác đònh thông qua đòa chỉ tương đối (offset) của phần tử đó trong đoạn và vò trí của đoạn . Từ nguyên tắc trên, ta có các kết quả sau : Đòa chỉ 20 bit = Segment*16 + Offset Cách biểu diễn : Segment:offset Cùng một đòa chỉ, có thể biểu diễn dưới nhiều hình thức khác nhau. Thí dụ: 0040:006C và 0000:046C là hai cách biểu diễn một đòa chỉ Segment chỉ là khái niệm logic, do đó không có vò trí cố đònh cho từng segment . Ta hoàn toàn có thể mô tả các segment phủ lấp lên nhau. Bộ vi xử lý 8088 luôn xác đònh segment thông qua giá trò của các thanhghi segment. Do đó để xác đònh segment ta phải gán các giá trò tương ứng cho các thanh ghi segment. Thanh ghi CS chỉ đònh segment của đoạn mã chương trình đang thực hiện,IP mang giá trò offset. Vì vậy CS:IP luôn là đòa chỉ của lệnh đang được thực hiện. Thanh ghi DS chỉ đònh segment của dữ liệu,thông thường các đòa chỉ đều được căn cứ theo segment DS . Thanh ghi SS chỉ đònh segment của STACK ( sẽ nói rõ hơn trong phần sau). Thanh ghi ES dùng trong các tác vụ về chuỗi hoặc theo yêu cầu riêng. 3.3CÁC XÁC ĐỊNH OFFSET CỦA 8088 Offset của bộ vi xử lý 8088 được xác đònh theo nguyên tắc sau : Offset là một hằng số TD : [046Ch] Offset là giá trò của một trong các thanh ghi chỉ mục BX,SI,DI,BP TD : [BX] Offset là giá trò của một tổng được tạo thành từ các hằng số,các thanh ghi chỉ mục Nguyên tắc này có một số hạn chế : - SI và DI không được cùng có mặt trong tổng - BX và BP không được cùng có mặt trong tổng TD : [SI+BX] [DI+BX+020h] TD : [SI+BP+041h] Segment mặc nhiên : khi xác đònh một đòa chỉ, không phải lúc nào ta cũng phải chỉ ra thanh ghi segment nào sẽ được sử dụng . Nếu không có chỉ đònh cụ thể thanh ghi segment, các offset tạo thành từ các hằng số và các thanh ghi chỉ mục BX,SI,DI luôn được hiểu là đi kèm với thanh ghi segment DS . Offset được tạo thành từ BP được hiểu là đi kèm với thanh ghi SS Nếu chúng ta chỉ đònh rõ ràng thanh ghi segment đi kèm với offset, các giá trò mặc nhiên về segment sẽ bò vô hiệu hoá . 3.4 BỘ 8088 THỰC HIỆN MỘT CHƯƠNG TRÌNH RA SAO ? 3.4.1Thế nào là một chương trình : Chương trình là một tập hợp các mã lệnh và các dữ liệu . Mã lệnh (code) : là các lệnh 8088 sẽ thực hiện Dữ liệu (data) : là các thông tin chương trình sẽ sử dụng đến .Thí dụ : chương trình của bạn sẽ in 9 dòng chữ “Do you like me ?” ra màn hình thì dòng chữ ấy phải có mặt trong chương trình của bạn. Vùng lưu chứa dòng chữ này trong chương trình được gọi là một vùng dữ liệu (data) . Chương trình của bạn cũng cần đến một số vùng nhớ để lưu chứa các giá trò trong quá trình chương trình được thực hiện, các vùng nhớ này cũng được gọi là vùng dữ liệu . Phải chú ý, bộ 8088 không thể phân biệt đâu là code, đâu là data ! 3.4.2Cách thức 8088 thực hiện một chương trình : Giả sử đã có chương trình trong RAM và CS:IP chỉ đến lệnh đầu tiên của chương trình . 8088 đọc byte xác đònh bởi CS:IP,nhận diện lệnh, từ đó suy ra chiều dài của lệnh . 8088 cộng thêm vào IP chiều dài của lệnh, rồi bắt đầu thực hiện lệnh . Sau khi thực hiện lệnh, 8088 đọc tiếp byte đang được xác đònh bởi CS:IP và cứ thế quá trình này lặp đi lặp lại mãi . Chương trình của chúng ta được thực hiện từ lệnh đầu tiên đến lệnh cuối cùng theo phương cách này . Nhưng làm cách nào để đưa một chương trình vào RAM và làm cách nào để ấn đònh CS:IP chỉ đến lệnh đầu tiên của chương trình ấy ? Tất cả các tác vụ này đều do hệ điều hành thực hiện . Chương trình của chúng ta được lưu chứa trên đóa thành một file có phần mở rộng (đuôi đặc tính) là COM hay EXE . Khi ta gõ từ bàn phím tên của file này và nhấn ENTER, hệ điều hành sẽ đọc file ấy vào RAM, sau đó đưa vào CS và IP các giá trò để CS:IP chỉ vào lệnh đầu tiên của chương trình vừa được nạp vào. Sau đó là quá trình thực hiện chương trình của chúng ta như đã nêu trên. Làm cách nào để kết thúc chương trình của chúng ta ? Như đã nêu trên, 8088 không ngừng đọc và phân giải các lệnh theo đòa chỉ được CS và IP xác đònh,do đó kết thúc một chương trình nào đó không có nghóa là 8088 ngừng hoạt động (!) . Quá trình kết thúc một chương trình được thực hiện bằng cách làm cho CS:IP chỉ vào một điểm xác đònh trước trong vùng mã của hệ điều hành ( còn gọi là chuyển điều khiển cho hệ điều hành ) . Sau đó là quá trình đợi lệnh của hệ điều hành . Quá trình đợi lệnh của hệ điều hành như chúng ta nhìn thấy, có vẻ như “máy tính đang ngừng làm việc,chờ chúng ta ra lệnh tiếp” ! Đây là điều lầm tưởng của nhiều người mới bắt đầu làm quen với Computer. Chúng ta phải luôn nhớ rằng máy tính liên tục phân giải và thực hiện các lệnh được CS:IP chỉ đến và chỉ ngừng khi chúng ta tắt máy ! 3.4.3Chúng ta tạo ra chương trình bằng cách nào : Các mã lệnh trong chương trình của chúng ta là các số nhò phân biểu diễn thành từng byte . Chúng ta sẽ rất khó khăn nếu phải viết một chương trình bằng từng số nhò phân như vậy . Trong thực tế chúng ta sẽ viết một chương trình nguồn, đó là một file với các đặc điểm : - Sự trình bày tuân thủ theo một số quy tắc chung - Mỗi lệnh của 8088 sẽ được gọi bằng một cái tên gợi nhớ . - Các đòa chỉ được xác đònh bởi các tên riêng do người viết quy đònh - Chương trình nguồn sẽ được một chương trình đặc biệt biên dòch (compile) thành một file với đầy đủ các mã lệnh và các dữ liệu đã mô tả trong chương trình nguồn . Vì vậy chúng ta không cần phải thắc mắc lệnh này hoặc lệnh kia có mã máy là gì ! 3.4.4Một chương trình nguồn sẽ được biên dòch bằng Assembler 86 : Code Segment Assume CS:Code,DS:Code org 0100h Main proc near M1: mov dx,offset chuoi1 ; in chuoi1 ra màn hình mov ah,9 ; int 021h ; mov ah,1 ; Read Keyboard 10 int 021h ; cmp al,’Y’ ; Kiểm tra ký tự dọc vào je KT ; nếu là ‘Y’ hay ‘y’ thì nhảy dến KT cmp al,’y’ je KT mov ah,02 ; Nếu không, Beep một tiếng rồi quay lại M1 mov dl,7 int 021h ; jmp M1 KT: mov dx,offset chuoi2 ; In chuoi2 mov ah,9 ; int 021h ; int 020h ; Kết thúc chương trình Main endp Chuoi1 db 13,’Do you like me ? $’ ; Mã 13 để trở về đầu dòng Chuoi2 db ‘ Thank you !$’ Code ends end main [...]...CHƯƠNG 4 : ASSEMBLER 86 Ngữ pháp của các trình hợp dòch thông dụng hiện nay như MASM,TASM khá phức tạp, do đó tài liệu này sẽ chỉ trình bày các phần căn bản mà hầu hết trình hợp dòch thông dụng đều chấp nhận Những phần căn bản nhất của ngữ pháp của assembler cho bộ xử lý 8088/86 sẽ được trình bày trong chương này Các phần khác sẽ được đề cập đến trong các chương sau 4.1NGỮ PHÁP CỦA ASSEMBLER 86... Trong quá trình hợp dòch, trình hợp dòch không thể kiểm soát được giá trò thực của thanh ghi segment Do đó sự phân chia chương trình thành các segment hoàn toàn là các ý niệm của người lập trình Một trong các nhiệm vụ quan trọng của trình hợp dòch là xác đònh chính xác các offset theo các segment của chương trình chúng ta Nếu không có một sự lưu ý nào về segment sẽ được sử dụng, trình hợp dòch sẽ cho... dòch sẽ cho rằng toàn bộ chương trình ở trong cùng một segment Khi ấy các phần tử thuộc chương trình đều được trình hợp dòch xác đònh đòa chỉ tương đối (offset) theo điểm đầu của chương trình Thí dụ : một vò trí thuộc SEGMENT-B sẽ được tính offset theo cự ly từ đầu SEGMENT-A cho đến vò trí của nó trong toàn bộ đoạn mã chương trình được tạo ra Khai báo về Segment sẽ lưu ý trình biên dòch về phạm vi của... dạng một dòng lệnh Khai báo thủ tục trong hợp ngữ chỉ là hình thức Chúng ta có thể bỏ qua các khai báo ấy mà vẫn tạo lập được một số chương trình đơn giản Tuy vậy viết chương trình dưới dạng các thủ tục sẽ làm chương trình của chúng ta trở nên rõ ràng và dễ quản lý hơn Khi chương trình được viết dưới dạng các thủ tục, việc khai báo thủ tục rất quan trọng Trình hợp dòch sẽ căn cứ trên các khai báo ấy... các giá trò từ STACK bằng Pop phải ngược lại thứ tự đã cất chúng bằng Push Trong quá trình thực hiện chương trình để tránh hiện tượng các quá trình trung gian làm sai lạc giá trò các thanh ghi, biện pháp thông thường là cất giá trò các thanh ghi này vào STACK trước khi thực hiện quá trình trung gian Thực hiện quá trình trung gian xong, lấy lại giá trò đầu cho các thanh ghi từ STACK Thí dụ : push DX... các thanh ghi segment Giá trò của IP khi chương trình được thực thi luôn luôn bằng 0100h - Loại EXE : sử dụng nhiều segment, không hạn chế về kích thước khi được thực thi, các thanh ghi segment cần được gán giá trò của segment có liên quan Giá trò của IP khi chương trình được thực thi tùy thuộc từng chương trình cụ thể Trong tài liệu này, các chương trình thí dụ đều được viết dưới dạng COM 4.2CÁC... 4.1.5Phân loại chương trình Đối với hệ điều hành DOS, chương trình của chúng ta được chia thành hai loại chính : - Loại COM : chỉ sử dụng 1 segment, có kích thước tối đa gần 64 KB khi được thực thi, các thanh ghi segment đều được gán giá trò của segment hiện lưu chứa chương trình Do đó trong một file COM, nếu không có nhu cầu truy nhập đến các vùng nhớ ngoài segment của chương trình, không cần phải... INT ngay bên trong đoạn chương trình đang được thực hiện gọi là một interrupt mềm Nói một cách khác, interrupt mềm là một interrupt được chương trình sử dụng chủ động gọi đến Lẽ dó nhiên, một chương trình cũng có thể cố ý gọi đến một interrupt cứng Nhưng hành động ấy sẽ chẳng làm interrupt ấy trở thành “mềm” ! Thông thường việc gọi thẳng đến một interrupt cứng từ chương trình sẽ tạo ra các hậu quả... Thanh-ghi:Tên-segment[,Thanh-ghi:Tên-segment [ ] ] TD : Assume CS:Code,DS:Code ;xác đònh với trình hợp dòch CS và DS sẽ cùng mang giá trò của Code segment Lưu ý : Chỉ thò Assume chỉ là sự khai báo cho trình hợp dòch biết các thanh ghi segment sẽ được sử dụng như thế nào chứ không tạo ra phép gán giá trò cho các thanh ghi ấy ! 4.1.2Khai báo thủ tục Chương trình của chúng ta được viết thành các thủ tục (procedure) Một procedure... Chương trình của chúng ta có thể sử dụng đến nhiều segment khi được thực hiện : Để truy nhập đến mỗi segment, ta phải gán đòa chỉ của segment tương ứng cho các thanh ghi segment Sau đó, các phần tử thuộc về segment sẽ được truy nhập thông qua offset của nó trong segment ấy Lưu ý là việc gán giá trò cho các thanh ghi segment chỉ được thực hiện trong lúc chương trình đang thực hiện Trong quá trình hợp . dòng chữ này trong chương trình được gọi là một vùng dữ liệu (data) . Chương trình của bạn cũng cần đến một số vùng nhớ để lưu chứa các giá trò trong quá trình chương trình được thực hiện, các. vào lệnh đầu tiên của chương trình vừa được nạp vào. Sau đó là quá trình thực hiện chương trình của chúng ta như đã nêu trên. Làm cách nào để kết thúc chương trình của chúng ta ? Như đã nêu. liệu này sẽ chỉ trình bày các phần căn bản mà hầu hết trình hợp dòch thông dụng đều chấp nhận. Những phần căn bản nhất của ngữ pháp của assembler cho bộ xử lý 8088/86 sẽ được trình bày trong

Ngày đăng: 04/08/2014, 15:50

Tài liệu cùng người dùng

Tài liệu liên quan