2010-06-30 34 views
5

Là chiều rộng của ngăn xếp 8 bit rộng cho kiến ​​trúc IA32 và cho tất cả các loại vi xử lý/vi điều khiển.Chiều rộng của ngăn xếp trong kiến ​​trúc Intel IA32 là bao nhiêu?

Tôi hiện đang đọc http://ozark.hendrix.edu/~burch/csbsju/cs/350/handouts/x86.html về ngôn ngữ lắp ráp. Tại lời giải thích của "gọi" nó nói rằng con trỏ ngăn xếp đang được giảm xuống 4 và bộ đếm chương trình được đẩy vào ngăn xếp. Điều này có nghĩa là chiều rộng của bộ đệm ngăn xếp có chiều rộng 8 bit vì bộ đếm chương trình dài 32 bit không? Tôi đã cố gắng tìm nó trong hướng dẫn phát triển phần mềm kiến ​​trúc IA32 intel nhưng dường như không thể xác nhận nó.

Cảm ơn Sziang

Trả lời

4

Trong kiến ​​trúc IA32, bộ nhớ được đề cập trong byte.

Do đó, để đưa thêm 4 byte trên stack, bạn cần phải thay đổi con trỏ ngăn xếp của bạn bằng cách 4.

+0

Tôi đang cảm thấy có một bot xuống cấp hoặc lỗi ở đâu đó ... Điều này dường như đang diễn ra rất nhiều, đột nhiên. – Cogwheel

+0

+1, fwiw ... (thêm ký tự) – Cogwheel

+0

Cảm ơn bạn về anon và bánh răng, đây là câu trả lời mà tôi đang tìm kiếm. liên quan sziang – sziang

2

Nó có nghĩa là 8 bit là đơn vị nhỏ nhất địa chỉ bộ nhớ trong tập lệnh (một Byte). Tất cả các địa chỉ bộ nhớ trong IA32 đại diện cho một bội số của 8 bit bù đắp vào RAM.

+0

-1 chiều rộng ngăn xếp theo IA32 là 16 bit! –

+0

@GJ Tôi không nói gì về chiều rộng ngăn xếp. Các OP đã tự hỏi tại sao đẩy một giá trị 32 bit di chuyển con trỏ ngăn xếp bởi 4. Lý do là bởi vì con trỏ ngăn xếp lưu trữ một địa chỉ bộ nhớ, và địa chỉ bộ nhớ được dựa trên byte. Câu trả lời của tôi không sai, và trên thực tế, người hỏi đã chấp nhận một câu trả lời gần như giống hệt một vài giây trước tôi. – Cogwheel

+0

@ Bánh xe nhưng câu hỏi đặt ra là: Chiều rộng của ngăn xếp trong kiến ​​trúc Intel IA32 là bao nhiêu? –

3

Thao tác đẩy giá trị vào "ngăn xếp" cho CPU x86 (ví dụ: các hoạt động liên quan đến ESP như PUSH, CALL, v.v.) đều tăng theo mức tăng 4 byte. Chiều rộng hiệu dụng của ngăn xếp là 4 byte/32 bit. Nếu bạn đang mã hóa cho một CPU x64, nó là 8 byte rộng, nhưng bạn hỏi về IA32.

Tôi luôn có con trỏ ngăn xếp thẳng hàng trên ranh giới 4 byte (DWORD). Tôi không biết nếu bạn có thể DWORD-misalign ngăn xếp và có nó hoạt động đúng; nếu có, bạn sẽ phải trả một khoản phạt hiệu năng nghiêm trọng khi truy cập bộ nhớ để đẩy và bật (được thực hiện rất thường xuyên trong mã thực) bởi vì bộ xử lý thực muốn đọc trong các khối có kích thước nhỏ.

+3

Từ sách hướng dẫn tham chiếu Intel, mô tả hướng dẫn PUSH: không có bất kỳ lệnh nào như "push al". "push imm8" điều chỉnh ngăn xếp theo kích thước của con trỏ ngăn xếp: "Thuộc tính kích thước địa chỉ của phân đoạn ngăn xếp xác định kích thước con trỏ ngăn xếp (16, 32 hoặc 64 bit) [trang 4-320 Tham chiếu tập lệnh B khối lượng]" . Vì vậy, nếu bạn chạy ở chế độ 16 bit, nó sẽ đẩy 16 bit, nhưng tôi không coi đó là chế độ "IA32" ít nhất là không theo tinh thần của câu hỏi. (Tôi đã không mã hóa một đẩy rộng 16 bit từ năm 1987). –

+1

Trên thực tế, 1 là một sức mạnh nhỏ của hai là tốt :-) Và tôi ngạc nhiên khi bạn biết chính xác năm bạn cuối mã hóa một đẩy 16-bit. Nhưng 1 để giáo dục tôi. Tôi đã không nhận ra rằng họ đã được đẩy 32-bit bất kể kích thước operand. Đoán tôi đã ra khỏi thế giới asm quá lâu rồi. – paxdiablo

+0

Khá dễ nhớ; đó là năm tôi có chip Pentium đầu tiên và một hộp Unix thực sự. Không có nhiều thứ 16 bit nữa. –

3

Đây là lần đầu tiên tôi nghe nói về "chiều rộng ngăn xếp".

push/pop/call/ret có độ rộng mặc định (phù hợp với chế độ hoạt động của bộ xử lý). Nhưng ngăn xếp trên mỗi giây không có chiều rộng. (Alignment là một câu chuyện hoàn toàn khác nhau.)

Từ các tài liệu Intel (đối với push):

"In non-64-bit modes: if the address-size and operand-size attributes are 32, 
the 32-bit ESP register (stack pointer) is decremented by 4. 
If both attributes are 16, the 16-bit SP register (stack pointer) 
is decremented by 2." 

[...]

"In 64-bit mode, the instruction’s default operation size is 64 bits. 
In a push, the 64-bit RSP register (stack pointer) is decremented by 8." 

Đối với hướng dẫn sử dụng (mà luôn luôn có người cuối cùng word) kiểm tra: Intel Processor Manuals

Các vấn đề liên quan