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

Chia sẻ bởi Đặng Thị Hằng | Ngày 14/10/2018 | 41

Chia sẻ tài liệu: Cách sửa lỗi 200 trong Pascal thuộc Tin học 8

Nội dung tài liệu:

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 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 đó 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 BPSYS vào thư mục BPCRT. 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: BPBINTASM 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) BPCRTCRT.PAS để tạo ra CRT.TPU. Chép CRT.TPU vào thư mục BPBIN. Bước 5. Chuyển thư mục hiện thời qua BPBIN 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
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Đặng Thị Hằng
Dung lượng: 31,50KB| Lượt tài: 0
Loại file: doc
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)