Phần cứng máy tính PHẦN CỨNG MÁY TÍNH Lập trình tập lệnh CPU I Các lệnh cơ bản 1/ MOV MOV dest, source ** Gán toán hạng source > dest Quy định + Hai toán hạng phải cùng kiểu 8 hay 16 bit + Không thể[.]
PHẦN CỨNG MÁY TÍNH Lập trình tập lệnh CPU Các lệnh 1/ MOV MOV dest, source ** Gán toán hạng source -> dest Quy định: + Hai toán hạng phải kiểu hay 16 bit + Khơng thể hai tốn hạng nhớ + Không thể gán trực tiếp vào ghi segment + Không thể gán ghi segment vào ghi segment I Một số VD MOV G/s nhớ gồm đoạn có địa segment 0000, 014A, 028B Lập trình tập lệnh CPU chép nhớ có địa offset 3;4;5 đoạn sang ô sớ 7;8;9 đoạn cách a) Dùng nhớ trực tiếp b) Dùng nhớ gián tiếp với kiểu [SI + disp] , [DI + disp] Một số VD lệnh MOV Giải: a) Bộ nhớ trực tiếp Byte ptr Word ptr ghi segment : [offset ] Nap địa segment đoạn vào DS MOV AX, 0000 MOV DS, AX Nạp segment đoạn vào ES MOV AX, 028B MOV ES, AX Chép ô nhớ 3,4,5 sang 7,8.9 MOV AX, word ptr DS: [0003] MOV word ptr ES:[0007],AX MOV AL, byte ptr DS: [0005] MOV byte ptr ES:[0009],AL Một số VD MOV b) Bộ nhớ gián tiếp [SI + disp], [DI + disp] ; nạp segment đoạn vào DS MOV AX, 0000 MOV DS, AX ;nạp segment đoạn vào ES MOV AX, 028B MOV ES, AX ;SI = đ/c offset bắt đầu vùng nhớ nguồn MOV SI, 0003 ;DI = đ/c offset bắt đầu vùng nhớ đích MOV DI, 0007 ;chép nhớ 3,4 vào 7,8 MOV AX, word ptr DS: [SI] MOV word ptr ES:[DI], AX ;chép ô nhớ - > MOV AL, byte ptr DS:[SI + 2] MOV byte ptr ES:[DI+2], AL Bài tập Chép ô nhớ 5,7,9 đoạn sang ô nhớ 3,5,7 theo thứ tự ->7 ->5 ->3 Hoán chuyển ô nhớ 4,5,6 7,8,9 đoạn 2/ Lệnh Add, Inc, Adc Lệnh Add Add dest, source (dest) + (source) ->dest Khi phép cộng xuất số nhớ cờ nhớ CF đặt Lệnh Inc Inc dest (dest) + - > (dest) Lệnh Adc (dest) + (source) + CF -> (dest) VD phép tốn khơng có nhớ,có nhớ Cộng ô nhớ 3,4,5 đoạn kết lưu vào ô nhớ a) Bộ nhớ trực tiếp b) Bộ nhớ gián tiếp [BX+disp] Giải: c) Bộ nhớ trực tiếp MOV AX, 014A MOV DS,AX ;cộng ô nhớ b) Bộ nhớ gián tiếp MOV AX,014A MOV DS,AX ;BX= đc offset bắt đầu vùng nhớ MOV BX, 0003 ;Cộng MOV AL, byte ptr DS:[BI] Add AL, byte ptr DS:[BI+1] Add AL, byte ptr DS:[BI+2] ;Ghi MOV byte ptr DS: [BX+3], AL Nhận xét = > Nhận xét : Kết bị tràn Do ta nên cho kết ghi 16 bit (1byte + 1byte + 1byte - >1 byte) bị tràn (1byte + byte + byte - > byte ) khơng tràn VD phép tốn có kết 16bit b) Bộ nhớ gián tiếp MOV AX, 014A MOV DS, AX MOV BX, 0003 ;cộng MOV AL, byte ptr DS:[BX] MOV AH,0 Inc BX Add AL, byte ptr DS:[BX] Adc AH,0 Inc BX Add AL, byte ptr DS:[BX] Adc AH,0 Inc BX ;Ghi MOV word ptr DS:[BX], AX 2/ Lệnh Sub, Dec, Sbb Lệnh Sub Sub dest, source (dest) – (source) -> (dest) Lệnh Dec (giảm 1) (dest) – - > dest Lệnh Sbb Sbb dest, source (dest) – (source) ->dest 3/ Lệnh Push, Pop Lệnh Push (16 bit) Push source ** Lưu nội dung toán hạng source vào đỉnh stack Thanh ghi sp tự động giảm để đến đỉnh ** Cất nội dung ghi hay ô nhớ lên ngăn xếp ** Lưu liệu vào , liệu tăng lên, địa giảm địa từ đáy lên 3/ Lệnh Push, Pop Lệnh Pop Pop dest (16 bit) ** Lấy pt đỉnh stack - > toán hạng dest ** Thanh ghi sp tự động tăng để đến đỉnh ** Lấy từ 16 bit bit cao I ngăn xếp xuống lưu vào ghi định kể từ ô nhớ định VD Push, Pop MOV AX, 1000 MOV BX, 2000 MOV CX, 3000 push AX push BX push CX ;lấy pop CX pop BX pub AX ;đọc không lấy MOV BP, SP MOV CX, word ptr SS:[BP] MOV BX, word ptr SS:[BP +2] MOV AX, word ptr SS:[BP+4] II Các lệnh tính toán số học logic Các lệnh nhân: * Lệnh Mul : nhân số khơng dấu Mul source Có source bit AL * source - > AX Có source 16 bit AX * source -> DX: AX (32 bit) Cặp ghi DX:AX biểu diễn số 32 bit Ta có: DX:AX = DX * 16 + AX II Các lệnh tính tốn số học logic Lệnh IMul: nhân số có dấu IMul source (tương tự Mul) VD 1: Cho đoạn data có đc segment x/đ DS Nhân nhớ 2,3 kết lưu vào ô nhớ 4,5 II Các lệnh tính tốn số học logic Giải: G/sử số không dấu MOV AL, byte ptr DS:[0002] Mul byte ptr DS:[0003] MOV word ptr DS:[0004], AX VD2: Nhân từ nhớ có địa 6,7 với 1000, kq lưu vào ô nhớ 8, 9, A, B MOV AX,1000 Mul word ptr DS:[0006] ; kq = DX:AX MOV word ptr DS:[0008],AX MOV word ptr DS:[000A],DX Các lệnh tính tốn số học logic Các lệnh chia Lệnh DIV : chia số không dấu DIV source Chia làm phần : phần thương, phần dư Có trường hợp: TH1: Source bit AL = thương AX / (source) AH = dư