Kiến trúc máy tính phần ii hợp ngữ - chương 6 nhóm lệnh chuyển dữ liệu

Lệnh chuyểndữ liệu • MOV • XCHG • PUSH • POP • XLAT • LEA • LAHF • SAHF • PUSHF • POPF • IN • OUT

pdf23 trang | Chia sẻ: longpd | Lượt xem: 2639 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Kiến trúc máy tính phần ii hợp ngữ - chương 6 nhóm lệnh chuyển dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 6 NHÓM LỆNH CHUYỂN DỮ LiỆU Lệnh chuyển dữ liệu • MOV • XCHG • PUSH • POP • XLAT • LEA • LAHF • SAHF • PUSHF • POPF • IN • OUT Lệnh MOV • MOV reg, reg • MOV reg, mem • MOV reg, const • MOV mem, reg • MOV mem, const MOV đích, nguồn ; đíchß nguồn Đích và nguồn phải cùng kích thước Lệnh XCHG, PUSH, POP XCHG đích, nguồn ; đíchßà nguồn PUSH toánhạng ; đưa toán hạng lên đỉnh stack POP toánhạng ; lấy giá trị trên đỉnh stack (16bit) (16bit) (16bit) PUSH POP Ví dụ 1 • Cho biết nội dung các thanh ghi AX,BX,CX sau khi thực hiện đoạn chương trình sau: MOV AX, 05ABh MOV BX, 1 XCHG BH, BL MOV CX, BX XCHG AL, CL AX = ? BX= ? CX = ? Ví dụ 1 (t.t) MOV AX, 05ABh MOV BX, 1 XCHG BH, BL MOV CX, BX XCHG AL, CL ; AX: 05 AB AH AL ; BX: 00 01 ; BX: 01 00 ; CX: 01 00 ; AX: 05 00 ; CX: 01 AB AX = 0500h BX= 0100h CX = 01ABh Ví dụ 2 • Cho biết nội dung các thanh ghi AX,BX,CX sau khi thực hiện đoạn chương trình sau: MOV AX, 05A0h PUSH AX XCHG AH, AL PUSH AX POP BX POP CX AX = ? BX= ? CX = ? Ví dụ 2 MOV AX, 05A0h PUSH AX XCHG AH, AL PUSH AX POP BX POP CX ; AX: 05 A0 ; 05A0 à stack 05A0 ; AX: A0 05 ; A005 à stack A005 ; BX: A0 05 ; CX: 05 A0 Lệnh XLAT • Translate – • “Dịch” giá trị trong AL thành giá trị mới trong bảng tại vị trí xác định theo độ dời bằng AL – • Ứng dụng để chuyển đổi số liệu • Cú pháp: XLAT – • ‘Input’: • • BX chứa địachỉ bảng dữ liệu • • AL chứabyte cần đổi – • ‘Output’: • • AL chứagiátrị tìm thấytrongbảng tại địachỉ BX+AL Lệnh XLAT(t.t.) • Ví dụ đổi số thập phân < 16 ra kí tự HEXA • • Khai báo bảng kí tự Bangkytu DB ‘0123456789ABCDEF’ • •Thực hiện: MOV AL, 10 ;Nhập số cần đổi vào AL ví dụ =10 ;thực hiện đổi : MOV BX, offset Bangkytu ;lấy địa chỉ bảng dữ liệu XLAT ;AL chứakítự ‘A’ Lệnh IN • Cú pháp: IN AL,immed8 IN AL,DX IN AX,immed8 IN AX,DX • Ý nghĩa : đọc một giá trị 8bit hoặc 16bit từ cổng – Dạng lệnh có immed8 dùng trong trường hợp địa chỉ cổng xuất nhập 8 bit. – Dạng lệnh có thanh ghi DX dùng cho trường hợp địa chỉ cổng 16 bit. Lệnh IN (t.t) • Ví dụ đọc từ cổng có số hiệu 8bit: IN AL,61h IN AX,40h đọc từ cổng có số hiệu 16bit: MOV DX,378h IN AL,DX Lệnh OUT • Dạng lệnh : OUT immed8,accum OUT DX,accum • Giải thích : [cổng IO] ← thanh ghi tích lũy Xuất dữ liệu từ thanh ghi bộ tích lũy AL hoặc AX ra cổng xuất nhập có địa chỉ 8 bit là số tức thời immed8 hay có địa chỉ 16 bit trong thanh ghi DX. Lệnh OUT (t.t) OUT 20h,AL MOV DX,2F8h OUT DX,AL Lệnh LEA • Dạng lệnh : LEA reg16,mem • Giải thích : thđ ← địa chỉ • Nạp địa chỉ hiệu dụng vào thanh ghi 16 bit. • Ví dụ : LEA BX,[1000h] ; BX ← 1000h LEA SI,[DI][BX][2000h] ; SI ← DI+BX+2000h Bài tập 1. Nhập đoạn chương trình trong Debug hoán đổi nội dung hai vùng nhớ gồm 5 byte. Vùng nhớ thứ nhất ở địa chỉ DS:100h, vùng nhớ thứ hai ở địa chỉ DS:120h 2. Viết chương trình hoàn chỉnh dạng COM hoặc EXE cho phép nhập một chuỗi gồm đúng 5 ký tự. In ra màn hình chuỗi này theo thứ tự đảo ngược. 3. Viết chương trình hoàn chỉnh dạng COM hoặc EXE cho phép nhập một chuỗi từ bàn phím với số lượng ký tự tùy ý không vượt quá 15. In ra màn hình chuỗi này và cho biết số ký tự thực sự nhập ở dạng số Hex. • ;dang COM • .model tiny • .code • org 100h • start: • mov dx, offset moinhap • mov ah,9 • int 21h • ;nhap chuoi • mov dx, offset chuoi • mov ah,0ah • int 21h • ;dao • mov si,offset chuoi + 2 ; bo qua 2 byte dau, tro den ki tu dau tien • xchg ah,[SI] • xchg ah,[SI+4] • xchg ah,[SI] • ; • xchg ah,[SI+1] • xchg ah,[SI+3] • xchg ah,[SI+1] • ; • mov dx,offset ketqua • mov ah,9 • int 21h • ;in chuoi • mov dx,offset chuoi+2 • mov ah,9 • int 21h • • int 20h • chuoi db 6,?,7 DUP('$') • • moinhap db "Nhap vao chuoi gom 5 ki tu: $" • ketqua db 13,10,"Chuoi sau khi dao: $" • end start • mov al,byte ptr [100h] • mov bl,byte ptr [120h] • xchg al,byte ptr [120h] • xchg bl,byte ptr [100h] • mov ax,word ptr [100h] • mov bx,word ptr [120h] • xchg ax,word ptr [120h] • xchg bx,word ptr [100h] • ;dang EXE • .model small • .data • chuoi db 16,?,17 DUP('$') • moinhap db "Nhap vao chuoi toi da 15 ki tu: $" • ketqua db 13,10,"Chuoi vua nhap: $" • soluong db 13,10,"So luong ki tu(he 16): $" • bang db "0123456789ABCDEF" • • .code • main: • mov ax,@data • mov ds,ax • mov dx, offset moinhap • mov ah,9 • int 21h • ;nhap chuoi • mov dx, offset chuoi • mov ah,0ah • int 21h • ; • mov dx,offset ketqua • mov ah,9 • int 21h • ;in chuoi • mov dx,offset chuoi+2 • mov ah,9 • int 21h • ; • mov dx,offset soluong • mov ah,9 • int 21h • ;tinh so ki tu • mov bx,offset bang • mov al,[chuoi+1] ; lay so ki tu vua nhap • xlat ; tra trong bang de doi sang ma ASCII • ; • mov ah,2 • mov dl,al • int 21h • ; • ;exit • mov ah,4ch • int 21h • end main
Tài liệu liên quan