Tài liệu Kiến trúc máy tính

Điều cơ bản của trạng thái tràn số liên quan đến thực tế rằng giới hạn của các

số có thể hiển thị trong giới hạn của Computer.

Như đã giải thích ở các phần trước, giới hạn của một số nguyên có dấu có thể

biểu diễn được bằng Word 16 bits là -32768 32767. Với số nguyên không dấu là 0

65535. Nếu kết quả tính toán vượt quá giới hạn trên, trạng thái tràn sẽ xảy ra và kết

quả sẽ bị cắt bớt để có thể biểu diễn được trong thanh ghi, do đó kết quả sẽ là sai. Để

có thể hiểu rõ hơn, ta có thể tham khảo ví dụ sau:

Số có dấu hoặc không dấu là tùy thao quy định. Khi ta thực hiện một phép

tính số học, có thể là phép cộng (+), có thể có 4 trường hợp xảy ra.

+ Không tràn số.

+ Tràn số vì dấu (+/ư).

+ Tràn số không dấu.

+ Tràn số cả trường hợp có dấu và không dấu.

Ví dụ sau là ví dụ tràn số không dấu. Giả định thanh ghi AX chứa giá trị

FFFFh, Thanh ghi BX chứa giá trị 0001h, Sử dụng lệnh ADD để cộng 2 giá

trị trên.

pdf50 trang | Chia sẻ: maiphuongdc | Lượt xem: 1803 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Tài liệu Kiến trúc máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
c dạng chữ số decimal có thể kết thúc bằng ký tự D hoặc d. + Các chữ số d•ới dạng Hex phải đ•ợc bắt đầu bằng một chữ số thập phân (Decimal) và kết thúc bằng ký tự H hoặc h, Ví dụ "0ABCDh" Chữ số 0 đầu tiên, ký tự H sau cùng. + các ví dụ sau biểu diễn các các khai báo số hợp lệ trong ch•ơng trình: Chữ số Loại dữ liệu 10101 Decimal 10101b Binary 3256 Decimal -2453 Decimal 1,432 Không hợp lệ vì có chứa ký tự không phải là ký tự số 1B2Dh Hex 2B6C Không hợp lệ vì không kết thúc bằng ký tự H FEEEH Không hợp lệ vì không bắt đầu bằng ký tự số 0FFFFH Hex - Dữ liệu ký tự: Các ký tự và chuỗi ký tự phải đ•ợc biểu diễn nằm trong cặp dấu nháy đơn '..' Hoặc nháy kép "..", ví dụ "A" hoặc 'hello'. Các ký tự đ•ợc biên dịch sang hệ thống mã ASCII bởi ch•ơng trình dịch, vì vậy không có gì la khác nhau giữa cách biểu diễn "A" và 41H (Mã ASCII của A) - Các biểu diễn dữ liệu quy •ớc: Quy •ớc Đại diện cho DB Define Byte DW Define Word DD Define Doubleword (Dãy 2 Words) DQ Define Quadword (Dãy 4 Words) DT Define Ten Byte (Dãy 10 Bytes) 3- Biến: Các biến trong ngôn ngữ bậc thấp đóng vai trò nh• các biến trong các ngôn ngữ lập trình bậc cao. Mỗi biến dều có kiểu dữ liệu riêng và đ•ợc gán một vị trí bộ nhớ nào đó bởi ch•ơng trình. Các loại biến nh• sau: - Biến Byte (Byte Variables): Khai báo biến theo định dạng nh• sau: Name DB Initial value Tên biến Kiểu biến Giá trị khởi tạo Ví dụ khai báo: This document is created with the unregistered version of Document2PDF Pilot. Alpha DB 4 Ch•ơng trình sẽ tổ chức 1 byte bộ nhớ đặt tên là Alpha, khởi tạo dữ liệu trong bộ nhớ là 4. Nếu không cần khởi tạo dữ liệu tr•ớc, ta chỉ cần thay đổi một chút trong khai báo nh• sau: Alpha DB ? Dấu "?" để thay thế cho dữ liệu cần khởi tạo. Giới hạn khai báo của biền loại này theo giá trị Decimal: -128 137 nếu sử dụng các số có dấu. 0 255 nếu sử dụng số không dấu. - Biến Word (Word Variables): Khai báo biến theo định dạng nh• sau: Name DW Initial value Tên biến Kiểu biến Giá trị khởi tạo Ví dụ khai báo: Alpha DB -4 Ch•ơng trình sẽ tổ chức 2 bytes bộ nhớ để sử dụng cho loại biến này. Giới hạn sử dụng theo giá trị Decimal: - 32768 32767 nếu sử dụng các số có dấu. 0 65535 nếu sử dụng các số không dấu. - Biến mảng (Array Variables): Trong ngôn ngữ Assembly, một mảng là một dãy các bytes hoặc words bộ nhớ. Ví dụ nh• ta định nghĩa một mảng gồm 3 Bytes với các giá trị khởi tạo lần l•ợt là 10h, 20h, 30h: B_Array DB 10h,20h,30h B_Array là Byte đầu tiên, B_Array +1 là Byte thứ 2 và B_Array + 2 là Byte thứ ba. Nếu ch•ơng trình tổ chức địa chỉ 200h cho biến, bộ nhớ sẽ đ•ợc phân bố nh• sau: Địa chỉ Nội dung bộ nhớ B_Array 200h 10h B_Array + 1 201h 20h B_Array + 2 202h 30h T•ơng tự nh• trên, một mảng kiểu Word đ•ợc phân bố nh• sau: W_Array DW 1000,40,29870,323 Địa chỉ Nội dung bộ nhớ W_Array 0300h 1000d W_Array + 1 0302h 40d W_Array + 2 0304h 29870d W_Array + 3 0306h 323d - Byte thấp và Byte cao của Word. Đôi khi ta chỉ cần sử dụng Byte cao hoặc byte thấp trong một biến dạng Word. Ví dụ ta khai báo nh• sau: Word01 DW 1234h Byte thấp chứa giá trị 34h, Byte cao chứa giá trị 12h. - Chuỗi ký tự (Character Strings): Một mảng các mã ASCII có thể đ•ợc khởi tạo với một chuỗi các ký tự. Ví dụ nh• sau: Letters DB 'ABC' Cũng có thể đ•ợc khai báo nh• sau: Letters DB 41h,42h,43h This document is created with the unregistered version of Document2PDF Pilot. Trong một chuỗi, ch•ơng trình dịch phân biệt giữa các ký tự chữ hoa và chữ th•ờng. Do đó 'ABC' (41h,42h,43h) sẽ khác với 'abc' (61h,62h,63h). ta có thể khai báo kết hợp cả ký tự chữ cái và ký tự số chung một biến: Mess DB 'Hello',0Ah,0Dh,'$' T•ơng đ•ơng: Mess DB 48h,45h,4Ch,4Ch,4Fh,0Ah,0Dh24h - Hằng số đ•ợc định nghĩa (named Constants): Nhằm mục đích để mã ch•ơng trình dễ hiểu hơn, ta th•ờng khai báo một số hằng số cố định. Để khai báo hằng số, ta sử dụng từ khoá EQU, Cú pháp nh• sau: Name EQU Constant Tên t•ơng đ•ơng Hằng số Ví dụ: LF EQU 0Ah Giải thích: Ta dùng tên LF cho giá trị 0Ah, Mã ASCII của 0Ah là Line Feed (Xuống dòng). Tên LF có thể dùng để thay thế cho 0Ah bất cứ chỗ nào trong ch•ơng trình. Hai câu lệnh sau là t•ơng đ•ơng: Mov DL,0Ah ;và Mov DL,LF 4- Một số lệnh cơ bản Có hàng trăm lệnh trong bộ lệnh của CPU, chúng cũng đ•ợc thiết kế thêm cho các loại CPU về sau này. Trong phần này, chúng ta chỉ quan tâm đến một số lệnh thông dụng nhất đ•ợc sử dụng để di chuyển dữ liệu và một số tính toán số học. Các mô tả d•ới đây sử dụng các từ Word01, Word02 nh• biến kiểu Word, Byte01, Byte02 nh• biến kiểu Byte. - Lệnh MOV và lệnh XCHG + Lệnh MOV đ•ợc sử dụng để di chuyển dữ liệu giữa các thanh ghi, giữa thanh ghi và vị trí nào đó của bộ nhớ hoặc di chuyển trực tiếp một số vào thanh ghi hoặc bộ nhớ. Cú pháp lệnh: MOV Destination, Source Di chuyển Đích đến , Nguồn Ví dụ: Mov AX,Word01 Giá trị có trong thanh ghi AX sẽ đ•ợc thay thế bởi giá trị đ•ợc l•u trong vị trí bộ nhớ Word01. Giá trị trong Word01 không bị thay đổi. Mov AX,BX AX nhận giá trị từ BX, Giá trị của BX không thay đổi. Mov AX, 'A'. Giá trị mã ASCII 041h sẽ đ•ợc di chuyển vào thanh ghi AX. Cụ thể là vào Byte cao của AX (AH). + Lệnh XCHG: Đ•ợc sử dụng để tráo đổi giá trị giữa 2 thanh ghi, giữa thanh ghi và bộ nhớ. Cú pháp lệnh: XCHG Destination, Source Tráo đổi Đích đến , Nguồn Ví dụ: XCHG AX,BX This document is created with the unregistered version of Document2PDF Pilot. Đổi vị trí các giá trị của AX và BX lẫn nhau, AX sẽ l•u trữ giá trị của BX và ng•ợc lại. XCHG AX,Word01 Tráo đổi giá trị của AX và giá trị tại vị trí bộ nhớ Word01. + Điều cấm trong khi sử dụng 2 lệnh trên: Vì các lý do về kỹ thuật, có một số các quy định mà ng•ời lập trình phải tuân theo. Ví dụ minh hoạ: Mov Word01,Word02 ; Không hợp lệ Phát biểu lệnh trên là không hợp lệ, không đ•ợc phép di chuyển dữ liệu trực tiếp từ vị trí bộ nhớ này sang vị trí bộ nhớ khác. Để có thể làm đ•ợc việc trên ta phải thay đổi câu lệnh nh• sau: Mov AX,Word02 Mov Word02,AX Các kết hợp hợp lệ giữa các toán hạng trong 2 lệnh trên: Destination Operand Source Operand General Register Segment Register Memory Location Constant General Reg Yes Yes Yes No Segment Reg Yes No Yes No Mem Location Yes Yes No No Constant Yes No Yes No Destination Operand Source Operand General Register Memory Location General Register Yes Yes Memory Location Yes No - Lệnh ADD, SUB, INC và DEC + Lệnh ADD và lệnh SUB đ•ợc sử dụng để thực hiện các phép tính cộng, trừ giá trị giữa 2 thanh ghi, Giữa thanh ghi và bộ nhớ hoặc để cộng (trừ) một số vào (ra) một thanh ghi hoặc bộ nhớ. Cú pháp lệnh: ADD Destination, Source SUB Destination, Source Ví dụ: ADD Word01,AX Cộng giá trị có trong AX vào Word01. Kết quả l•u trong Word01. SUB AX,DX Giá trị của thanh ghi DX sẽ bị trừ đi giá trị của thanh ghi AX, Kết quả đ•ợc l•u trong thanh ghi AX, Giá trị của thanh ghi DX đ•ợc giữ nguyên. ADD BL,5 Cộng 5 vào giá trị đã có sẵn trong thanh ghi BL. + Quy tắc hợp lệ: Destination Operand Source Operand General Register Memory Location General Register Yes Yes Memory Location Yes No This document is created with the unregistered version of Document2PDF Pilot. Constant Yes Yes Cộng hoặc trừ trực tiếp giữa 2 vị trí của bộ nhớ là không hợp lệ. Ví dụ: ADD Byte01,Byte02 ;Không hợp lệ Giải pháp Mov AL,Byte02 Add Byte01,AL + Lệnh INC và lệnh DEC đ•ợc sử dụng để cộng thêm 1 hoặc bớt đi 1 từ thanh ghi hoặc tại một vị trí ô nhớ nào đó. Cú pháp lệnh: INC Destination DEC Destination Ví dụ: Inc Word01 Cộng thêm một vào Word01. Dec Byte01 Trừ Byte01 đi 1. - Lệnh NEG: Lệnh NEG đ•ợc sử dụng để thay đổi dấu của giá trị. Cú pháp lệnh: NEG Destination Ví dụ: Neg BX Chuyển đổi giá trị của BX thành số âm. - Tính t•ơng thích giữa các toán hạng. Các toán hang trong một câu lệnh 2 toán hạng phải cùng một kiểu, cả hai đều phải là kiểu Byte hoặc kiểu Word Ví dụ: Mov AX,Byte01 không hợp lệ. Tuy nhiên ch•ơng trình có thể chấp nhận kiểu sau: Mov AL, 'A' ;hoặc Mov AX, 'A' 5- Mô tả lệnh với ngôn ngữ Phát biểu Dịch lệnh Mô tả B = A Mov AX,A Di chuyển A vào thanh ghi AX Mov AX,5 Di chuyển 5 vào thanh ghi AX Sub AX,A AX chứa giá trị 5 - A Mov A,AX Di chuyển giá trị trên vào A Neg A A = -A Add A,5 A = 5 - A Mov AX,B AX nhận giá trị B Sub AX,A AX nhận giá trị B - A Sub AX,A AX nhận giá trị B - 2*A Mov A,AX Di chuyển kết quả vào A 6- Cấu trúc ch•ơng trình. This document is created with the unregistered version of Document2PDF Pilot. Chúng ta biết rằng, một ch•ơng trình ngôn ngữ máy tính bao gồm Mã ch•ơng trình, dữ liệu và ngăn xếp. Mỗi một thành phần đều chiếm một phần trong một đoạn nào đó cua bộ nhớ máy tính. Ch•ơng trình của ngôn ngữ assembly cũng đ•ợc tổ chức t•ơng tự. Mã ch•ơng trình, dữ liệu và ngăn xếp ch•ơng trình có cấu trúc nh• một đoạn ch•ơng trình. Mỗi một thành phần đều đ•ợc biên dịch và nạp vào từng đoạn của bộ nhớ. - Tổ chức mô hình bộ nhớ: Kích th•ớc của mã ch•ơng trình và dữ liệu ch•ơng trình có thể đ•ợc xác định quan mô hình tổ chức bộ nhớ thông qua việc sử dụng từ khoá ".MODEL". Cú pháp: .Model Memory_model Các cách tổ chức mô hình bộ nhớ th•ờng dùng là: Small, Medium,Compact và Large theo nh• mô tả trong bảng sau: Model Mô tả Small Mã ch•ơng trình (Code) nằm trong một đoạn (Segment), Dữ liệu (Data) nằm trong một đoạn khác Medium Mã ch•ơng trình (Code) nằm trong nhiều đoạn, Dữ liệu (Data) nằm trong một đoạn khác. Compact Mã ch•ơng trình (Code) nằm trong một đoạn (Segment), Dữ liệu (Data) nằm trong nhiều đoạn khác. Large Mã ch•ơng trình (Code) nằm trong nhiều đoạn (Segment), Dữ liệu (Data) nằm trong nhiều đoạn khác. Nh•ng không có mảng nào lớn hơn 64 KB. Huge Mã ch•ơng trình (Code) nằm trong nhiều đoạn (Segment), Dữ liệu (Data) nằm trong nhiều đoạn khác. Nh•ng có mảng có thể lớn hơn 64 KB. - Đoạn dữ liệu (Data Segment): Đoạn dữ liệu của ch•ơng trình chứa tất cả các khai báo biến ch•ơng trình. Để khai báo đoạn dữ liệu trong ch•ơng trình, ta dung từ khoá ".DATA". Ví dụ minh hoạ: .DATA Word01 DW 2 Word02 DW 5 MSG DB 'The First Message' Mask EQU 10010010b - Đoạn ngăn xếp (Stack Segment) Mục đích của việc khai báo Stack Segment trong ch•ơng trình là để tổ chức một khối bộ nhớ. Cú pháp khai báo nh• sau: .STACK Size Size là kích th•ớc của Stack tính theo Byte. Ví dụ: .STACK 100h Giới hạn 100h byte cho vùng stack. - Đoạn mã (Code Segment). Đoạn này chứa các lệnh của ch•ơng trình (Program Instructions). Cú pháp khai báo: .CODE Name Chú ý: Không cần phải khai báo tên trong Model Small. Trong đoạn này, các lệnh có thể đ•ợc tổ chức thành các đoạn nhỏ gọi là Procedure. Cách định nghĩa Procedure nh• sau This document is created with the unregistered version of Document2PDF Pilot. Name PROC ; Bắt đầu Procedure ; Mã ch•ơng trình Name ENDP ; Kết thúc Procedure Ví dụ về khai báo định nghĩa Code Segment .CODE MAIN PROC ; Bắt đầu Procedure ; Lệnh chính của Procedure MAIN ENDP ; Kết thúc Procedure ; Procedure khác 7- Ghép nối ch•ơng trình Ví dụ sau mô tả cách tổ chức một ch•ơng trình: .Model Small .Stack 100h .Data ; Khai báo dữ liệu .Code Main Proc ; Các câu lệnh Main Endp ; Các procedure khác End Main Dòng cuối cùng của ch•ơng trình phải có từ khoá END theo sau tên của Procedure. 8- Viết ch•ơng trình và chạy ch•ơng trình. - Các câu lệnh vào ra. Ta đã biết, CPU muốn liên lạc đ•ợc với các thiết bị ngoại vi thông qua các thanh ghi vào ra đ•ợc gọi là các cổng vào ra. Có hai lệnh IN và OUT cho phép ta truy xuất trực tiếp các cổng. Các câu lệnh này đ•ợc sử dụng cần thiết khi cần truy xuất các cổng một cách nhanh chóng nh• các ch•ơng trình Game. Tuy nhiên, hầu hết các ch•ơng trình ứng dụng không sử dụng các lệnh vào ra bởi vì các cổng vào ra khac biệt nhau giữa các hệ thống máy tính, tốt nhất là sử dụng các ch•ơng trình con của nhà sản xuất. Có 2 kiểu trình phục vụ các công tác vào ra, đó là BIOS và DOS. Ch•ơng trình BIOS đ•ợc chứa trong BIOS ROM và có thể liên lạc trực tiếp với các cổng vào ra. Các tiểu trình DOS có thể thực hiện đ•ợc rất nhiều các công việc phức tạp ví dụ nh• in chuỗi ký tự, mặc dù các công việc đều thông qua các tiểu trình của BIOS. - Lệnh INT Lệnh INT (interrupt) đ•ợc sử dụng để giải quyết các công việc liên quan đến các tiểu trình DOS và BIOS Cú pháp: INT Interrupt_Number Interrupt_Numberlà số hiệu để xác định ngắt. Ví dụ Int 16h liên quan đến tiểu trình điều khiển bàn phím. + Int 21h: Đ•ợc sử dụng cho rất nhiều chức năng của DOS. Một chức năng đặc biệt là thay đổi các số hiệu chức năng của thanh ghi AH. Các chức năng nh• sau: This document is created with the unregistered version of Document2PDF Pilot. Số hiệu chức năng Tiểu trình 1 Nhập 1 phím 2 Xuất một ký tự đơn 3 Xuất chuỗi ký tự Chức năng Int21h nhập một giá trị vào một thanh ghi nào đó và trả kết quả ra thanh ghi khác. D•ới đây là mô tả các chức năng: Chức năng 01 Nhập một phím Input AH = 1 Output AL = mã ASCII nếu một phím đ•ợc nhấn = 0 Nếu không có phím đ•ợc nhấn. Để giải quyết vấn đề, viết các lệnh nh• sau: Mov AH,1 ; Nhập chức năng phím Int 21h ; Nhập mã ASCII vào AL Bộ xử lý sẽ chờ cho đến khi ng•ời dùng nhấn một phím. Nếu một phím đ•ợc nhấn, thanh ghi AL sẽ nhận đ•ợc mã ASCII của phím đó. Ký tự đó sẽ hiện lên màn hình. Nếu có bất kỳ một phím nào khác đ•ợc nhấn, ví dụ nh• các phím mũi tên, Fx hoặc t•ơng tự, thanh ghi AL sẽ nhận giá trị 0. Các lệnh tiếp theo int21h sẽ đ•ợc thực hiện tiếp. Chức năng 1 của int 21h không có dấu hiệu để ng•ời dùng có thể nhập dữ liệu, vậy ta có thể sử dụng Chức năng 2 nh• sau: Input AH =2 DH = mã ASCII hiện ký tự hoặc ký tự điều khiển Output AL = mã ASCII hiện ký tự hoặc ký tự điều khiển Ví dụ: Mov AH,2 Mov DL, "?" Int 21h Hiện dấu ? lên màn hình và hiện dấu nhắc lệnh để chờ ng•ời dùng nhập phím khác. Chức năng 2 còn có thể đ•ợc sử dụng cho các chức năng điều khiển. Nếu thanhghi DL nhận mã ASCII của các ký tự điều khiển, Int 21h sẽ hiển thị ký tự điều khiển đó. Một số các ký tự điều khiển tiêu biểu nh• sau: Mã ASCII (Hex) Ký hiệu Chức năng 7 Bel Phát tiếng beep từ loa PC. 8 BS Phím lùi. 9 HT Phím Tab. A LF Xuống hàng. D CR Đầu dòng mới. Trong khi xử lý, thanh ghi AL sẽ l•u giữ mã ASCII của ký tự điều khiển. - Ch•ơng trình đầu tiên: Một ch•ơng trình hoàn chỉnh với các chú thích để giải thích từng câu lệnh, chú ý rằng các lời giải thích trong ch•ơng trình thật sẽ không sử dụng đ•ợc tiếng Việt. Tên ch•ơng trình Prg01.asm This document is created with the unregistered version of Document2PDF Pilot. Title Prg01: Echo Program .Model Small .Stack 100h .Code Main Proc ;Hiển thị dấu nhắc lệnh Mov AH,2 ;Chức năng hiển thị ký tự Mov DL,'?' ;Ký tự là dấu '?' Int 21h ;Gọi dịch vụ 21h hiển thị ký tự ;Nhập ký tự Mov AH,1 ;Chức năng đọc ký tự Int 21h ;Gọi dịch vụ 21h để nhập ký tự vào AL Mov BL,AL ;Ghi ký tự vào BL ;Xuống hàng mới Mov AH,2 ;Chức năng hiển thị ký tự Mov DL,0DH ;Con trỏ trở về đầu dòng Int 21h ;Xử lý việc đ•a con trỏ về đầu dòng Mov DL,0AH ;Xuống dòng mới Int 21h ;Xử lý xuống dòng mới ;Hiển thị ký tự Mov DL,BL ;Lấy ký tự l•u trong BL Int 21h ;Hiển thị ký tự trong thanh ghi DL ;Quay trở lại nền DOS Mov AH,4CH ;Gọi hàm thoát về DOS Int 21h ;Thoát về DOS Main Endp ;Kết thúc Procedure End Main ;Kết thúc ch•ơng trình - Tạo ch•ơng trình và chạy ch•ơng trình: Có 4 b•ớc để tạo và chạy ch•ơng trình a- Sử dụng một ch•ơng trình soạn thảo text để tạo ch•ơng trình nguồn. b- Sử dụng ch•ơng trình dịch để tạo ra 1 file mã máy (Object File). c- Sử dụng ch•ơng trình Link để liên kết các ch•ơng trình liên kết tạo ra file chạy (Run File). d- Chạy ch•ơng trình. B•ớc 01: Tạo ch•ơng trình nguồn. Sử dụng ch•ơng trình soạn thảo text để tạo một file có tên Prg01 có nội dung nh• trên. File có đuôi là *.asm. B•ớc 02: Dịch ch•ơng trình Sử dụng ch•ơng trình Masm để dịch ch•ơng trình nguồn thành một file đối t•ợng có tên là PRG01.OBJ. Câu lệnh có thể là nh• sau: C:\>Masm PRG01; Ch•ơng trình sẽ kiểm tra lỗi của ch•ơng trình nguồn. Nếu có lỗi, ch•ơng trình sẽ báo lỗi cho ng•ời dùng biết. Ch•ơng trình sẽ dịch file PRG01.ASM thành file đối t•ợng có tên là PRG01.OBJ. Nên có dấu ; đằng sau câu lệnh.. Thông th•ờng, tên của file mới sẽ lấy mặc định là tên file cũ với đuôi là OBJ. File danh sách nguồn: File sanh sách nguồn (*.LST) là một file text hiển thị các dòng This document is created with the unregistered version of Document2PDF Pilot. lệnh và các lệnh mã máy t•ơng đ•ơng và một số thông tin khác về ch•ơng trình. File này rất hữu dụng cho công việc gỡ rối ch•ơng trình. File tham khảo chéo (Cross-Reference File): File có phần mở rộng (*.CRF) liệt kê tên hiển thị trong ch•ơng trình, hữu dụng khi xác định các biến (Variable), các nhãn (Label) trong một ch•ơng trình lớn. B•ớc 03: Liên kết ch•ơng trình: File OBJ là file chứa mã máy nh•ng không thể xử lý đ•ợc bởi vì nó không phải là định dạng của file chạy. Ch•ơng trình Link sẽ liên kết các file Obj thành file có thể xử lý đ•ợc (.exe file). File dạng này có thể đ•ợc nạp vào bộ nhớ và có thể chạy. Cách liên kết ch•ơng trình C:\>Link PRG01 B•ớc 04: Chạy ch•ơng trình. Khi liên kết xong, ta sẽ có file PRG01.EXE. Ta có thể chạy file này trực tiếp từ dấu nhắc lệnh của DOS. - Một ch•ơng trình khác. Ch•ơng trình này đ•ợc viết với mục đích hiển thị một chuỗi ký tự. Để thực hiện ch•ơng trình này ta cần biết thêm một số vấn đề khác. + Hàm 9 của ngắt 21h Hiển thị chuỗi ký tự. Input DX=Địa chỉ độ dời của chuỗi. Chuỗi phải đ•ợc kết thúc bằng ký tự '$' + Một chuỗi có thể khởi tạo trong bộ nhớ nh• sau: MSG DB 'Hello!$' + Lệnh LEA (Load Affective Address). Cú pháp: Lea Destination,Source Lệnh này copy địa chỉ độ dời (Offset) vào thanh ghi công dụng chung. Ví dụ: Lea DX,MSG Nạp địa chỉ độ dời của biến MSG vào thanh ghi DX Tuy nhiên để DOS có thể giải quyết đ•ợc các vấn đề khi ta chạy và dịch ch•ơng trình, ch•ơng trình cần phải thêm 2 câu lệnh sau: Mov AX,@Data Mov DS,AX. @Data là tên của đoạn dữ liệu đ•ợc định nghĩa bởi th• viện .DTA. Ch•ơng trình dịch sẽ dịch tên @Data thành số hiệu đoạn (Segment). 2 lệnh trên rất cần thiết bởi vì số hiệu của Segment có thể không di chuyển trực tiếp đến thanh ghi Segment. Khi thanh ghi DS đ•ợc khởi tạo, ta có thể in dòng chữ "Hello!" bằng cách đặt địa chỉ vào thanh ghi DX và gọi ngắt 21h của DOS. Lea DX,MSG ;Lấy thông tin Mov AH,9 ;Hàm hiện chuỗi ký tự Int 21h ; Gọi ngắt 21h của DOS để thực hiện. Toàn bộ ch•ơng trình nh• sau: Ch•ơng trình PRG02.Asm This document is created with the unregistered version of Document2PDF Pilot. Title PRG02 Print String Program .Model Small .Stack 100h .Data MSG DB 'Hello!$' ;Khai báo biến MSG .Code Main Proc ; Khởi tạo thanh ghi DS Mov AX,@Data Mov DS,AX ; Khởi tạo thanh ghi DS ;Hiện thông điệp Lea DX,MSG ;Nạp thông điệp Mov AH,9 ;Chức năng hiện chuỗi ký tự Int 21h ;Gọi ngắt DOS 21h ;Trở về DOS Mov AH,4CH Int 21h Main Endp End Main Ch•ơng trình thêm: Đổi ký tự th•ờng thành ký tự in hoa. III- Kết luận. Chúng tôi đã giới thiệu cho các bạn một số cách sử dụng lệnh đúng cú pháp và đúng quy tắc cũng nh• cách thức để các bạn có thể tạo đ•ợc một ch•ơng trìnhcó thể chạy độc lập trên nền hệ điều hành. Khi viết một ch•ơng trình đầy đủ, các bạn cần chú ý một số vấn đề nh• sau. Một số khai báo cơ bản: Khai báo bộ nhớ qua từ khoá Model .Small .Medium .Compact .Large .Huge Các kiểu dữ liệu cơ bản DB, DW, DD, DQ, DT Các câu lệnh cơ bản: MOV, XCHG, ADD, SUB, INC, DEC, NEG, INT, LEA. Cách sử dụng Ngắt 21h (Int 21h) của DOS. Function 1: Đọc ký tự từ bàn phím Function 2:Hiện ký tự Function 9: Hiện chuỗi ký tự Các b•ớc để tạo một ch•ơng trình chạy độc lập có đuôi là *.EXE Sử dụng ch•ơng trình MASM để tạo ch•ơng trình chạy. a- Sử dụng một ch•ơng trình soạn thảo text để tạo ch•ơng trình nguồn. b- Sử dụng ch•ơng trình dịch để tạo ra 1 file mã máy (Object File). This document is created with the unregistered version of Document2PDF Pilot. c- Sử dụng ch•ơng trình Link để liên kết các ch•ơng trình liên kết tạo ra file chạy (Run File). d- Chạy ch•ơng trình. Gõ tên File tại dấu nhắc DOS. Một số ch•ơng trình mẫu: PRG01.ASM, PRG02.ASM. This document is created with the unregistered version of Document2PDF Pilot. Chýừng 4: Trạng thái bộ xử lý và các loại cờ. I- Giới thiệu các cờ: Một đặc điểm đặc biệt phân biệt giữa computer và các laọi máy móc khác là khả năng quyết định công việc. Các mạch điện trong CPU có thể thực hiện đ•ợc các quyết định đơn giản dựa vào trạng thái hiện tại của bộ xử lý. Các trạng thái đ•ợc biểu hiện bởi các cờ trong thanh ghi cờ của CPU. Hình minh hoạ sau cho ta thấy cấu trúc của thanh ghi cờ (Flag Register): 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF Tại các Bit 0, 2, 4, 7, 11 là các cờ trạng thái. Tại các Bit 8,9,10 là các cờ điều khiển. Các bảng sau sẽ mô tả các loại cờ và các đặc điểm của chúng: Các cờ trạng thái: Bit Tên cờ Ký hiệu Mô tả 0 Carry Flag CF Mô tả trạng thái dữ liệu đ•ợc nhớ để dành thêm vào bit sau 2 Parity Flag PF Cờ trạng thái để kiểm tra chẵn lẻ các bits 4 Auxilary Carry Flag AF Đ•ợc sử dụng để mô tả trạng thái nhớ và trạng thái m•ợn 6 Zero Flag ZF Mô tả trạng thái dấu của chữ số +/- 11 Overflow Flag OF Mô tả trạng thái giới hạn của số. Các cờ điều khiển: Bit Tên cờ Ký hiệu Mô tả 8 Trap Flag TF Cờ bẫy 9 Interrupt Flag IF Cờ điều khiển ngắt 10 Direction Flag DF Cờ dẫn h•ớng II- Mô tả trạng thái của bộ xử lý. 1- Trạng thái tràn (Overflow) Điều cơ bản của trạng thái tràn số liên quan đến thực tế rằng giới hạn của các số có thể hiển thị trong giới hạn của Computer. Nh• đã giải thích ở các phần tr•ớc, giới hạn của một số nguyên có dấu có thể biểu diễn đ•ợc bằng Word 16 bits là -32768 32767. Với số nguyên không dấu là 0 65535. Nếu kết quả tính toán v•ợt quá giới hạn trên, trạng thái tràn sẽ xảy ra và kết quả sẽ bị cắt bớt để có thể biểu diễn đ•ợc trong thanh ghi, do đó kết quả sẽ là sai. Để có thể hiểu rõ hơn, ta có thể tham khảo ví dụ sau: Số có dấu hoặc không dấu là tùy thao quy định. Khi ta thực hiện một phép tính số học, có thể là phép cộng (+), có thể có 4 tr•ờng hợp xảy ra. + Không tràn số. + Tràn số vì dấu (+/-). + Tràn số không dấu. + Tràn số cả tr•ờng hợp có dấu và không dấu. Ví dụ sau là ví dụ tràn số không dấu. Giả định thanh ghi AX chứa giá trị FFFFh, Thanh ghi BX chứa giá trị 0001h, Sử dụng lệnh ADD để cộng 2 giá trị trên. This document is created with the unregistered version of Document2PDF Pilot. ADD AX,BX 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Kết quả đúng của phép tính trên là: FFFFh + 0001h = 100000h 65536 (V•ợt quá giới hạn của số nguyên dùng cho Word 16 bit). Kết quả đ•ợc l•u trong thanh ghi AX là 0000h (Số 1 là số nhớ và đ•ợc ghi trong cờ Carry). Vậy ta sẽ nhận đ•ợc kết quả sai. Tuy nhiên kết quả sẽ là đúng trong tr•ờng hợp số có dấu. Giải thích nh• sau: Ta có FFFFh = -1 0001h = 1 FFFFh + 0001h = 0 Vậy kết quả l•u trong AX là 0000h sẽ là đúng Tràn có dấu không xảy ra. Một ví dụ khác về tràn số có dấu: AX và BX cùng chứa giá trị 7FFFh. ADD AX,BX 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 Kết quả là FFFEh Ta có 7FFFh = 32767 Vậy 7FFFh + 7FFFh = 32767 + 32767 = 65534. Kết quả này ngoài giới hạn của số có dấu. Kết quả đ•ợc diễn giải theo số có dấu là FFFEh = -2 Tình trạng tràn có dấu xảy ra. - Cách thức bộ xử lý biểu hiện trạng thái tràn.: Bộ xử lý sẽ thiết lập cờ OF = 1 với tràn số không dấu, CF = 1 với tràn số có dấu. Điều này sẽ giúp ch•ơng tình hoạt động chính xác. nếu không có hoạt dộng gí xảy ra ngay lúc đó, các câu lệnh khác phía sau sẽ làm cho cờ tràn sẽ đ•ợc tắt OF = 0. Để xác định trạng thái tràn số, bộ xử lý không dịch kết quả là số có dấu hoặc không dấu. Hành động là sẽ sử dụng cả 2 cách thông dịch cho mỗi phép toán và bật các cờ CF và OF cho trạng thái tràn số không dấu và tràn số có dấu. Nếu Tính toán là số có dấu, chỉ có OF đ•ợc để ý và CF sẽ bị lờ đi, Ng•ợc lại, CF sẽ đ•ợc để ý và OF sẽ bị lờ đi. - Cách thức bộ xử lý xác định trạng thái tràn. Có thể có nhiều lệnh làm xảy ra trạng thái tràn số nh•ng để đơn giản vấn đề, ta chỉ giới hạn ở các lệnh cộng và trừ. + Tràn số không dấu: Trong phép toán cộng, Tràn số không dấu xảy ra khi có số nhớ trên Bit MSB (Most Significant Bit). Điều đó có nghĩa là kết quả đúng lớn hơn số không có dấu. ví dụ nh• FFFFh cho 1 Word và FFh cho 1 Byte. Trong phép trừ, Tràn số không dấu xảy ra khi phải m•ợn thêm một số hạng từ MSB và kết quả sẽ phải nhỏ hơn 0. + Tràn số có dấu: Phép cộng các số cùng dấu, trạng thái tràn số xảy ra khi kết quả có dấu khác. Điều này xảy ra nh•

Các file đính kèm theo tài liệu này:

  • pdfComarch08_20050429_013838.pdf
Tài liệu liên quan