
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 ả ệ ạ 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(‘$’)
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.ạ ươ

