1. Trang chủ
  2. » Cao đẳng - Đại học

tin7 tin học 7 bùi ngọc ẩn thư viện tư liệu giáo dục

3 8 0

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

THÔNG TIN TÀI LIỆU

Để ý 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 đổ[r]

(1)

C1: cho lập trình viên Pro, làm sau:

Trước tiến hành bước sau, lưu lại tập tin TURBO.TPL \BP\BIN để đề phòng bất trắc

Bước 1: Sửa lại nội dung unit CRT

Với cài đầy đủ Borland Pascal 7.0, bạn có thư mục \BP\CRT, có tập tin CRT.ASM CRT.PAS Đầu tiên, thay đổi nội dung CRT.ASM sau (hãy bấm Ctrl Q-L tìm từ DelayLoop 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 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 ; mặt lý thuyết div cx

div cx div cx div cx div cx div cx div cx pop dx pop cx

(2)

SUB AX,1 SBB DX,0 JC @@2

CMP BL,ES:[DI] JE @@1

@@2: RET

Như có trình bày phần trên, dịng chèn thêm khơng thực lệnh mà đơn làm chậm vòng DelayLoop lại Điều khơng có nghĩa đồng hồ hệ thống chậm lại mà đơn làm chậm vòng DelayLoop giảm số lần lặp xuống

Lệnh nguyên thủy SUB SBB vòng lặp giữ nguyên, lệnh DIV (sau lưu nội dung ghi AX, CX, DX loạt lệnh PUSH) nhằm làm chậm vòng lặp Sở dĩ tơi chọn lệnh DIV lệnh tiêu tốn nhiều clock CPU (lệnh nhiều thời gian thực hiện) Bạn thêm số lần DIV 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 ghi

Bước 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 số định nghĩa cho trình dịch Unit Borland (hay Turbo) Pascal

Bước Tiến hành dịch CRT.ASM lệnh: \BP\BIN\TASM CRT.ASM

Máy phát vài cảnh báo cách sử dụng tên biến Cứ "nhắm mắt làm ngơ", chẳng có nghiêm trọng đâu

Bước Chạy Borland Pascal tiến hành dịch (bấm F9) \BP\CRT\CRT.PAS để tạo CRT.TPU Chép CRT.TPU vào thư mục \BP\BIN

Bước Chuyển thư mục thời qua \BP\BIN Xóa unit CRT TURBO.TPL lệnh: TPUMOVER TURBO.TPL -CRT

(3)

TURBO.TPL sẵn sàng Hãy khởi động lại Borland Pascal Hy vọng hàm bạn thực cách xác Turbo Pascal chẳng cịn phát thơng báo lỗi khó chịu "Run time error 200" bạn sử dụng unit CRT Giải pháp cho chương trình Pascal biên dịch khơng cịn source

Chắc số chương trình bạn biên dịch Borland Pascal 7, số chương trình sử dụng unit CRT gặp phải lỗi Division Error kể Nếu bạn giữ source, biên dịch lại chương trình với unit TURBO.TPL hiệu chỉnh "chuyện lớn" Thế phải làm bạn khơng cịn hay khơng có source chương trình

Để ý chương trình EXE dịch, việc thay đổi vịng lặp DelayLoop để khơng ảnh hưởng tới phần khác chương trình khơng thực Do đó, cần thay đổi trực tiếp đoạn mã lệnh gây lỗi

Giải pháp xin đề cử tới bạn thay đoạn lệnh: XXXX:008e: mov CX,55

XXXX:0091: div CX

bằng lệnh đơn giản: mov AX,0FFFFh FFFFh giá trị tối đa mà DelayCount (biến dạng word byte) nhận Tuy nhiên, để không làm biến đổi địa phần khác, bạn nhớ đặt thêm lệnh byte trước lệnh move (do lệnh nguyên thủy chiếm byte nhớ lệnh mov AX,0FFFFh chiếm byte Giải pháp dẫn tới việc bạn dùng hàm delay, máy tính chờ (nhanh hơn) so với thời gian bạn yêu cầu, nhiên đa số trường hợp, điều không dẫn tới hậu nghiêm trọng Để tránh phiền hà tìm kiếm 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ịa Soạn PCW) Chương trình tự động thực việc thay đổi đoạn mã kể Chỉ có đơi điều bạn cần lưu ý:

Ngày đăng: 01/04/2021, 19:18

Xem thêm:

w