lea bx, STR Label3: pop ax mov [bx][di], al inc di Lable4: END a Sau khi thực hiện lệnh trước Label3, cho biết giá trị của các thanh ghi BX, CX, DI và các byte bắt đầu từ SS:SP?. 10 điểm
Trang 1KHOA ĐIỆN TỬ VIỄN THÔNG
BỘ MÔN ĐIỆN TỬ TIN HỌC
-MÔN HỌC: KỸ THUẬT VI XỬ LÝ Học kỳ: 2 Năm học: 2009-2010 BÀI TẬP VỀ NHÀ SỐ 3
Hạn nộp: Buổi học VXL đầu tiên của tuần 32 (nộp quá hạn sẽ nhận điểm 0)
Hạn trả bài: Buổi học cuối cùng của tuần 34 Bài 1 (20 điểm) Cho trạng thái của một hệ vi xử lý 8086 như sau:
Các thanh ghi: AX = 4A07, DX = FF6A, BX = 075C, SI = 0008, DI = 000A, CS = 8BB0, DS = 4636,
IP = 0003, FLAGS = 0000
Bộ nhớ:
Địa chỉ vật lý:Giá trị 8 ô nhớ
46AC0: A6 43 C0 49 B5 F6 20 64
46AC8: 38 C5 DE 80 29 73 44 E8
a) Giải mã 3 lệnh đầu tiên mà CPU sẽ thực hiện và viết các lệnh đó theo mẫu sau (15 điểm): CS:giá trị của IP các byte mã lệnh lệnh ASEMBLY ; chú thích
b) Cho biết giá trị các thanh ghi AX và FLAGS sau lệnh thứ 3 (5 điểm)
Bảng các mã lệnh: tra tại http://www.mlsite.net/8086
Bài 2 (20 điểm) Cho chương trình ASSEMBLY sau:
.stack 100
.data
STR DB 6 DUP(‘$’)
.code
Label1:
test ax, ax
div bx
inc cx
Label2:
Trang 2lea bx, STR
Label3:
pop ax
mov [bx][di], al
inc di
Lable4:
END
a) Sau khi thực hiện lệnh trước Label3, cho biết giá trị của các thanh ghi BX, CX, DI và các byte bắt đầu từ SS:SP? (10 điểm)
b) Điền giá trị vào bảng sau khi thực hiện từng lệnh trong đoạn từ Lable3 đến Lable4 (5 điểm)
c) Cho biết kết quả hiện trên màn hình (5 điểm)
Bài 3 (30 điểm) Viết lại thân hàm InsertionSort(short A[], short N) cho dưới đây bằng ASSEMBLY
(cho 8086)
void InsertionSort(short A[], short N) // short – kiểu biến 2 byte
{
for (short i = 1; i < N; i++)
{
short X = A[i];
short j = i – 1;
while (j >= 0 && A[j] > X) {
A[j + 1] = A[j];
j– –;
} A[j + 1] = X;
}
}
Bài 4 (30 điểm) Viết lại chương trình C sau đây bằng ASSEMBLY (cho 80486):
#include <stdio.h>
#include <conio.h>
void toupper(char *s) {
int i = 0;
while (s[i] != 0) {
if (s[i] >= ‘a’ && s[i] <= ‘z’)
s[i] –= 32;
i++;
Trang 3}
main()
{
char STR[100];
gets(STR); // hàm nhập xâu ký tự
toupper(STR);
puts(STR); // hàm in xâu ký tự
}
Chú ý: Các hàm puts và gets có thể dùng ngắt 21h Hàm toupper cần được viết dưới dạng
chương trình con.