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

Tài liệu Đáp án 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 (103.4 KB, 4 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
ĐÁP ÁN BÀI TẬP VỀ NHÀ SỐ 3
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 = 4A86, 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ớ
Mục a: 15 điểm
Mục b: 5 điểm
a)
CS:0003 02 00 ADD AL, [BX + SI]
; cộng ô nhớ DS:[BX + SI] vào AL
CS:0005 72 04 JB Label
; Label = IP + 04h vì CF=1
CS:0009 02 61 04 ADD AH, [BX + DI + 4]
; cộng ô nhớ DS:[BX + DI + 4] vào AH
b) AX = 4A19h và FLAGS = 0011h
Bài 2 (20 điểm).
Mục a: 10 điểm
Mục b: 5 điểm
Mục c: 5 điểm
a) Trước Label3, BX = 0000, CX = 0003, DI = 0000 và các byte từ địa chỉ SS:SP là:
02 00 05 00 06 00
b)
Lệnh CX = 3 CX = 2 CX = 1
pop ax AX 0002 0005 0006
or al, 30h AX 0032 0035 0036


mov [bx][di], al STR ‘2’,‘$’,’$’,‘$’,’$’,‘$’ ‘2’,‘5’,’$’,‘$’,’$’,‘$’ ‘2’,‘5’,’6’,‘$’,’$’,‘$’
inc di DI 0001 0002 0003
c) 256
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)
Tổ chức được vòng FOR 10 điểm
Tổ chức được vòng WHILE 10 điểm
So sánh 2 phần tử 5 điểm
Chú thích tốt 5 điểm
void InsertionSort(short A[], short N)
{
__asm {
mov bx, ss:A
mov cx, ss:N
shl cx, 1
mov di, 2
FOR:
cmp di, cx
jae END_FOR
mov ax, [bx][di]
mov si, di
dec si
dec si
WHILE:
test si, 8000h ; hoac cmp si, 0
js END_WHILE ; jb END_WHILE
mov dx, [bx][si]
cmp dx, ax
jbe END_WHILE
mov [bx][si+2], dx

dec si
dec si
jmp WHILE
END_WHILE:
mov [bx][si+2], ax
inc di
inc di
jmp FOR
END_FOR:
}
}
Bài 4 (30 điểm).
Viết được đoạn main – 5 điểm
Cất các thanh ghi – 5 điểm
Gán địa chỉ của tham số vào ebx – 5 điểm
Kiểm tra điều kiện kết thúc FOR – 5 điểm
Đổi mã ký tự – 5 điểm
Khôi phục các thanh ghi – 5 điểm
.stack 100
.data
STR DB 100 DUP(?) ; char STR[100]
.code
MAIN PROC
mov ax, @data
mov ds, ax
; gets(STR)
mov ah, 10
lea edx, STR
int 21h
; toupper(STR)

lea eax, STR
push eax
CALL TOUPPER
; puts(STR)
mov ah, 9
lea edx, STR
int 21h
; exit to DOS
mov ah, 4Ch
int 21h
MAIN ENDP
TOUPPER PROC
; cất các thanh ghi vào stack, gán địa chỉ offset của tham số cho ebx
push ebp
mov ebp, esp
push eax
push edi
mov ebx, [ebp + 16]
; duyệt xâu ký tự
xor edi, edi
FOR:
mov al, [ebx][edi] ; al chứa mã ký tự đang duyệt
; kiểm tra điều kiện kết thúc vòng for
cmp al, 13
je END_FOR
; đổi ký tự thường thành ký tự in hoa
cmp al, 'a'
jb NO_CHANGE
cmp al, 'z'
ja NO_CHANGE

sub al, 20h
mov [ebx][edi], al
NO_CHANGE:
inc edi ; duyệt ký tự tiếp theo
jmp FOR
END_FOR:
; khôi phục các thanh ghi
pop edi
pop eax
pop ebp
TOUPPER ENDP
END MAIN

×