Kiến trúc máy tính PHẦN II hợp NGỮ chương 6 NHÓM LỆNH TÍNH TOÁN số học và LUẬN lý

37 543 0
Kiến trúc máy tính PHẦN II hợp NGỮ   chương 6 NHÓM LỆNH TÍNH TOÁN số học và LUẬN lý

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương NHÓM LỆNH TÍNH TOÁN SỐ HỌC VÀ LuẬN LÝ Nhóm lệnh tính toán số học ADD SUB INC DEC NEG MUL , IMUL DIV , IDIV + ++ a * / Lệnh ADD • Dạng lệnh : ADD ADD ADD reg,reg mem,reg reg,mem ADD ADD ADD • Giải thích : reg,immed mem,immed accum,immed thđ ← thđ + thn Cộng toán hạng nguồn vào toán hạng đích Kết cất vào toán hạng đích • Tác động cờ : Xem thêm lệnh ADC Ví dụ ADD ADD ADD ADD ADD ADD ADD CX,SI ; CX ← CX + SI DH,BL ; DH ← DH + BL [1000h],BX ;[1001h,1000h] ← [1001h,1000h] + BX [2000h],CL ; [2000h] ← [2000h] + CL AL,[0000h] ; AL ← AL + [0000h] BYTE PTR [SI+8],5 ; [SI+8] ← [SI+8] + 05h WORD PTR [SI+8],5 Lệnh SUB • Dạng lệnh : SUB SUB SUB reg,reg mem,reg reg,mem SUB SUB SUB reg,immed mem,immed accum,immed • Giải thích : thđ ← thđ - thn Trừ toán hạng đích cho toán hạng nguồn Kết cất vào toán hạng đích • Tác động cờ : Xem thêm SBB Ví dụ ; DL ← DL - AL SUB CX,[DI] ; CX ← CX - [DI+1,DI] SUB BP,4 ; BP ← BP - SUB DL,AL Lệnh INC • Dạng lệnh : INC reg INC mem • Giải thích : thđ ← thđ + cộng vào toán hạng đích không ảnh hưởng cờ nhớ • Tác động cờ : • Ví dụ : INC INC CH WORD PTR [1000h] Lệnh DEC • Dạng lệnh : DEC reg DEC mem • Giải thích : thđ ← thđ - trừ vào toán hạng đích không ảnh hưởng cờ nhớ • Tác động cờ : • Ví dụ : DEC DEC AX Byte PTR ES:[1000h] Lệnh NEG • Dạng lệnh : NEG reg NEG • Giải thích : thđ ← bù ( thđ) • Tác động cờ : • Ví dụ : NEG NEG AX Byte PTR ES:[SI] mem Lệnh MUL • Dạng lệnh : MUL reg MUL mem • Giải thích : nhân số không dấu – Trường hợp toán hạng nguồn bit : AX ← AL * thn8 – Trường hợp toán hạng nguồn 16 bit : {DX AX} ← AX * thn16 • Tác động cờ : Lệnh SHL/SAL • Dạng lệnh : SHL SHL reg,1 reg,CL • Giải thích : SHL SHL mem,1 mem,CL Dịch trái Dạng SHL reg,1 dùng để dịch trái bit Dạng SHL reg,CL dùng để dịch trái nhiều bit Lúc ghi CL chứa số bit cần dịch • Tác động cờ : Ví dụ MOV AL, 11100000b SHL AL, ; AL=11000000b ; CF=1 Bài tập Viết đoạn chương trình hợp ngữ tính tổng: s = + 2+ 3+ … + n đó, giá trị n chứa sẳn ghi AX kết tính cất vào ghi DX (giả sử n đủ nhỏ để tổng tính không tràn) n n lẻ BTVN2: Viết chương trình tính s=1+3+5+…+ n -1 n chẳn Bài tập (t.t.) Cho a,b, kq số có dấu, khai báo sau: a db ? b db ? kq dw ? Viết đoạn chương trình tính: kq = (a+2)*(b-5) +3 Bài tập (t.t.) BTVN: Viết chương trình tính an , với a chứa AL, n chứa AH, kết chứa vào DX Bài tập (t.t.) Viết chương trình con: Đếm số bit giá trị 16bit nằm ghi AX, kết chứa vào DL Tính tổng chữ số (ở hệ 10) số 16 bit chứa ghi AX, kết chứa vào DL Các chương trình hỗ trợ • Chương trình 1: Xuất giá trị số nguyên 16 bit hình • Chương trình 2: Nhập giá trị số nguyên 16 bit từ bàn phím Chương trình xuất giá trị số nguyên 16 bit hệ 10 • Input: AX chứa giá trị cần xuất • Giải thuật: Chia liên tiếp cho 10 để lấy số dư In hình số dư theo thứ tự ngược Chia liên tiếp cho 10 1562 chia 10 156 chia 10 15 chia 10 chia 10 Xuất số dư: + ‘0’ ‘1’ + ‘0’ ‘5’ + ‘0’ ‘6’ + ‘0’ ‘2’ Stack 1 6 xuatso proc mov bx,10 ; chia cho 10 mov cx,0 ; tính số lần lặp chia: xuat: mov dx,0 ; xóa dx div bx ;Chia [DX|AX] cho 10, ;thương AX, dư DX push dx ; cất phần dư inc cx ;tăng lến lần lặp cmp ax,0 jne chia Các ghi thay đổi? pop dx add dl,'0' mov ah,2 int 21h loop xuat ret xuatso endp xuatso proc mov bx,10 ; chia cho 10 mov cx,0 ; tính số lần lặp chia: xuat: push AX push BX push CX push DX mov dx,0 ; xóa dx div bx ;Chia [DX|AX] cho 10, ;thương AX, dư DX push dx ; cất phần dư Các ghi thay inc cx ;tăng đếm đổi CTC: AX, BX, CX,DX cmp ax,0 è cất giữ nội dung jne chia ghi để phục hồi pop dx add dl,'0' mov ah,2 pop DX int 21h pop CX loop xuat pop BX ret xuatso endp pop AX Chương trình nhập số nguyên 16 bit • Output: AX chứa giá trị nhập • Giải thuật: – Nhập chuỗi số từ bàn phím – Đổi chuỗi số thành số • • • • • Ban đầu AX= ‘1562’ è AX = AX*10 + ‘1562’ è AX = AX*10 + ‘1562’ è AX = AX*10 + ‘1562’ è AX = AX*10 + =1 = 15 = 156 = 1562 nhapso proc ; mov ah,0ah mov dx,offset buffer push cs ;Cho DS trỏ đến pop ds ;đoạn code int 21h mov cl,[buffer+1] ;lấy số chữ số vừa nhập mov ch,0 mov si,offset buffer +2 ;vị trí chữ số mov ax,0 ;xóa ax mov bx,10 nhan: mul bx mov dl,[si] sub dl,'0' mov dh,0 add ax,dx inc si loop nhan ; ret buffer db 6,?,6 dup('$') nhapso endp nhapso proc nhan: mov ah,0ah mov dx,offset buffer push cs pop ds int 21h mov cl,[buffer+1] mov ch,0 mov si,offset buffer +2 mov ax,0 mov bx,10 mul bx mov dl,[si] sub dl,'0' mov dh,0 add ax,dx inc si loop nhan ret buffer db 6,?,6 dup('$') nhapso endp push push push push push bx cx dx si ds Các ghi thay đổi CTC: BX, CX,DX, SI, DS è cất giữ nội dung ghi để phục hồi pop pop pop pop pop ds si dx cx bx [...]... BTVN: Viết chương trình tính an , với a chứa trong AL, n chứa trong AH, kết quả chứa vào DX Bài tập (t.t.) Viết chương trình con: 3 Đếm số bit 1 của giá trị 16bit nằm trong thanh ghi AX, kết quả chứa vào DL 4 Tính tổng các chữ số (ở hệ 10) của 1 số 16 bit chứa trong thanh ghi AX, kết quả chứa vào DL Các chương trình con hỗ trợ • Chương trình con 1: Xuất một giá trị số nguyên 16 bit ra màn hình • Chương. .. một giá trị số nguyên 16 bit từ bàn phím Chương trình xuất giá trị số nguyên 16 bit hệ 10 • Input: AX chứa giá trị cần xuất • Giải thuật: Chia liên tiếp cho 10 để lấy số dư In ra màn hình các số dư theo thứ tự ngược Chia liên tiếp cho 10 1 562 chia 10 à 1 56 chia 10 à 15 chia 10 à 1 chia 10 à Xuất các số dư: 1 + ‘0’ à ‘1’ 5 + ‘0’ à ‘5’ 6 + ‘0’ à 6 2 + ‘0’ à ‘2’ Stack 2 6 5 1 1 5 6 2 1 5 6 2 xuatso proc... không dấu – Nếu toán hạng nguồn là 8 bit thì : AL ← (AX / thn8) AH ← số dư của (AX / thn8) – Toán hạng nguồn 16 bit thì : AX ← (DXAX / thn 16) DX ← số dư của (DXAX / thn 16) • Tác động cờ : Lệnh IDIV • Tương tự lệnh DIV nhưng làm việc trên số có dấu Nhóm lệnh xử lý logic AND OR XOR NOT SHL SHR SAL SAR ROL ROR RCL RCR Lệnh AND • Dạng lệnh : AND AND AND reg,reg mem,reg reg,mem AND AND AND reg,immed mem,immed... Bài tập 1 Viết đoạn chương trình hợp ngữ tính tổng: s = 1 + 2+ 3+ … + n trong đó, giá trị n chứa sẳn trong thanh ghi AX kết quả tính được cất vào thanh ghi DX (giả sử n đủ nhỏ để tổng tính được không tràn) n nếu n lẻ BTVN2: Viết chương trình tính s=1+3+5+…+ n -1 nếu n chẳn Bài tập (t.t.) 2 Cho a,b, kq là các số có dấu, khai báo như sau: a db ? b db ? kq dw ? Viết đoạn chương trình tính: kq = (a+2)*(b-5)... AL=5, CH=4, sau khi thực hiện lệnh MUL CH ta có AX = AL*CH = 0014h • Nếu AX=500h, [1001h,1000h]=0401h, sau khi thực hiện lệnh MUL WORD PTR [1000h] ta có {DXAX} = AX * [1001h,1000h] = 500h * 401h = 00140500h Nghĩa là DX=0014h và AX=0500h Lệnh IMUL • Tương tự lệnh MUL, nhưng xử lý trên số có dấu Lệnh DIV • Dạng lệnh : DIV reg DIV mem • Giải thích : chia hai số không dấu – Nếu toán hạng nguồn là 8 bit thì... số thành số • • • • • Ban đầu AX= 0 ‘1 562 ’ è AX = AX*10 + 1 ‘1 562 ’ è AX = AX*10 + 5 ‘1 562 ’ è AX = AX*10 + 6 ‘1 562 ’ è AX = AX*10 + 2 =1 = 15 = 1 56 = 1 562 nhapso proc ; mov ah,0ah mov dx,offset buffer push cs ;Cho DS trỏ đến pop ds ;đoạn code int 21h mov cl,[buffer+1] ;lấy số chữ số vừa nhập mov ch,0 mov si,offset buffer +2 ;vị trí chữ số đầu tiên mov ax,0 ;xóa ax mov bx,10 nhan: mul bx mov dl,[si]... ; cất phần dư Các thanh ghi thay inc cx ;tăng đếm đổi trong CTC: AX, BX, CX,DX cmp ax,0 è cất giữ nội dung jne chia các thanh ghi này để phục hồi pop dx add dl,'0' mov ah,2 pop DX int 21h pop CX loop xuat pop BX ret xuatso endp pop AX Chương trình nhập số nguyên 16 bit • Output: AX chứa giá trị nhập • Giải thuật: – Nhập chuỗi số từ bàn phím – Đổi chuỗi số thành số • • • • • Ban đầu AX= 0 ‘1 562 ’ è AX... 1 = 1 0 XOR 0 = 0 Lệnh NOT • Dạng lệnh : NOT reg NOT mem • Giải thích : thđ ← đảo từng bit ( thđ ) • Tác động cờ : (không thay đổi) • Ví dụ: MOV AL, 00011011b NOT AL ; AL = 11100100b Lệnh SHL/SAL • Dạng lệnh : SHL SHL reg,1 reg,CL • Giải thích : SHL SHL mem,1 mem,CL Dịch trái Dạng SHL reg,1 dùng để dịch trái 1 bit Dạng SHL reg,CL dùng để dịch trái nhiều bit Lúc đó thanh ghi CL chứa số bit cần dịch •... xuatso proc mov bx,10 ; chia cho 10 mov cx,0 ; tính số lần lặp chia: xuat: mov dx,0 ; xóa dx đi div bx ;Chia [DX|AX] cho 10, ;thương trong AX, dư trong DX push dx ; cất phần dư inc cx ;tăng lến lần lặp cmp ax,0 jne chia Các thanh ghi nào thay đổi? pop dx add dl,'0' mov ah,2 int 21h loop xuat ret xuatso endp xuatso proc mov bx,10 ; chia cho 10 mov cx,0 ; tính số lần lặp chia: xuat: push AX push BX push... AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0 Lệnh OR • Dạng lệnh : OR OR OR reg,reg mem,reg reg,mem OR OR OR reg,immed mem,immed accum,immed • Giải thích : thđ ← thđ OR thn • Tác động cờ : Ví dụ: MOV AL, 'A' OR AL, 00100000b 01000001 00100000 -01100001 ; AL = 01000001b ; AL = 01100001b ('a') 1 OR 1 = 1 1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0 Lệnh XOR • Dạng lệnh : XOR reg,reg XOR mem,reg XOR reg,mem XOR ... chứa vào DL Tính tổng chữ số (ở hệ 10) số 16 bit chứa ghi AX, kết chứa vào DL Các chương trình hỗ trợ • Chương trình 1: Xuất giá trị số nguyên 16 bit hình • Chương trình 2: Nhập giá trị số nguyên... ← số dư (AX / thn8) – Toán hạng nguồn 16 bit : AX ← (DXAX / thn 16) DX ← số dư (DXAX / thn 16) • Tác động cờ : Lệnh IDIV • Tương tự lệnh DIV làm việc số có dấu Nhóm lệnh xử lý logic AND OR XOR NOT... ES:[SI] mem Lệnh MUL • Dạng lệnh : MUL reg MUL mem • Giải thích : nhân số không dấu – Trường hợp toán hạng nguồn bit : AX ← AL * thn8 – Trường hợp toán hạng nguồn 16 bit : {DX AX} ← AX * thn 16 • Tác

Ngày đăng: 03/12/2015, 15:45

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan