Tại sao bạn sử dụng bitmap? Nó sẽ không được tốt hơn để kiểm tra tất cả những sự kiện đó với một lệnh STTNI duy nhất và sau đó sử dụng chỉ số trả về để xử lý sự kiện trả về (nếu có)?
(chỉnh sửa) hãy để tôi cố gắng thể hữu ích hơn ...
(Tôi sẽ giả sử bạn đang sử dụng chuỗi null chấm dứt các ký tự 8-bit. Hãy cho tôi biết nếu đó không phải là trường hợp.)
Tôi nghĩ bạn nên đặt dấu phân cách, dòng mới, báo giá và thoát vào một thanh ghi đơn (dưới dạng chuỗi bị hủy) và sử dụng PCMPISTRI thay cho PCMPISTRM bằng mỗi giá trị. Đối với từ kiểm soát bạn sẽ muốn chỉ ra: byte chưa ký, bằng bất kỳ, cực dương, ít nhất. (Chắc chắn là tôi có quyền đó.)
Sau đó, bạn có thể sử dụng JA để kiểm tra đồng thời xem có bất kỳ ký tự đặc biệt nào bị trúng hay kết thúc chuỗi. Nếu vậy, thoát khỏi vòng lặp để đối phó với nó. Nếu không, hãy thêm ECX vào con trỏ xmm2/m128 và quay trở lại PCMPISTRI.
Hướng dẫn mã đầu tiên để xử lý "lần truy cập" là thêm ECX vào con trỏ xmm2/m128, sau đó xử lý từng khả năng lần lượt. Tôi đề nghị đặt hàng chúng từ nhiều khả năng ít nhất.
Vì vậy, asm nên kết thúc tìm kiếm một cái gì đó như:
XOR ECX, ECX
TAG1:
ADD EAX, ECX
PCMPISTRI XMM1, [EAX], 0x0 ; also writes ECX = index
JA TAG1
ADD EAX, ECX
CMP BYTE PTR[EAX], "delimiter"
JE "handle delimiter"
CMP BYTE PTR[EAX], "newline"
JE "handle newline"
CMP BYTE PTR[EAX], "quotation"
JE "handle quotation"
CMP BYTE PTR[EAX], "escape"
JE "handle escape"
CMP BYTE PTR[EAX], "end of string"
JE "handle end of string"
tôi sẽ cho bạn quyết định những gì để tốt nhất cho delimiters thử nghiệm là. :)
Khi tôi đã phát triển các hướng dẫn tôi đã sử dụng để có thể nhận được trình biên dịch tạo mã asm ở trên bằng cách sử dụng nội tại. Nó đã được một thời gian kể từ khi tôi đã làm việc với các hướng dẫn mặc dù vậy không chắc chắn nếu trình biên dịch trung bình sẽ làm tốt hay không. (sẽ rất thú vị khi nghe kết quả bạn nhận được.)
Bằng cách này, các phiên bản mặt nạ của các hướng dẫn làm có tất cả các loại sử dụng, họ chỉ cần không phải là lựa chọn tốt nhất cho việc tìm kiếm đầu tiên hoặc cuối cùng của một cái gì đó từ chữ "I" phiên bản của các hướng dẫn sẽ tính toán bù đắp cho bạn. Các phiên bản mặt nạ là tốt cho đếm hoặc chỉ xử lý các mặt hàng nhất định trong số những thứ khác kỳ lạ hơn. ngay bây giờ tôi đang sử dụng chúng để đếm A, C G, và T trong chuỗi DNA.
Lưu ý rằng ký tự ngoặc kép có khả năng được thoát ra, điều này có thể khó xử lý với cách tiếp cận bạn phác thảo. –
Từ một câu trả lời chỉ có liên kết đã bị xóa: Có triển khai hoạt động (nhưng không sẵn sàng sản xuất) trên [github: 'csvmonkey'] (https://github.com/dw/csvmonkey). Thư viện chỉ có tiêu đề C++. Nó nhanh nhưng "Bây giờ nó chủ yếu là mã đồ chơi." Có thể là một điểm khởi đầu tốt, ngoại trừ không có giấy phép được liệt kê. –