cuốn sách gpt4 ai đã làm

c - lắp ráp sâu

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 03:05:20 28 4
mua khóa gpt4 Nike

c Chức năng trong:

PHPAPI char *php_pcre_replace(char *regex, int Regex_len,
char *chủ đề, int chủ đề_len,
zval *replace_val, int is_callable_replace,
int *result_len, int limit, int *replace_count TSRMLS_DC)
{
pcre_cache_entry *pce; /* Đã biên dịch biểu thức chính quy */

/* Biên dịch biểu thức chính quy hoặc lấy nó từ bộ đệm */
if ((pce = pcre_get_compiled_regex_cache(regex,regex_len TSRMLS_CC)) == NULL) {
trả về NULL;
}

....
}

Lắp ráp của nó:

php5ts!php_pcre_replace:
1015db70 8b442408 mov eax,dword ptr [esp+8]
1015db74 8b4c2404 mov ecx,dword ptr [esp+4]
1015db78 56 đẩy esi
1015db79 8b74242c mov esi,dword ptr [esp+2Ch]
1015db7d 56 đẩy esi
1015db7e 50 đẩy eax
1015db7f 51 pushecx
1015db80 e8cbeaffff gọi php5ts!pcre_get_compiled_regex_cache (1015c650)
1015db85 83c40c thêm đặc biệt, 0Ch
1015db88 85c0 kiểm tra eax,eax
1015db8a 7502 jne php5ts!php_pcre_replace+0x1e (1015db8e)

php5ts!php_pcre_replace+0x1c:
1015db8c 5e pop esi
1015db8d c3 lại

gọi hàm cpcre_get_compiled_regex_cache(regex, regrec_len TSRMLS_CC)对应1015db7d~1015db80Đẩy 3 tham số vào ngăn xếp và gọi.

Nhưng câu hỏi của tôi là, với rất nhiều thanh ghi, trình biên dịch quyết định sử dụng như thế nàocái rìu,ngoại hốiesi(điều này đặc biệt vì nó được khôi phục trước khi sử dụng, tại sao?) như một chất trung gian được đưa vào ngăn xếp?

Chắc chắn phải có một số hướng dẫn ẩn trong c yêu cầu trình biên dịch thực hiện việc này, phải không?

câu trả lời hay nhất

Không, không có hướng dẫn ẩn.

Đây là chiến lược điển hình để tạo các lệnh 80x86, được sử dụng bởi nhiều triển khai trình biên dịch,C và những người khác. Ví dụ: trình biên dịch Intel Fortran-77 từ những năm 1980 đã làm điều tương tự khi bật tính năng tối ưu hóa.

ưu tiên sử dụng cái rìungoại hối Có lẽ tránh sử dụng esibiên tập sản phẩm vì các thanh ghi này không thể được sử dụng trực tiếp để tải toán hạng byte.

tại sao không ebxedx? Chà, nhiều trình tạo mã thích lưu các con trỏ trung gian khi đánh giá các đánh giá cấu trúc phức tạp, nghĩa là không có nhiều lý do. Trình biên dịch chỉ tìm hai thanh ghi có sẵn để sử dụng và ghi đè chúng để đệm giá trị.

Tại sao không tái sử dụng nó như thế này cái rìu Vải len? :

   đẩy esi
mov eax,dword ptr [esp+2Ch]
đẩy eax
mov eax,dword ptr [esp+8]
đẩy eax
mov eax,dword ptr [esp+4]
đẩy eax

Vì điều này sẽ khiến cho pipe ngừng chờ cái rìu Chu kỳ bộ nhớ trước khi hoàn thành, 80x86 giây kể từ năm 80586 (có thể là 80486 - đã quá lâu nên tôi không thể chắc chắn).

Kiến trúc x86 là một con thú kỳ lạ. Mỗi đăng ký, mặc dù được Intel quảng bá là "mục đích chung", đều có những đặc điểm riêng (ví dụ:cx/ngoại hốivòng lặp hướng dẫn được liên kết, và eax:edx liên quan đến lệnh nhân). Điều này, kết hợp với các cách đặc biệt để tối ưu hóa quá trình thực thi để tránh lỗi bộ nhớ đệm và tắc nghẽn quy trình, thường dẫn đến mã khó hiểu đối với trình tạo mã có tính đến tất cả các yếu tố này.

Về c - đi sâu hơn vào phần lắp ráp, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/6079543/

28 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress