You are on page 1of 3

Procedure (IA32) – Bài tập 4a

Code assembly Giả sử:


- Khi mới bắt đầu thực thi proc (dòng 1):

a. Giá trị của %ebp sau dòng lệnh thứ 3 (có


giải thích)?
- Sau dòng lệnh 2, %esp bị trừ đi 4:
%esp = 0x800040 – 4 = 0x80003C
- Sau dòng lệnh 3, %ebp được gán bằng %esp:
%ebp = %esp = 0x80003C
b. Giá trị của %esp sau dòng lệnh thứ 4 (có
Code C giải thích)?
- Sau dòng lệnh 2, %esp = 0x80003C
- Dòng lệnh 3 không làm thay đổi %esp
- Sau dòng lệnh 4, %esp bị trừ đi 40 (0x28):
%esp = 0x80003C – 0x28 = 0x800014
83
Procedure (IA32) – Bài tập 4b
Code assembly Giả sử:
- Khi mới bắt đầu thực thi proc (dòng 1):

c. Đoạn code truyền tham số và gọi scanf?


Giải thích?
- Dòng 5 – 10.

d. Xác định vị trí lưu của x và y? Giải thích?


- Thứ tự truyền tham số trong code assembly (từ xa
đến gần so với %esp):
o Địa chỉ %ebp - 4: 0x80003C - 4 = 0x800038 (1)
Code C
o Địa chỉ %ebp - 8: 0x80003C - 8 = 0x800034 (2)
o .LC0 (3)
- Dựa vào thứ tự truyền tham số ngược so với thứ
tự trong code C:
o (1) là tham số cuối, địa chỉ của x: 0x800038
o (2) là tham số kế cuối, địa chỉ của y: 0x800034 84
o (3) là tham số đầu tiên, địa chỉ chuỗi định dạng
Procedure (IA32) – Bài tập 4c
Code assembly Giả sử:
- Khi mới bắt đầu thực thi proc (dòng 1):

e. scanf được gọi và đọc vào giá trị 0x46 và


0x53 (định dạng đọc %x %x). Vẽ stack sau khi
scanf trả về.
0x800060 ebp

0x800040 esp
0x800040 – 4 ebp (0x800060)
esp ebp
= 0x80003c // 0x53
biến x
ebp – 4 =
ebp – 8 = // 0x46
biến y 0x80003c – 4
0x80003c – 8 = 0x800038
Code C
= 0x800034
ebp - 4
ebp - 8
0x80003c – 0x28
= 0x800014 .LC0 esp 85

You might also like