Xem mẫu

  1. 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
  2. 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
  3. .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
  4. 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
nguon tai.lieu . vn