Int b=1; main(){int x = 2; printf("%d %d", x, b);}. In this program, what ASM opcode places x where printf can find it?
5 phương ánCó giải thích
Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "push". Trên x86 32 bit theo quy ước gọi cdecl, đối số được đặt lên ngăn xếp từ phải sang trái trước lệnh gọi: chương trình push giá trị b, rồi nạp x (bằng 2) vào thanh ghi và push nó, tiếp đó push địa chỉ chuỗi định dạng, sau cùng call printf; bên trong printf đọc các đối số từ ngăn xếp ngay trên địa chỉ trả về, còn bên gọi tự cộng lại esp để dọn. Vì vậy push là lệnh đặt x vào chỗ printf tìm thấy; cần biết trình biên dịch hiện đại có thể cấp sẵn khung ngăn xếp rồi dùng mov vào [esp+…] thay cho push, và trên x64 đối số đầu nằm trong thanh ghi, nhưng câu hỏi theo mô hình cổ điển. "jz" là nhảy có điều kiện khi cờ ZF bằng 1. "amp" in sẵn như vậy và không phải lệnh x86 nào. "pop" lấy giá trị khỏi đỉnh ngăn xếp, ngược chiều cần thiết. "call" đẩy địa chỉ trả về rồi chuyển điều khiển tới printf, không đặt x.
Cùng phần 4
What will be the output of the following Python code?
def foo():
try:
return 1
finally:
return 2
k = foo()
print(k)Có lời giảiCâu hỏiCopying and pasting a Python for loop with a blank line into the standard Python shell will always execute without errors.Có lời giảiCâu hỏiWhat is the result of sorted([-4, 1, -2, 3], key=abs, reverse=True) ?Có lời giảiCâu hỏiCả 22 câu của chủ đề22 câu
Xuất hiện trong 1 bộ đề
Đi tiếp từ đây