Trong các lệnh xử lý của cpu, lệnh mul có tác dụng gì?

jj60 câu cấu trúc máy tính và hợp ngữ1.Loại chương trình chứa mã,dữ liệu và stack trong các segment riêng là?a.EXE b.Doc c.Com d.ASM2.Khi nạp một chương trình exe vào bộ nhớ để thực thi, trình nạp lưu địa chỉ của PSP trong các thanh ghi, địa chỉ của stack trong thanh ghi SS___và kích thước của stack trong thanh ghi SP__3.Lệnh___khôi phục word từ nơi mã SP trỏ tới trong stack vào thanh ghi CX và tầng SP4.Chỉ dẫn END__kết thúc định nghĩa chương trình5.Phát biểu DB 12 DUP(50) định nghĩa 12 byte được khởi động với giá trị___506.Giả sử Intel 8086 ở real mode,offset là 24h,thanh ghi segment chứa 0B500h,tính địa chỉ vật lýa.0B524h b.0B5024h c.24B5h d.240B5h7.Một chương trình COM hạn chế trong một_SEGMENT__và kích thướctối đa là___64K8.Lệnh để khởi động một thanh ghi với một địa chỉ offset là lệnha.PUSH b.MOVZX c.LEA d.MOVSX e. C&D9.Một địa chỉ_OFFSET__ bị giới hạn tới khoảng cách từ -32768 tới 32767 bye trong phạm vi cùng segment10.Cờ___ CF chứa một bít nhớ(0 hoặc 1) từ bit trật tự cao trong các thao tác toán học và một số lệnh dịch và quay.11.Cờ ___SF được set theo dấu sau 1 thao tác số học : dương set là 0 âm set là 1.12.Kí tự Hex cho phím Tab là 09 cho Line feed là A___và carriage returnlà__15_13.Chức năng_03H__ của ngắt 10h xác định vị trí con trỏ14.Mạch hỗ trợ nào không được tìm thấy trong hệ thống 8086 ở chế độ mina.Cache controller b.Clock generator c.Bus controller d.Trang lanch(k0 rõ nữa)15.Cờ D xác định hướng xử lý chuỗi: trái sang phải sử dụng lệnh__CLD_để xoá cờ D, phải sang trái sử dụng lệnh _STD__để set cờ D.16.Giá trị số dương lớn nhất đối với số có dấu trong thanh ghi 8 bit là_80__D17.Để nhân byte với byte, số bị nhân chứa trong thanh ghi_AX__,và số nhân là 1 byte trong bộ nhớ hoặc thanh ghi, sau khi nhân, tích số được chứa trong thanh ghi_DX,AX__18.Đối với phép chia, lệnh __DIV_xử lý dữ liệu không dấu, còn lệnh_IDIV_xử lý dữ liệu có dấu19.Lệnh AAA kiểm tra xem số Hex tận cùng bên phải của AL lớn hơn_9__hoặc cờ A có………………………… số Hex tận cùng bên trái trong ___AL20. Trong hệ thống vi xử lý Bus là:Truyền Dữ Liệu , Thông Tin21.Trong hệ thống vi xử lý, trước khi thực hiện chương trình được chứa tronga.Trong cổng vào ra b.Các bộ đệm trong vi xử lý c.Trên Bus dữ liệu d.Trong bộ nhớ bán dẫn22.Khi có hàng đợi lệnh chương trình sẽ thực hiện nhanh dơn do:a.Không mất chu kỳ lấy lệnh từ bộ nhớb.Quá trình lấy lệnh thực hiện đồng thời với quá trình thực hiện lệnhc.Quá trình thực hiện lệnh diễn ra nhanh hơnd.Quá trình lấy lệnh diễn ra nhanh hơn23.Để truy cập bộ nhớ CPU cung cấp địa chỉ gì cho bộ nhớa.Logic b.Vật lý c.Độ dời(offset) d.Đoạn(segment)24.Thanh ghi DX là một thanh gia.Đa năng b.Đoạn c.Địa chỉ d.Dữ liệu25.Nhóm các thanh ghi sau đây đều có thể sử dụng để giữ địa chỉ độ dời khi truy cập bộ nhớ dữ liệu?a.IP,SP,AH,AL b.CS,DS,ES,SS c.BX,BP,DI,SI d.AX,BX,CX,DX26.Thanh ghi nào được mặc định giữ số điểm trong các lệnh lặp?a.BX b.CX c.AX d.DX27.Các thanh ghi nào giữ kết quả trong các lệnh nhân chia 16bit?a.AX và BX b.AX và DI c.AX và DX d.AX và CX28.Cờ Zero(ZF) của CPU 80286 được lặp lên 1 khi:a.Kết quả các phép tính bằng 0b.Kết quả các phép tính khác 0c.Kết quả các phép tính lớn hơn 0d. Kết quả các phép tính nhỏ hơn 029.Các khai báo dữ liệu sau, khai báo nào không bị lỗia. Xon DB 1,2,3,fhb.Yes DB 4,7,h,9c.Rel DB 19,7,6,10,3d.Anh DB 9,3,8,7,030.Trong chế độ địa chỉ chỉ số nền, dữ liệu sử dụng trong lệnh nằm trong một ô nhớ có địa chỉ bằnga.Giá trị chứa trong thanh ghi BX hoặc BPb. Giá trị chứa trong thanh ghi DI hoặc SIc. Giá trị chứa trong thanh ghi BX hoặc BP cộng với trị chứa trong DI hoặc SI cộng với độ dời d. Giá trị chứa trong thanh ghi DI hoặc SI cộng với một số độ dời31.Sau khi thực hiện các lệnh MOV AH,05MOV AL,03XCHG AH,ALa.AH=03,AL=05 b.AH=AL=03 c.AH=AL=05 d.AH=05,AL=0332.(k0 rõ)thì sau khi thực hiện các lệnhMOV AL,3LEA BX,LPXFLATsẽ đượca.BX=1000H, AL=27H b.0000H,AL=27 c.BX=0027h,AL=0 d.BX=1000H,AL=1Bh33.Giả sữ AL=9, AH=7, sau khi thực hiện các lệnh sau AX sẽ có giá trị bằngADD AL,AHDAAADD AX,3030HADD AL,AHAAAa.0007h b.0037h c.3803h d.3037h34.Giả sử AX=9,BX=12 sau khi thực thi lệnh CMP AX,BX sẽ có:a.CF=0,ZF=0 b.CF=0,ZF=1 c.CF=1,ZF=0 d.CF=1,ZF=135.Giả sử AH=02,AL=03 sau khi chạy lệnh MUL AH sẽ được:a.AH=02 b.AH=06 c.AH=0 d.AH=0336.Giả sử AL chứa mã ASCII của một số từ 0 đến 9 sau lệnh AND AL,0FH thìa.AL=0 b.AL là mã BCD của số đóc.AL vẫn là mã ASCII của số đó d.AL=0FH37.Để đảo trạng thái các bit trong một thanh ghi có thểa.XOR nó với 00H b.OR nó với FFH c.AND nó với FFH d.XOR nó với FFH38.Giả sử AL=35H,CL=4 sau lệnh SHR AL,CL sẽ đượca.AL=5,CL=0 b.AL=3,CL=4 c.AL=3,CL=0 d.AL=5,CL=439.Lệnh JPE M chuyển điều khiển chương trình tới nhãn M khia.PF=1 b.ZF=0 c.ZF=1 d.PF=040.Sau lệnh LOOP các giá trị nào có thể bị thay đổia.BX và CF b.BX và ZF c.CX và CF d.CX và ZF41.Hàm 02 ngắt 21h của Dos là hàma.Trả điều khiển về hệ điều hànhb.Hiện một ký tự lên màn hìnhc.Hiện một chuỗi kí tự lên màn hìnhd.Nhập một ký tự từ bàn phím42.Bù 2 của sô 00101111 làa.10110111 b.01010100 c.11001000 d.1101000143.Hàng đợi lệnh cho phép bộ xử lý làm gìa.Cho qua các lệnh không mong muốnb.Xử lý nhiều lệnh tại một thời điểmc.Chờ cho lệnh kế được thực thid.Tìm trước và nạp các lệnh44.Stack segment chứaa.Bộ nhớ chỉ đọcb.Dữ liệu được định nghĩa của một chương trình bằng số,và vùng làm việcc.Các giá trị mà một chương trình cần lưu tạm thờid.Các lệnh máy để thực thi45.Ký hiệu nào chỉ ra rằng các kí tự theo sau nó là các chú thícha.Khoảng trắng b.Dấu phẩy c.Dấu sao d.Dấu chấm phẩy46.Để chạy từng lệnh trong đoạn chương trình dùng debug, ta dùng lệnha.R b.A c.P d.Q47.Trong một chương trình exe ta phảia.Khởi động giá trị cho thanh ghi AXb.Khởi động giá trị cho thanh ghi DSc.Không cần khởi động giá trị cho DS d.Cả ba câu trên đều sai48.Lệnh MOVSB___mỗi lần di chuyển một byte dữ liệu từ nguồn vào đích, đồng thời tăng hoặc giảm các thanh ghi DI,SI một đơn vị49.Để đưa nội dung từ công 1234h vào thanh ghi AL,ta dùng lệnha.IN 1234h b.IN AL,1234h c.MOV DX,1234h và IN AL,DX d.MOV AL,DX50.Để điều chỉnh phép trừ 2 số BCD dạng nén, ta dùng lệnha.DAS b.AAS c.AAA d.DAA51.Mục đích của tín hiệu BHE là gì ?a.Cho phép truy cập byte cao của một từb.Cho phép truy cập byte thấp hoặc wordc.Cho phép truy cập toàn bộ một wordd.Cho phép treo bus52.Tại sao 8086 có bus địa chỉ và dữ liệu được ghép kênha.Để tăng hiệu suất b.Cho phép bộ nhớ chậm hơnc.Để đơn giản hoá mạch bên ngoàid.Để tiết kiệm số chân của vi xử lý53.8086 có bus dữ liệu và địa chỉ được ghép kênh, làm thế nào để phân kênh.a.Mạch chốt b.Bus transceiver c.Bus controller d.Mạch phát xung clock54.Một chu kỳ bus của 8086 mất ít nhất 4 chu kỳ xung clock, nếu vi xử lýcó tần số xung clock là 4MHz, tốc độ tối đa của bus dữ liệu là :a.4Mb/s b.4MB/s c.2MB/s d.20MB/s55.Cái gì sau đây không phải là đặc điểm của 8086a.Hoàn toàn tương thích ngược với 8086b.Bộ nhớ vật lý 16MBc.Hỗ trợ real mode và protected moded.Các thanh ghi đa dụng 32 bit56.Protected mode trong 80286 thực hiện để hỗ trợa.Các hệ điều hành đa nhiệmb.Over processesc.Bộ nhớ cached……Security 57.Mục đích chính của bộ xử lý 8038a.Điều khiển bộ nhớ cacheb.truy cập đĩa…nhanhc.Thực hiện nhanh các thao tác….d.Tưng bộ nhớ vật lý58.Để dịch ngược nội dung bộ nhớ ra mã hợp ngữ ta dùng lệnh :a.A b.R c.U d.F59.Dùng lệnh….để nạp nội dung của tập tin COM vào bộ nhớ ở địa chỉ offset…a.N 300 b.I 100 c.W 100 d.P 10060.Để thi hành lệnh trong debug ta dung lệnha.P b.T c.R d.Cả a và b

Yêu cầu:Trình bày sơ đồ khối chức năng bên trongCPU 8086, đặc điểm chức năng các thanh ghitrong CPU 8086. Cấu trúc lệnh cùng tập lệnhcủa CPU 8086.Thành viên trong nhóm :Nguyễn Thị Lan Anh ( nhóm trưởng )Vũ Văn DũngNguyễn Quang HảiNguyễn Văn TrườngTrịnh Quang Trường1MỤC LỤCTrang1 CẤU TRÚC BÊN TRONG CỦA 8086..............................................................31.1 sơ đồ khối.....................................................................................................31.2 đơn vị giao tiếp Bus BIU và đơn vị thực thi EU.........................................31.3 các thanh ghi.................................................................................................42 TẬP LỆNH CỦA 8086.......................................................................................72.1 Khái niệm lệnh, mã hoá lệnh và quá trình thực hiện lệnh.........................72.2 Cấu trúc lệnh của 8086................................................................................82.3 Tập lệnh của 8086.........................................................................................102.3.1 Các lệnh trao đổi dữ liệu.....................................................................102.3.2 Các lệnh tính toán số học và logic......................................................122.3.3 Điều khiển, rẽ nhánh và lặp................................................................152.3.4 Điều khiển vi xử lý...............................................................................172.4 Các chế độ địa chỉ của 8086.........................................................................172.4.1 Chế độ địa chỉ thanh ghi.....................................................................172.4.2 Chế độ địa chỉ tức thì..........................................................................182.4.3 Chế độ địa chỉ trực tiếp.......................................................................182.4.4 Chế độ địa chỉ gián tiếp qua thanh ghi...............................................182.4.5 Chê độ địa chỉ tương đối cơ sở...........................................................182.4.6 Chế độ địa chỉ tương đối chỉ số...........................................................192.4.7 Chế độ địa chỉ tương đối chỉ số cơ sở.................................................202.4.8 Phương pháp bỏ ngầm định thanh ghi đoạn.....................................202BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086BỘ VI XỬ LÝ INTEL 80861. CẤU TRÚC BÊN TRONG CỦA 8086Intel 8086 là bộ vi xử lý 16 bít đầu tiên của Intel và là vi xử lý đầu tiên hỗ trợ tậplệnh x86. Vi xử lý được sử dụng trong nhiều lĩnh vực khác nhau, nhất là trong các máyIBM PC/XT. Các bộ vi xử lý thuộc họ này vẫn được sử dụng rộng rãi trong một thời giandài do tính kế thừa của các sản phẩm trong họ x86. Các chương trình viết cho 8086 vẫncó thể chạy trên các hệ thống tiên tiến sau này.1.1Sơ đồ khốiHình 2-1. Sơ đồ khối 8086Trong sơ đồ khối cho như trên Hình 2-1, vi xử lý 8086 có hai khối chính BIU vàEU. Về chi tiết, vi xử lý này bao gồm các đơn vị điều khiển, số học và lô-gíc, hàng đợilệnh và tập các thanh ghi. Chi tiết các khối và đơn vị chức năng này được trình bày trongphần tiếp sau.1.2Đơn vị giao tiếp bus BIU và đơn vị thực thi EUTheo sơ đồ khối trên Hình 2-1, CPU 8086 có 2 khối chính: Đơn vị giao tiếp BIU(Bus Interface Unit) và đơn vị thực hiện EU (Execution Unit). Việc chia CPU ra thành 23BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086phần làm việc đồng thời có liên hệ với nhau qua đệm lệnh làm tăng đáng kể tốc độ xử lýcủa CPU. Các bus bên trong CPU có nhiệm vụ chuyển tải tín hiệu giữa các khối. Hệthống bus trong của CPU gồm bus dữ liệu 16 bít của ALU, bus điều khiển của EU và bustrong của BIU. Các bộ đệm được sử dụng để kết nối giữa bus trong CPU với bus ngoài(bus hệ thống) nhằm nâng cao tính tương thích cho phối ghép.BIU đưa ra địa chỉ, đọc mã lệnh từ bộ nhớ, đọc/ghi dữ liệu với bộ nhớ, hoặc cổngvào ra. Nói cách khác BIU chịu trách nhiệm đưa địa chỉ ra bus và trao đổi dữ liệu vớibus. Mã lệnh đọc từ bộ bộ nhớ được BIU nạp vào bộ đệm lệnh (còn được gọi là hàngđợi lệnh) với dung lượng 6 byte, hoạt động theo nguyên tắc FIFO dùng để chứa các mãlệnh chờ EU xử lý.EU bao gồm một đơn vị điều khiển, khối này có bộ giải mã lệnh. Mã lệnh từ bộđệm lệnh được đưa đến đầu vào của bộ giải mã, nơi lệnh được giải mã kiểu và sinh các vithao tác. Các thông tin thu được từ đầu ra của bộ giải mã sẽ được đưa đến mạch tạo xungđiều khiển, kết quả là ta thu được các dãy xung khác nhau trên kênh điều khiển (tuỳ theomã lệnh) để điều khiển hoạt động của các bộ phận bên trong và bên ngoài CPU. Ngoàira, EU còn có khối số học và lôgic (Arithmetic and Logic Unit - ALU) dùng để thực hiệncác thao tác khác nhau với các toán hạng của lệnh. Tóm lại, EU sẽ cung cấp thông tin vềđịa chỉ cho BIU để khối này đọc lệnh và dữ liệu, còn bản thân EU thì giải mã lệnh vàthực hiện lệnh.1.31.3aCác thanh ghiCác thanh ghi đoạnBộ vi xử lý 8086 chia bộ nhớ cấp cho một chương trình máy tính thành các đoạn(Segment) theo nội dung chúng lưu trữ, như đoạn chứa mã lệnh, đoạn chứa dữ liệu,... Đểquản lý các đoạn nhớ, bộ vi xử lý 8086 sử dụng các thanh ghi 16 bít lưu địa chỉ bắt đầucủa các đoạn nhớ và chúng được gọi là các thanh ghi đoạn (Segment Registers). Có 4thanh ghi đoạn, gồm:− Thanh ghi đoạn mã CS (Code-Segment)− Thanh ghi đoạn dữ liệu DS (Data Segment)− Thanh ghi đoạn ngăn xếp SS (Stack Segment)− Thanh ghi đoạn dữ liệu phụ ES (Extra Segment).Bốn thanh ghi đoạn lưu địa chỉ bắt đầu của bốn đoạn nhớ cùng tên, gồm đoạn mãCS, đoạn dữ liệu DS, đoạn ngăn xếp SS và đoạn mở rộng ES. Dung lượng lớn nhất củamỗi đoạn nhớ này là 64 KByte. Tại một thời điểm nhất định bộ vi xử lý chỉ làm việc vớimột trong bốn đoạn nhớ kể trên. Ngoài địa chỉ bắt đầu của đoạn lưu trong thanh ghiđoạn, vi xử lý 8086 sử dụng thêm một thanh ghi khác lưu địa chỉ của ô nhớ cần truy nhậptrong đoạn. Thanh ghi này gọi là thanh ghi lệch (offset register). Chi tiết về dạng địa chỉô nhớ được trình bày ở mục 1.2.4BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 80861.3bCác thanh ghi đa năngTrong khối EU có bốn thanh ghi đa năng 16 bít, gồm AX, BX, CX, DX. Mỗithanh ghi đa năng có thể được dùng cho nhiều mục đích khác nhau, nhưng mỗi thanh ghicũng đượcgán một chức năng chuyên biệt riêng. Chính vì vậy chúng được gán những tên có ýnghĩa. Cụ thể:− AX (Accumulator): thanh ghi tích lũy. Các kết quả của các thao tác thườngđược chứa ở AX (kết quả của phép nhân, chia).− BX (Base): thanh ghi cơ sở, thường dùng để chứa địa chỉ cơ sở của một dãy các ônhớ.− CX (Count): thanh đếm. CX thường được dùng để chứa số lần lặp trongtrường hợp các lệnh LOOP (lặp).− DX (Data): thanh ghi dữ liệu. DX tham gia các thao tác của phép nhânhoặc chia các số 16 bít. DX thường dùng để chứa địa chỉ của các cổngtrong các lệnh vào/ ra dữ liệu.Một điều đặc biệt là mỗi thanh ghi đa năng có thể sử dụng như một thanh ghi 16 bíthoặc tách ra thành 2 thanh ghi 8 bít độc lập. AX có thể tách thành 2 thanh ghi 8 bít, gồmAH và AL, với H chỉ 8 bít phần cao, L chỉ 8 bít phần thấp. Tương tự BX, CX, DX có thểtách thành BH và BL, CH và CL, DH và DL tương ứng.1.3cCác thanh ghi con trỏ và chỉ sốTrong vi xử lý 8086 còn có ba thanh ghi con trỏ và hai thanh ghi chỉ số 16 bít, gồm:− IP: con trỏ lệnh (Instruction Pointer). IP luôn trỏ vào lệnh tiếp theo sẽ đượcthực hiện nằm trong đoạn mã CS. Địa chỉ đầy đủ của lệnh tiếp theo có dạngCS:IP và được xác định như trình bày trong phần 1.2.− BP: con trỏ cơ sở (Base Pointer). BP luôn trỏ vào một dữ liệu nằm trongđoạn ngăn xếp SS. Địa chỉ đầy đủ của một phần tử trong đoạn ngăn xếp códạng SS:BP và được xác định như trình bày trong phần 1.2.− SP: con trỏ ngăn xếp (Stack Pointer). SP luôn trỏ vào đỉnh hiện thời củangăn xếp nằm trong đoạn ngăn xếp SS. Địa chỉ đỉnh ngăn xếp có dạngSS:SP và được xác định như trình bày trong phần 1.2.− SI: chỉ số gốc hay nguồn (Source Index). SI chỉ vào dữ liệu trong đoạn dữliệu DS mà địa chỉ cụ thể đầy đủ có dạng DS:SI và được xác định như trìnhbày trong phần 1.2.− DI: chỉ số đích (Destination Index). DI chỉ vào dữ liệu trong đoạn dữ liệuDS (hoặc ES) mà địa chỉ cụ thể đầy đủ có dạng DS:DI (hoặc ES:DI) vàđược xác định như trình bày trong phần 1.2.5BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086Riêng trong các lệnh thao tác với dữ liệu kiểu chuỗi thì cặp ES:DI luôn ứng vớiđịa chỉ của phần tử thuộc chuỗi đích còn cặp DS:SI ứng với địa chỉ của phần tử thuộcchuỗi gốc.1.3dThanh ghi cờ FR (flag register)Đây là thanh ghi khá đặc biệt trong CPU, mỗi bít của nó được dùng để phản ánhmột trạng thái nhất định của kết quả phép toán do ALU thực hiện hoặc một trạng tháihoạt động của EU. Dựa vào các cờ này, người lập trình có thể có các lệnh thích hợp tiếptheo cho bộ vixử lý (các lệnh nhảy có điều kiện). Thanh ghi cờ gồm 16 bít nhưng người ta chỉ dùng hết9 bít của nó để làm các bít cờ như Hình 2-2.Hình 2-2. Thanh ghi cờ− U là các bít không sử dụng.− C hoặc CF (Carry Flag): cờ nhớ. CF = 1 khi có nhớ hoặc mượn từ bít cónghĩa lớn nhất MSB (Most Significant Bit).− P hoặc PF (Parity Flag): cờ chẵn lẻ. PF phản ánh tính chẵn lẻ của tổng sốbít 1 có trong kết quả. Cờ PF =1 khi tổng số bít 1 trong kết quả là lẻ (oddparity) và PF =0 khi tổng số bít 1 trong kết quả là chẵn (even parity).− A hoặc AF (Auxiliary Carry Flag): cờ nhớ phụ rất có ý nghĩa khi ta làmviệc với các số BCD (Binary Coded Decimal). AF = 1 khi có nhớ hoặcmượn từ một số BCD thấp (4 bít thấp) sang một số BCD cao (4 bít cao).− Z hoặc ZF (Zero Flag): cờ rỗng. ZF =1 khi kết quả = 0 và ZF =0 khi kết quả  0.− S hoặc SF (sign flag): cờ dấu. SF = 1 khi kết quả âm và SF = 0 khi kết quả khôngâm.− O hoặc OF (Overflow Flag): cò tràn. OF = 1 khi kết quả là một số bù 2vượt qua ngoài giới hạn biểu diễn dành cho nó.Trên đây là 6 bít cờ trạng thái phản ánh các trạng thái khác nhau của kết sau mộtthao tác nào đó, trong đó 5 bít cờ đầu thuộc byte thấp của thanh cờ là các cờ giống nhưcủa bộ vi xử lý 8 bít 8085 của Intel. Chúng được lập hoặc xoá tuỳ theo các điều kiện cụthể sau các thao tác của ALU. Ngoài ra, bộ vi xử lý 8086 còn có các cờ điều khiển sauđây (các cờ này được lập hoặc xoá bằng các lệnh riêng):− T hoặc TF (Trap Flag): cờ bẫy. TF = 1 thì CPU làm việc ở chế độ chạy6BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086từng lệnh (chế độ này dùng khi cần tìm lỗi trong một chương trình).− I hoặc IF (Interrupt Enable Flag): cờ cho phép ngắt. IF = 1 thì CPU chophép các yêu cầu ngắt (che được) và IF = 0 thì CPU cấm các yêu cầu ngắt.− D hoặc DF (Direction Flag): cờ hướng. DF = 1 khi CPU làm việc với chuỗiký tự theo thứ tự từ phải sang trái, hoặc giảm địa chỉ (vì vậy D chính là cờlùi) và DF = 0 khi CPU làm việc với chuỗi ký tự theo thứ tự từ trái sangphải, hoặc tăng địa chỉ.2. TẬP LỆNH CỦA 80862.1Khái niệm lệnh, mã hoá lệnh và quá trình thực hiện lệnhLệnh của bộ vi xử lý được ghi bằng các ký tự dưới dạng gợi nhớ (mnemonic) đểngười sử dụng để nhận biết. Đối với bản thân bộ vi xử lý thì lệnh được mã hoá dưới dạngcác số 0 và 1 (còn gọi là mã máy) vì đó là dạng biểu diễn thông tin duy nhất mà máyhiểu được. Do lệnh được cho dưới dạng mã nên sau khi nhận lệnh, bộ vi xử lý phải thựchiện việc giải mã lệnh rồi sau đó mới thực hiện lênh.Một lệnh có thể có độ dài một vài byte tuỳ theo thiết kế bộ vi xử lý. Số lượng cácbít n dùng để mã hóa lệnh (opcode) cho biết số lượng tối đa các lệnh (2n) có trong bộ vixử lý. Với 1 byte bộ vi xử lý có thể mã hoá được tối đa 256 lệnh. Trong thực tế việc mãhoá lệnh cho bộ vi xử lý là rất phức tạp và bị chi phối bởi nhiều yếu tố khác. Đối với bộvi xử lý 8086 một lệnh có thể có độ dài từ 1 đến 6 byte. Ta sẽ chỉ lấy trường hợp lệnhMOV để giải thích cách mã hóa lệnh nói chung của 8086.Lệnh MOV đích, gốc dùng để chuyển dữ liệu giữa thanh ghi và ô nhớ. Chỉ nguyênvới các thanh ghi của 8086, nếu ta lần lượt đặt các thanh ghi vào các vị trí toán hạng đíchvà toán hạng gốc ta thấy đã phải cần tới rất nhiều mã lệnh khác nhau để mã hoá tổ hợpcác này.Hình vẽ trên biểu diễn dạng thức các byte dùng để mã hoá lệnh MOV. Như vậy đểmã hoá lệnh MOV cần ít nhất là 2 byte, trong đó 6 bít của byte đầu dùng để chứa mãlệnh. Đối với các lệnh MOV, bít W dùng để chỉ ra rằng 1 byte (W = 0) hoặc 1 từ (W =1) sẽ được chuyển. Trong các thao tác chuyển dữ liệu, một toán hạng luôn bắt buộc phảilà thanh ghi. Bộ vi xử lý dùng 2 hoặc 3 bít (phần REG) để mã hoá các thanh ghi trongCPU như sau:7BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086Bít D dùng để chỉ hướng đi của dữ liệu. D = 1 thì dữ liệu đi đến thanh ghi cho bởicác bít REG, D = 0 thì dữ liệu đi ra khỏi thanh ghi cho bởi các bít REG. 2 bít MOD (chếđộ) cùng với 3 bít R/M (thanh ghi/bộ nhớ) tạo ra 5 bít dùng để chỉ ra chế độ địa chỉ chocác toán hạng của lệnh.Bảng dưới đây cho ta thấy cách mã hoá các chế độ địa chỉ (cách tìm ra các toánhạng bằng các bít này).Ghi chú:− addr8, addr16 tương ứng với địa chỉ 8 và 16 bít− Các giá trị cho trong các cột 2, 3, 4 (ứng với MOD =00, 01, 10) là các địa chỉ hiệudụng (EA – Effective address) sẽ được cộng với DS để tạo ra địa chỉ vật lý (riêngBP phải được cộng với SS).Cấu trúc lệnh của 8086Một tập lệnh (ínstruction set ), hoặc kiến trúc tập lệnh (instruction set architecture –ISA ) là một phần của kiến trúc máy tính liên quan tới việc thực thi chương trình, nó baogồm các kiểu dữ liệu; các lệnh;các thanh ghi; phương pháp định địa chỉ; kiến trúc bộ nhớ;ngắt; bẫy lỗi và việc vào\ra với bên ngoài.2.2Một kiến trúc tập lệnh bao gồm cả việc đặc tả một tập các mã thi hành ( opcode )hay còn gọi là ngôn ngữ máy và được thi hành bởi 1 loại vi xử lý riêng biệt.Một tập lệnh của máy tính có thể được chia làm nhiều nhóm lệnh với các chứcnăng thực hiện các thao tác khác nhau: lệnh thao tác, lệnh truy cập bộ nhớ, lệnh điềukhiển, lệnh đặc quyền, lệnh vectơ.8BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086 Một lệnh của vi xử lý 86 có dạng tổng quát như sau :< Mã gợi nhớ><Đích>,<Nguồn>Chú ý: các lệnh có thể không có nguồn, không có đích hoặc không có cả đích vànguồn. Một lệnh khi đã được giải mã ở dạng mã máy thường có định dạng sau :OP-CODEADDRESS(ES)OP-CODE là phần mã thi hành.ADDRESS(ES) có thể là 0,1,2 hoặc 3 trường địa chỉ để xác định địa chỉ của cáctoán hạng có trong lệnh.Một tập lệnh trong máy tính gồm các lệnh có định dạng khác nhau, song phần OPCODE là không thể thiếu, còn phần Address có thể có hoặc khoongtuyf theo số toán hạngxuất hiện trong câu lệnh. Và số toán hạng xuất hiện trong câu lệnh tùy theo câu lệnh cũngnhư tùy theo kiến trúc tập lệnh.Ví dụ trong cpu 8086 :•Mã lệnhLệnh NOPCâu lệnh không có toán hạng. CPU nghỉ 1 chu kỳ máy, trong địnhdạng lệnh ở mã này không có trường address.•Mã_lệnh toán_hạng_đíchLệnh INC AXCâu lệnh có 1 toán hạng. Tăng nội dung thanh chứa lên 1, trong địnhdạng lệnh của mã này có 1 trường address.•Mã_lệnh toán_hạng_đích, toán_hạng_nguồnLệnh ADD AX, 5AX=AX+5. Trong định dạng trên mã này có 2 trường address.Và trong máy tính Intel RISC 860, có lệnh với định dạng:•Mã_lệnh toán_hạng_đích, toán_hạng_nguồn, kết_quả.OR 25, R0, R8; OR 25 với R0 và lưu kết quả vào R8.9BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086Tập lệnh của 80862.3Bộ xử lý 8086 có tập lệnh gồm 111 lệnh, chiều dài của lệnh từ 1 byte đến vài byte.Tập lệnh 8086 hỗ trợ các nhóm thao tác căn bản như dưới đây.Các lệnh trao đổi dữ liệu2.3.1Các câu lệnh trong nhóm trao đổi dữ liệu cho phép trao đổi dữ liệu giữa thanh ghivà ô nhớ hay giữa thiết bị vào/ra với ô nhớ hoặc thanh ghi. Kích cỡ dữ liệu cho phép vớicác câu lệnh này là byte (8 bít) hoặc word (16 bít). Như vậy các câu lệnh trao đổi dữ liệugiúp nạp dữ liệu cần thiết cho các thao tác tính toán của vi xử lý. Ngoài ra, các lệnh nàycho phép lưu các kết quả tính toán ra bộ nhớ hoặc các thiết bị ngoại vi.Bảng 2-2. Các lệnh trao đổi dữ liệu2.3.1.aMã gợi nhớMOVChứcDi chuyển byte hay wordnănggiữa thanh ghi và ô nhớIN, OUTĐọc, ghi một byte hay word giữa cổng và thanh ghiLEANạp địa chỉ hiệu dụngPUSH, POPNạp vào, lấy ra một word trong ngăn xếp.XCHGHoán đổi byte hay wordMOV – Chuyển 1 byte hayword Viết lệnh: MOV Đích,Gốc.Mô tả:Đích ← GốcTrong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhaunhưng phải có cùng độ dài và không được phép đồng thời là 2 ô nhớ hoặc 2 thanh ghiđoạn.Lệnh này không tác động đến cáccờ. Ví dụ:MOV AL, 74H; AL ← 74MOV CL, BL; CL ← BLMOV DL, [SI]; DL ← [DS:SI]MOV AL, Table [BX] ; AL ← [DS:[Table+BX]]2.3.1.bLEA - Nạp địa chỉ hiệu dụng vào thanhghi Viết lệnh:LEA Đích, GốcTrong đó:10BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086+ Đích thường là một trong các thanh ghi: BX, CX, DX, BP, SI, DI.+ Gốc là tên biến trong đoạn DS được chỉ rõ trong lệnh hoặc ô nhớ cụ thể.Mô tả: Đích ← Địa chỉ lệch của Gốc,hoặc Đích ← Địa chỉ hiệu dụngcủa GốcĐây là lệnh để tính địa chỉ lệch của biến hoặc địa chỉ của ô nhớ chọn làm gốc rồinạp vào thanh ghi đã chọn.Lệnh này không tác động đến cáccờ. Ví dụ:LEA DX, MSG; nạp địa chỉ lệch của biến MSG vàoDX. LEA CX, [BX] [DI] ; nạp vào CX địa chỉ hiệu dụng; do BX và DI chỉ ra: EA = BX+DI2.3.1.cIN- Đọc dữ liệu từ cổng vào thanh ghiACC. Viết lệnh: IN ACC, PortMô tả: ACC ← [Port]Trong đó [Port] là dữ liệu đọc được từ cổng có địa chỉ là Port. Port là địa chỉ 8 bítcủa cổng, nó có thể có các giá trị trong khoảng 00H…FFH. Như vậy có thể có các khảnăng sau:+Nếu ACC là AL thì dữ liệu 8 bít được đưa vào từ cổng Port.+Nếu ACC là AX thì dữ liệu 16 bít được đưa vào từ cổng Port và cổng Port+1.Địa chỉ cổng có thể được lưu trong thanh ghi DX. Cách này địa chỉ cổng hoámềm dẻo hơn. Lúc này địa chỉ cổng nằm trong dải 0000H. . FFFFH và câu lệnh có dạng:IN ACC, DXTrong đó DX phải được gắn từ trước giá trị ứng với địa chỉ cổng. Lệnh này khôngtác động đến các cờ.2.3.1.dOUT - Ghi dữ liệu từ Acc racổng Viết lệnh: OUT Port, AccMô tả:Acc → [port]Trong đó [port] là dữ liệu được ghi ra cổng có địa chỉ là Port. Port là địa chỉ 8 bítcủa cổng, nó có thể có các giá trị trong khoảng 00H. . . FFH. Như vậy ta có thể có cáckhả năng sau:+ Nếu Acc là AL thì dữ liệu 8 bít được đưa ra cổng port.+ Nếu Acc là AX thì dữ liệu 16 bít được đưa ra cổng port và cổng port +1.Có một cách khác để biểu diễn địa chỉ cổng 16 bít là thông qua thanh ghi DX theo11BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086dạng: OUT DX, AccTrong đó DX phải được gán từ trước giá trị ứng với địa chỉ cổng. Lệnh này khôngtác động đến các cờ.Các lệnh tính toán số học và lô gíc2.3.2Đây là các nhóm lệnh thực hiện các tính toán chủ yếu của vi xử lý 8086.Bảng 2-3. Các lệnh số học và lô gícMã gợi nhớNOTChức năngPhép Đảo (bù một) byte hay wordANDPhép Và byte hoặc wordORPhép Hoặc byte hoặc wordXORPhép Hoặc loại trừ byte hoặc wordSHL, SHRADD, SUBDịch trái, dịch phải lôgíc byte hay word. Sốbước 1 hoặc do CL xác địnhDịch trái, dịch phải số học byte hay word. Sốbước 1 hoặc do CL xác địnhQuay trái, quay phải byte hay word. Số bước1 hoặc do CL xác địnhCộng trừ byte hoặc wordADC, SBBCộng trừ byte hoặc word có nhớINC, DECTăng, giảmNEGĐảo byte hoặc word (bù 2)CMPSo sánh hai byte hoặc wordMUL, DIVNhân, chia byte hoặc word không dấuIMUL, IDIVNhân chia byte hoặc word có dấuSAL, SARROL, ROR2.3.2.aADD-Cộng 2 toán hạngViết lệnh: ADD Đích, Gốc.Mô tả: Đích ← Đích +Gốc.Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khácnhau,nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là 2 ô nhớ vàcũng không được là thanh ghi đoạn.Cập nhật: AF, CF, PF, SF, ZFVí dụ:12BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086ADD AX, BX2.3.2.b; AX ← AX + BXSUB-Trừ 2 toán hạngViết lệnh: SUB Đích,Gốc.Mô tả: Đích ← Đích - Gốc.Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau,nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là 2 ô nhớ vàcũng không được là thanh ghi đoạn.Cập nhật: AF, CF, PF, SF, ZFVí dụ:2.3.2.cSUB AX, BX; AX ← AX - BXMUL - Nhân số không dấuViết lệnh: MUL GốcTrong đó toán hạng Gốc là số nhân và có thể tìm được theo các chế độ địa chỉ khácnhau.Mô tả: tuỳ theo độ dài của toán hạng Gốc ta có 2 trường hợp tổ chức phép nhân,toánhạng số nhân và nơi chứa kết quả:Nếu Gốc là số 8 bít: AL × Gốc,số bị nhân phải là số 8 bít để trongAL. sau khi nhân: AX ← tích,Nếu Gốc là số 16 bít: AX × Gốc,số bị nhân phải là số 16 bít để trongAX. sau khi nhân: DXAX ← tích.Nếu byte cao (hoặc 16 bít cao) của 16 (hoặc 32) bít kết quả chứa 0 thì CF=OF=0Như vậy các cờ CF và OF cho biết có thể bỏ đi bao nhiêu số 0 trong kết quả. Ví dụ:Nếu cần nhân một số 8 bít với một số 16 bít, số 16 bít đặt tại Gốc và số 8 bít ở AL. Số 8bít này ở AL cần phải được mở rộng sang AH bằng cách gán AH=0 để làm cho số bịnhân nằm trong AX. Sau cùng chỉ việc dùng lệnh MUL Gốc và kết quả có trong cặpDXAX.Cập nhật: CF, OF.Không xác định: AF, PF, SF, ZF.13BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086Ví dụ: Tính 10 x 302.3.2.dMOV AL, 10; AL ← 10MOV BL, 30; BL ← 30MUL BL; AX ← AL x BL = 10 × 30 = 300DIV – Chia nguyên 2 số không códấu Viết lệnh: DIV GốcTrong đó toán hạng Gốc là số chia và có thể tìm được theo các chế độ địa chỉ khácnhau.Mô tả: tuỳ theo độ dài của toán hạng gốc ta có 2 trường hợp bố trí phép chia, toánhạngsố bị chia và nơi lưu kết quả:− Nếu Gốc là số 8 bít: AX : Gốc. Số bị chia phải là số không dấu 16 bít đểtrong AX. Kết quả: thương lưu trong AL và phần dư lưu trong AH.− Nếu Gốc là số 16 bít: DXAX : Gốc. Số bị chia phải là số không dấu 32 bítđể trong cặp thanh ghi DXAX. Kết quả: thương lưu trong AX và phần dưlưu trong DX.− Nếu Gốc = 0 hoặc thương thu được lớn hơn FFH hoặc FFFFH (tuỳ theo độdài của toán hạng Gốc) thì 8086 thực hiện lệnh ngắt INT 0.Không xác định: AF, CF, OF, PF, SF, ZF.Ví dụ: Tính 300 : 102.3.2.eMOV AX, 300; AX ← 10MOV BL, 10; BL ← 30DIV BL; AX : BL, AL ← 30, AH ← 0CMP- So sánh 2 byte hay 2word Viết lệnh: CMP Đích, Gốc.Mô tả: Đích – Gốc.Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khácnhau.Nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là 2 ô nhớ.Lệnh này chỉ tạo các cờ, không lưu kết quả so sánh, sau khi so sánh các toán hạngkhông bị thay đổi. Lệnh này thường được dùng để tạo cờ cho các lệnh nhảy có điều kiện(nhảy theo cờ).Các cờ chính theo quan hệ đích và gốc khi so sánh 2 số không dấu:14BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086CFZFSFĐích = Gốc010Đích > Gốc000Đích < Gốc101Cập nhật: AF, CF, OF, PF, SF, ZF.2.3.2.fAND - Phép và 2 toán hạngViết lệnh: AND Đích, GốcMô tả: Đích - Đích, Gốc.Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau.Nhưng phải chứa dữ liệu cùng độ dài và không được phép đồng thời là 2 ô nhớ và cũngkhông được là thanh ghi đoạn. Phép AND thường dùng để che đi/giữ lại một vài bít nàođó của một toán hạng bằng cách nhân logic toán hạng đó với toán hạng tức là có các bít0/1 ở các chỗ cần che đi/giữ nguyên tương ứng (toán hạng lúc này còn được gọi là mặtnạ).Xoá: CF, OF.Cập nhật: PF, SF, ZF, PF chỉ có nghĩa khi toán hạng là 8 bít.Không xác định: AF.Ví dụ:AND AL, BL ; nhân AL với BL theo từng bít, kết quả lưu vàoAL. AND BL, 0FH ; xóa 4 bít cao của BL.2.3.3Điều khiển, rẽ nhánh và lặpCác câu lệnh thuộc nhóm này cho phép thay đổi trật tự thực hiện các câu lệnh bêntrong chương trình.Bảng 2-4. Các lệnh rẽ nhánh và lặp tiêu biểuMã gợi nhớChức năngJMPNhảy không điều kiệnJA (JNBE)Nhảy nếu lớn hơnJAE (JNB)Nhảy nếu lớn hơn hoặc bằngJB (JNAE)Nhảy nếu bé hơnJBE (JNA)Nhảy nếu bé hơn hoặc bằngJE (JZ)Nhảy nêu bằngJC, JNCNhảy nếu cờ nhớ đặt, xóaJO, JNONhảy nếu cờ tràn đặt, xóa15BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086JS, JNSNhảy nếu cờ dấu đặt, xóaLOOPLOOPE (LOOPZ)Lặp không điều kiện, số lần lặp do CX xácđịnhLặp nếu bằng (cờ không) hoặc số lần lặp doCX xác địnhLOOPNE(LOOPNZ)Lặp nếu không bằng (cờ không xóa) hoặc sốlần lặp do CX xác địnhCALL, RETGọi hàm, trở về từ hàmINTGọi ngắt mềmIRETQuay trở về từ đoạn chương trình ngắt2.3.3.a JMP - Nhảy (vô điều kiện) đến một đích nào đóLệnh này khiến cho bộ vi xử lý 8086 bắt đầu thực hiện một lệnh mới tại địa chỉđược chỉ định trong lệnh. Lệnh này phân biệt nhảy xa và nhảy gần theo vị trí của câulệnh mới. Tuỳ thuộc vào độ dài của bước nhảy chúng ta phân biệt các kiểu lệnh nhảyngắn, nhảy gần và nhảy xa với độ dài lệnh khác nhau. Lệnh nhảy ngắn là lệnh nhảytương đối đến nhãn shortlabel. Nơi đến phải nằm trong phạm vi từ -128 đến +127 so vớivị trí của lệnh nhảy. Toán hạng nguồn trong lệnh chỉ là byte độ dời để cộng thêm vàothanh ghi IP. Byte độ dời này được mở rộng dấu trước khi cộng vào thanh ghi IP.- Ví dụ :JMP SHORT 18hJMP 0F008hJMP DWORD PTR [3000h]Lệnh nhảy gần tương tự lệnh nhảy ngắn, nhưng khoảng nhảy phải nằm trong phạm vitừ-32768 đến +32767 so với vị trí của lệnh nhảy. Lệnh nhảy xa là lệnh nhảy đến vị trí bấtkỳ được biểu diễn bằng địa chỉ đầy đủ của ô nhớ theo dạng địa chỉ đoạn:địa chỉ lệch.Lệnh này không tác động đến các cờ.2.3.3.bLOOP -Lặp lại đoạn chương trình do nhãn chỉ ra cho đến khiCX=0 Viết lệnh:LOOP NHANLệnh này dùng để lặp lại đoạn chương trình (gồm các lệnh nằm trong khoảng từnhãn NHAN đến hết lệnh LOOP NHAN) cho đến khi số lần lặp CX=0. Điều này cónghĩa là trước khi vào vòng lặp số lần lặp mong muốn phải được nạp vào thanh ghi CXvà sau mỗi lần thực hiện lệnh LOOP NHAN thì đồng thời CX tự động giảm đi một CX←CX-1).Lệnh này không tác động đến các cờ.16BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086Điều khiển vi xử lý2.3.4Các câu lệnh này tác động lên thanh ghi cờ làm thay đổi trạng thái hoạt động của vixử lý.Bảng 2-5. Các lệnh điều khiển vi xử lý tiêubiểuMã gợi nhớ2.4Chức năngSTC, CLCLập, xóa cờ nhớSTD, CLDLập, xóa cờ hướngSTI, CLILập, xóa cờ cho phép ngắtPUSHF, POPFNOPNạp vào, lấy ra thanh ghi cờ tới/từ ngănxếpKhông làm gì cảWAITChờ tín hiệu TESTHLTTreo vi xử lýCác chế độ địa chỉ của 8086Chế độ địa chỉ (addressing mode) là cách để CPU tìm thấy toán hạng cho các lệnhcủa nó khi hoạt động. Một bộ vi xử lý có thể có nhiều chế độ địa chỉ. Các chế độ địa chỉnày được xác định ngay từ khi chế tạo ra bộ bi xử lý và sau này không thể thay đổi được.Bộ vi xử lý 8086 và cả họ 80x86 nói chung có 7 chế độ địa chỉ sau:Chế độ địa chỉ thanh ghi (register addressing mode).Chế độ địa chỉ tức thì (immediate addressing mode).Chế độ địa chỉ trực tiếp (direct addressing mode).Chế độ địa chỉ gián tiếp qua thanh ghi (register indirect addressing mode).Chế độ địa chỉ tương đối cơ sở (based indexed relative addressing mode).6. Chế độ địa chỉ tương đối chỉ số (indexed relative addressing mode).7. Chế độ địa chỉ tương đối chỉ số cơ sở (based indexed relative addressing mode).1.2.3.4.5.2.4.1Chế độ địa chỉ thanh ghiTrong chế độ địa chỉ này, người ta dùng các thanh ghi bên trong CPU như là cáctoán hạng để chứa dữ liệu cần thao tác. Vì vậy khi thực hiện lệnh có thể đạt tốc độ truynhập cao hơn so với các lệnh có truy nhập đên bộ nhớ.Ví dụ 2-1MOV BX, DX ; chuyển nội dung DX vào17BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086BX MOV DS, AX; chuyển nội dung AX vàoDSADD AL, DL ; cộng nội dung AL và DL rồi lưu vào AL2.4.2Chế độ địa chỉ tức thìTrong chế độ địa chỉ này, toán hạng đích là một thanh ghi hay một ô nhớ, còn toánhạng nguồn là một hằng số và vị trí của toán hạng này ở ngay sau mã lệnh. Chế độ địachỉ này có thể được dùng để nạp dữ liệu cần thao tác vào bất kỳ thanh ghi nào (ngoại trừcác thanh ghi đoạn và thanh cờ) hoặc vào bất kỳ ô nhớ nào trong đoạn dữ liệu DS.Ví dụ 2-2MOV CL, 100; chuyển 100 vào CLMOV AX, 0FF0H; chuyển 0FF0H vào AX để rồiMOV DS, AXvào thanh ghi đoạn)MOV [BX], 102.4.3; đưa vào DS (vì không thể chuyển hằng trực tiếp; Nạp 10 vào ô nhớ có địa chỉ DS:BX.Chế độ địa chỉ trực tiếpTrong chế độ địa chỉ này một hằng là địa chỉ lệnh của ô nhớ làm một toán hạng,còn toán hạng kia chỉ có thể là thanh ghi mà không được là ô nhớ. Nếu so sánh với chếđộ địa chỉ tức thì ta thấy ở đây ngay sau mã lệnh không phải là toán hạng mà là địa chỉlệch của toán hạng.Ví dụ 2-3MOV AL, [1234H] ;chuyển nội dung ô nhớ DS:1234 vào AL.MOV [4320H], CX ;chuyển CX vào 2 ô nhớ liên tiếp DS:4320 và DS:43212.4.4Chế độ gián tiếp qua thanh ghiTrong chế độ địa chỉ này một toán hạng là một thanh ghi được sử dụng để chứa địachỉ lệch của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi mà không đượclà ô nhớ (8086 không cho phép tham chiếu bộ nhớ 2 lần đối với một lệnh).Ví dụ 2-4MOV AL, [BX] ; chuyển nội dung ô nhớ có địa chỉ DS:BX vàoAL. MOV [SI], CL; chuyển CL vào ô nhớ có địa chỉ DS:SI.MOV [DI], AX ; chuyển AX vào 2 ô nhớ liên tiếp tại DS:DI và DS: [DI + 1].2.4.5Chế độ địa chỉ tương đối cơ sởTrong chế độ địa chỉ này các thanh ghi cơ sở như BX hoặc BP và hằng số biểu diễn18BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086giá trị dịch chuyển (displacement value) được dùng để tính địa chỉ hiệu dụng của mộttoán hạng trong vùng nhớ DS hoặc SS. Sự có mặt của các giá trị dịch chuyển xác địnhtính tương đối của địa chỉ so với địa chỉ cơ sở.Ví dụ 2-5MOV CX, [BX] +10 ; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ DS: [BX +10]; và DS: [BX+10] vào CX.MOV CX, [BX+10]; một cách viết khác của lệnhtrên. MOV CX, 10 [BX] ; một cách viết khác của lệnhđầu.MOV AL, [BP] +5; chuyển nội dung ô nhớ SS: [BP+5] vào AL.ADD AL, Table [BX] ; cộng AL với ô nhớ do BX chỉ ra trong bảng Table; (bảng này nằm trong DS), kết quả lưu vào AL.Trong ví dụ trên:− 10 và 5 là các giá trị cụ thể cho biết mức dịch chuyển của các toán hạng. Tablelà tên mảng biểu diễn kiểu dịch chuyển của mảng (phần tử đầu tiên) so với địachỉ đầu của đoạn dữ liệu DS.− [BX+10] hoặc [BP+5] gọi là địa chỉ hiệu dụng (effective address – EA, theocách gọi của Intel).− DS: [BX+10] hoặc SS: [BP+5] là logic của ô nhớ tương ứng với một địa chỉ vậtlý.− Theo cách định nghĩa này thì địa chỉ hiệu dụng (EA) của một phần tử thứ BXnào đó (kể từ 0) trong mảng Table [BX] thuộc đoạn DS là EA = Table+BX vàcủa phần tử đầu tiên là EA = Table.2.4.6Chế độ địa chỉ tương đối chỉ sốTrong chế độ địa chỉ này các thanh ghi chỉ số như SI hoặc DI và hằng số biểu diễngiá trị dịch chuyển (displacement value) được dùng để tính địa chỉ hiệu dụng của mộttoán hạng trong vùng nhớ DS hoặc ES (trong các lệnh chuyễn chuỗi các byte hoặc từ).Ví dụ 2-6MOV CX, [SI] +10; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ DS: [SI + 10]; và DS: [SI+10] vào CX.MOV CX, [SI+10]; một cách viết khác của lệnhtrên. MOV CX, 10 [SI]; một cách viết khác của lệnhđầu.MOV AL, [DI] +52.4.7; chuyển nội dung ô nhớ DS: [DI+5] vào AL.Chế độ địa chỉ tương đối chỉ số cơ sở19BÔ VI XỬ LÍ INTEL 8086CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086Kết hợp hai chế độ địa chỉ tương đối chỉ số và tương đối cơ sở ta có chế độ địa chỉtương đối chỉ số cơ sở. Trong chế độ địa chỉ này ta dùng cả thanh ghi cơ sở lẫn thanh ghichỉ số và một hằng biểu diễn sự dịch chuyển của địa chỉ để tính địa chỉ của toán hạng. Tacó thể thấy chế độ địa chỉ này rất phù hợp cho việc địa chỉ hoá các mảng hai chiều.Ví dụ 2-7MOV AX, [ BX ] [SI ]+8;chuyển 2 ô nhớ liên tiếp có địa chỉ; DS:[BX+SI+8] và DS:[BX+SI+9] vào AXMOV AX, [BX+SI+8]; một cách viết khác của lệnh trênMOV CL, [BP+DI+5]; chuyển ô nhớ SS:[BP+DI+5] vàoCL.2.4.8Phương pháp bỏ ngầm định thanh ghi đoạnNhư trong các phần trước đã đề cập, các thanh ghi đoạn và thanh ghi lệch đượcngầm định đi kèm với nhau từng cặp dùng để địa chỉ hoá các toán hạng trong các vùngnhớ khác nhau. Bảng 2-1 chỉ ra các cặp đôi ngầm định của các thanh ghi đoạn và thanhghi lệch thường dùng. Vì tính ngầm định này nên trong các lệnh ta chỉ cần viết các thanhghi lệch là đủ cơ sở để tính ra được địa chỉ của toán hạng.Tuy nhiên, ngoài các tổ hợp ngầm định đã nêu, 8086 còn cho phép ta làm việc vớicác tổ hợp khác của các thanh ghi đoạn và thanh ghi lệch. Muốn loại bỏ các tổ hợp ngầmđịnh nói trên, trong khi viết lệnh phải ghi rõ thanh ghi đoạn sẽ dùng để tính địa chỉ.Bảng 2-1. Các cặp thanh ghi đoạn và thanh ghi lệch ngầm địnhThanh ghi đoạnCSDSESSSThanh ghi lệchIPSI, DI, BXDISP, BPVí dụ:Nếu muốn thay đổi, không lấy toán hạng trong đoạn dữ liệu DS, mà lại lấy toánhạng trong đoạn dữ liệu phụ ES để đưa vào AL, thì phải viết lại lệnh trên thành:MOV AL, ES:[BX]Trong đó ta đã dùng ES: để loại bỏ thanh ghi đoạn ngầm định DS và để chỉ rõ thanhghi đoạn mới dùng trong lệnh này bây giờ là ES.20