Dùng cld trước hàm WriteConsole()?

Mình tìm thấy trong hàm WriteString() của source code thư viện irvine mấy dòng này:

cld	; must do this before WriteConsole
INVOKE WriteConsole,
    consoleOutHandle,     	; console output handle
    edx,	; points to string
    eax,	; string length
    OFFSET bytesWritten,  	; returns number of bytes written
    0

Tại sao phải dùng cld trước WriteConsole() ?

cld = clear DF = gán direction flag bằng 0

Vì khi DF flag bật lên 1, hệ thống sẽ xử lý chuỗi (ESI và EDI) từ địa chỉ cao tới thấp.
Và có thể hàm WriteConsole xử lý theo kiểu từ địa chỉ thấp tới cao, nên yêu cầu bạn phải clear DF flag trước khi gọi hàm.

4 Likes

Cho mình hỏi thêm một câu hỏi nhỏ: Gọi hàm sẽ không làm mất giá trị của DF(đó là lý do WriteConsole() yêu cầu dùng cld trước khi gọi).Vậy việc gọi hàm có làm mất giá trị của các status flag trong FLAGS không?

Tùy hàm tính toán ra sao mà FLAGS sẽ thay đổi.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?