Professional Documents
Culture Documents
Bài tập buoi 3 - 4
Bài tập buoi 3 - 4
Bài tập buoi 3 - 4
Bài 1.
Giả sử các giá trị sau được lưu trữ tại các địa chỉ bộ nhớ và thanh ghi như sau:
Điền giá trị theo ý nghĩa của các toán hạng(operand) trong bảng sau như ví dụ
trong các hàng đầu tiên:
Operand Value
%eax 0x100 ( thanh ghi )
0x104 0xAB (địa chỉ tuyệt đối)
$0x108 ----------
(%eax) ----------
4(%eax) ----------
9(%eax,%edx) ----------
260(%ecx,%edx) ----------
0xFC(,%ecx,4) ----------
(%eax,%edx,4) ----------
Bài 2.
Đối với mỗi dòng lệnh sau, hãy xác định hậu tố thích hợp dựa trên toán hạng. (Ví
dụ: Mov có thể được viết lại dưới dạng Movb, Movw hoặc Movl.)
1 mov %eax, (%esp)
2 mov (%eax), %dx
3 mov $0xFF, %bl
4 mov (%esp,%edx,4), %dh
5 push $0xFF
6 mov %dx, (%eax)
7 pop %edi
Bài 3.
Mỗi dòng mã sau đây sẽ tạo một thông báo lỗi khi chúng ta gọi trình biên dịch
chương trình. Giải thích những gì sai với mỗi dòng.
1 movb $0xF, (%bl)
2 movl %ax, (%esp)
3 movw (%eax),4(%esp)
4 movb %ah,%sh
6 movl %eax,%dx
Bài 4.
Giả sử thanh ghi %eax giữ giá trị x và %ecx giữ giá trị y. Điền vào bảng dưới đây
với các công thức chỉ ra giá trị sẽ được lưu trữ trong thanh ghi %edx:
Instruction Result
leal 6(%eax), %edx ----------
leal (%eax,%ecx), %edx ----------
leal (%eax,%ecx,4), %edx ----------
leal 7(%eax,%eax,8), %edx ----------
leal 0xA(,%ecx,4), %edx ----------
leal 9(%eax,%ecx,2), %edx ----------
Bài 5.
Giả sử các giá trị sau được lưu trữ tại các địa chỉ bộ nhớ và thanh ghi đã chỉ
định:
Điền các lệnh còn thiếu vào đoạn chương trình trên, theo các chú thích
bên phải. phép dịch phải là dịch số học.
Bài 7.
Đoạn code ở gần đầu của một procedure C được biên dịch như sau:
1 subl $12, %esp
2 movl %ebx, (%esp)
3 movl %esi, 4(%esp)
4 movl %edi, 8(%esp)
5 movl 8(%ebp), %ebx
6 movl 12(%ebp), %edi
7 movl (%ebx), %esi
8 movl (%edi), %eax
9 movl 16(%ebp), %edx
10 movl (%edx), %ecx
……..
Chỉ có ba thanh ghi (% ebx,% esi và% edi) được lưu trên stack (dòng 2 tới 4).
Chương trình thay đổi các thanh ghi nầy và 3 thanh ghi khác (%eax,%ecx, và
%edx). Vào cuối procedure, các giá trị của các thanh ghi %edi,%esi và %ebx
được trả lại (không hiển thị ở đây), trong khi ba thanh ghi còn lại vẫn giữ giá trị bị
thay đổi. Giải thích tại sao procedure không trả lại giá trị ban đầu của 3 thanh ghi
nầy.
Bài 8.
Cho 1 hàm C
1 int proc(void)
2{
3 int x,y;
4 scanf("%x %x", &y, &x);
5 return x-y;
6}
1 proc:
2 pushl %ebp
3 movl %esp, %ebp
4 subl $40, %esp
5 leal -4(%ebp), %eax
6 movl %eax, 8(%esp)
7 leal -8(%ebp), %eax
8 movl %eax, 4(%esp)
……….
Giả sử procedure proc bắt đầu chạy với giá trị thanh ghi như sau:
Register value
%esp 0x800040
%ebp 0x800060
A. Giá trị của thanh ghi %ebp có được ở dòng thứ 3 là bao nhiêu ?
B. Giá trị của thanh ghi %esp có được ở dòng thứ 4 là bao nhiêu ?