1. Trang chủ
  2. » Giáo án - Bài giảng

Cách sửa lỗi 200 trong Pascal

3 2,3K 8
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 3
Dung lượng 31,5 KB

Nội dung

C1: nếu cho mình là một lập trình viên Pro, hãy làm như sau: Trước khi tiến hành các bước sau, hãy lưu lại tập tin TURBO.TPL trong \BP\BIN để đề phòng mọi bất trắc. Bước 1: Sửa lại nội dung unit CRT Với một bản cài đầy đủ của Borland Pascal 7.0, bạn sẽ có thư mục \BP\CRT, trong đó có 2 tập tin CRT.ASM và CRT.PAS. Đầu tiên, hãy thay đổi nội dung CRT.ASM như sau (hãy bấm Ctrl Q-L và tìm từ DelayLoop và phần mã sau): ; Delay one timer tick or by CX iterationsDelayLoop: @@1: SUB AX,1 SBB DX,0 JC @@2 CMP BL,ES:[DI] JE @@1 @@2: RET trở thành: ; Delay one timer tick or by CX iterations DelayLoop: @@1: push ax ; bắt đầu các hàng chèn thêm push cx push dx mov ax,0 mov cx,1 mov dx,0 div cx ;với 10 lệnh div cx, DelayCount = 5F0h div cx; đủ cho bạn chạy với CPU có tốc độ < 8GHz div cx ; về mặt lý thuyết. div cx div cx div cx div cx div cx div cx div cx pop dx pop cx pop ax ; kết thúc các hàng chèn thêm SUB AX,1 SBB DX,0 JC @@2 CMP BL,ES:[DI] JE @@1 @@2: RET Như tôi có trình bày ở phần trên, các dòng chèn thêm không thực hiện bất cứ một lệnh gì mà chỉ đơn thuần là làm chậm vòng DelayLoop lại. Điều này không có nghĩa là đồng hồ hệ thống sẽ chậm lại mà chỉ đơn thuần làm chậm vòng DelayLoop và giảm số lần lặp xuống. Lệnh nguyên thủy SUB và SBB của vòng lặp được giữ nguyên, các lệnh DIV (sau khi lưu nội dung thanh ghi AX, CX, DX bằng loạt lệnh PUSH) nhằm làm chậm hơn vòng lặp. Sở dĩ tôi chọn các lệnh này là vì DIV là lệnh tiêu tốn nhiều clock của CPU (lệnh mất nhiều thời gian thực hiện). Bạn có thể thêm số lần DIV nếu cảm thấy cần thiết. Cuối cùng, loạt lệnh POP hoàn trả lại nội dung các thanh ghi. Bước 2. Chép tập tin SE.ASM từ thư mục \BP\SYS vào thư mục \BP\CRT. Tập tin SE.ASM chứa một số định nghĩa cho quá trình dịch các Unit của Borland (hay Turbo) Pascal. Bước 3. Tiến hành dịch CRT.ASM bằng lệnh: \BP\BIN\TASM CRT.ASM Máy sẽ phát ra một vài cảnh báo về cách sử dụng tên biến. Cứ "nhắm mắt làm ngơ", chẳng có gì nghiêm trọng đâu. Bước 4. Chạy Borland Pascal và tiến hành dịch (bấm F9) \BP\CRT\CRT.PAS để tạo ra CRT.TPU. Chép CRT.TPU vào thư mục \BP\BIN. Bước 5. Chuyển thư mục hiện thời qua \BP\BIN Xóa unit CRT trong TURBO.TPL bằng lệnh: TPUMOVER TURBO.TPL -CRT Sau đó, đưa unit CRT mới sửa vào TURBO.TPL TPUMOVER TURBO.TPL +CRT TURBO.TPL đã sẵn sàng. Hãy khởi động lại Borland Pascal. Hy vọng rằng mọi hàm của bạn đều được thực hiện một cách chính xác và Turbo Pascal sẽ chẳng còn phát ra những thông báo lỗi khó chịu "Run time error 200" khi bạn sử dụng unit CRT nữa. Giải pháp cho các chương trình Pascal đã biên dịch nhưng không còn source Chắc rằng trong số các chương trình bạn đã biên dịch bằng Borland Pascal 7, một số chương trình sử dụng unit CRT cũng sẽ gặp phải lỗi Division Error kể trên. Nếu các bạn còn giữ source, biên dịch lại chương trình với unit TURBO.TPL đã hiệu chỉnh không phải là "chuyện lớn". Thế nhưng phải làm thế nào nếu bạn không còn hay không có source các chương trình trên. Để ý rằng do chương trình EXE đã được dịch, việc thay đổi vòng lặp DelayLoop để không ảnh hưởng tới các phần khác của chương trình là không thực hiện được. Do đó, chúng ta cần thay đổi trực tiếp đoạn mã lệnh gây lỗi. Giải pháp tôi xin đề cử tới các bạn là thay đoạn lệnh: XXXX:008e: mov CX,55 XXXX:0091: div CX bằng một lệnh đơn giản: mov AX,0FFFFh vì FFFFh là giá trị tối đa mà DelayCount (biến dạng word 2 byte) có thể nhận được. Tuy nhiên, để không làm biến đổi địa chỉ các phần khác, bạn nhớ đặt thêm 1 lệnh 2 byte trước lệnh move này (do 2 lệnh nguyên thủy chiếm 5 byte bộ nhớ còn lệnh mov AX,0FFFFh chỉ chiếm 3 byte. Giải pháp này dẫn tới việc nếu bạn dùng hàm delay, máy tính sẽ chờ ít hơn (nhanh hơn) so với thời gian bạn yêu cầu, tuy nhiên trong đa số các trường hợp, điều này không dẫn tới hậu quả gì nghiêm trọng. Để tránh sự phiền hà khi tìm kiếm và thay đổi phần mã gây lỗi, tôi có kèm thêm chương trình PATCH.EXE (có thể chép tại Tòa Soạn PCW). Chương trình này sẽ tự động thực hiện việc thay đổi đoạn mã kể trên. Chỉ có đôi điều bạn cần lưu ý: 1. Chỉ dùng PATCH với các chương trình phát sinh lỗi khi chạy như kể trên. 2. Hãy lưu file nguyên thủy trước khi thực hiện thay đổi. . TURBO.TPL trong BPBIN để đề phòng mọi bất trắc. Bước 1: Sửa lại nội dung unit CRT Với một bản cài đầy đủ của Borland Pascal 7.0, bạn sẽ có thư mục BPCRT, trong. lại Borland Pascal. Hy vọng rằng mọi hàm của bạn đều được thực hiện một cách chính xác và Turbo Pascal sẽ chẳng còn phát ra những thông báo lỗi khó chịu

Ngày đăng: 26/09/2013, 11:10

TỪ KHÓA LIÊN QUAN

w