Tải bản đầy đủ (.doc) (3 trang)

Tài liệu Bài tập môn học Kỹ thuật vi xử lý pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (97.94 KB, 3 trang )

KHOA Đ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
8BB00: B8 67 01 02 00 72 04 03
8BB08: C3 02 61 04 03 84 02 00
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 />Bài 2 (20 điểm). Cho chương trình ASSEMBLY sau:
.stack 100
.data
STR DB 6 DUP(‘$’)
A DW 100h
.code
mov ax, @data
mov ds, ax
mov ax, A
mov bx, 10
xor cx, cx


Label1:
test ax, ax
jz Label2
xor dx, dx
div bx
push dx
inc cx
jmp Label1
Label2:
lea bx, STR
xor di, di
Label3:
pop ax
or al, 30h
mov [bx][di], al
inc di
loop Label3
Lable4:
mov dx, bx
mov ah, 9
int 21h
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)
Lệnh CX = ? … CX = ?
pop ax AX …
or al, 30h AX …
mov [bx][di], al STR …
inc di DI …

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++;
}
}
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.

×