BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)BÀI GIẢNG VẬT LIỆU XÂY DỰNG (THẦY LINH)
Trang 2mã lệnh Mã lệnh đọc vào từ bộ nhớ đưa đến đầu
của bộ giải mã, các thông tin thu được từ đầu ra củc
nó sẽ được đưa đến mạch tạo xung điều khiển, kết
quả là thu được các dãy xung khác nhau (tùy theo
mã 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.
• Khối logic và số học (Arithmetic and Logic Unit ALU):
dùng để thực hiện các thao tác khác nhau với các
toán hạng cuả lệnh.
Trang 3Khối phối ghép bus BIU
• Khối BIU có nhiệm vụ đưa ra điạ chỉ, đọc mã lệnh từ
bộ nhớ Nói cách khác BIU chiu trách nhiệm đưa điạ
chỉ ra bus và trao đổi dữ liệu với bus.
• Trong BIU còn có bộ nhớ đệm lệnh với dung lượng 4
byte dùng để đưa các mã lệnh đọc được nằm sẵn
sàng chờ EU xử lý (bộ lệnh này còn được gọi là hàng
đợi lệnh )
về điạ chỉ cho BIU để khối này đọc lệnh và dữ liệu,
còn bản thân nó thì giải mã lệnh và thực hiện lệnh
2 Hoạt động
• Khi CPU 8088 hoạt động, EU sẽ cung cấp các thông tin về địa chỉ cho BIU
đọc lệnh và dữ liệu đưa về giải mã lệnh và thực hiện lệnh Khối EU gồm
các bộ tính toán số học ALU (Arithmetical Logical Unit), bộ điều khiển CS
(Control System) và các thanh ghi (Register) Tại CU có mạch giải mã lệnh
sẽ nhận mã lệnh đọc vào từ bộ nhớ, xử lý và đưa ra mạch tạo xung điều
khiển Tuz theo mã lệnh ta sẽ thu được các dãy xung khác nhau để điều
khiển các hoạt động khác nhau bên trong và bên ngoài của CPU Khối ALU
có nhiệm vụ thực hiện các thao tác khác nhau với các toán hạng của lệnh
Tóm lại EU duy trì trạng thái của CPU, kiểm soát các thanh ghi đa năng và
Trang 43 Các thanh ghi
8
Các thanh ghi đa năng (chung)
• Trong khối EU có bốn thanh ghi đa năng 16 bitAX, BX, CX, DX Mỗi thanh ghi
có thể tách ra thành hai thanh ghi 8 bit cao và thấp để làm việc độc lập, đó
là các tập thanh ghi AH và AL, BH và BL, CH và CL, DH và DL ( trong đó H chỉ
phần cao, L chỉ phần thấp ) Mỗi thanh ghi có thể dùng một cách vạn năng
để chứa các tập dữ liệu khác nhau nhưng cũng có công việc đặc biệt nhất
định chỉ thao tác với một vài thanh ghi nào đó và chính vì vậy các thanh ghi
thường được gán cho những cái tên đặc biệt rất có ý nghĩa
• AX ( accumulator, acc ): thanh chứa Các kết qủa của các thao tác thường
được chứa ở đây ( kết quả của phép nhân, chia ) Nếu kết quả là 8 bit thì
thanh ghi AL được coi là acc
• BX ( base ):thanh ghi cơ sở thường chứa địa chỉ cơ sở của một bảng dùng
trong lệnh XLAT
• CX ( count ):bộ đếm CX thường được dùng để chứa số lần lặp trong trường
hợp các lệnh LOOP ( lặp ), còn CL thường cho ta số lần dịch hoặc quay trong
các lệnh dịch hoặc quay thanh ghi
• DX ( data ):thanh ghi dữ liệu DX cùng BX tham gia các thao tác của phép
nhân hoặc chia các số 16 bit DX thường dùng để chứa địa chỉ của các cổng
trong các lệnh vào/ ra dữ liệu trực tiếp
Trang 5Các thanh ghi đoạn
Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan
đến địa chỉ đầu của các vùng (các đoạn) và chúng được gọi là
các thanh ghi đoạn (Segment Registers) Đó là:
• 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).
Các thanh ghi đoạn 16 bit này chỉ ra địa chỉ đầu của bốn đoạn
trong bộ nhớ, dung lượng lớn nhất của mỗi đoạn nhớ này là
64 Kbyte.
Các thanh ghi đoạn(tt)
• Nội dung các thanh ghi đoạn sẽ xác định địa chỉ của ô
được bằng cách cộng thêm vào địa chỉ cơ sở một giá
vì nó ứng với khoảng lệch của toạ độ một ô nhớ cụ
Trang 6Segment:
64KB (16 bit offset) và có thể bắt đầu tại các địa chỉ
chia chẵn cho 16 (10h) trên toàn bộ vùng nhớ 1MB
(20 bit).
segment được xác định gián tiếp qua các thanh ghi
segment DS , ES , SS , CS Khi cần sử dụng segment
nào , phải gán giá trị tương ứng cho các thanh ghi
segment Lúc đó các địa chỉ được thể hiện thành
dạng Segment:offset
12
Địa chỉ logic và địa chỉ vật lý
• Để xác định địa chỉ vật lý 20 bit của một ô nhớ nào đó trong một đoạn bất kz CPU 8088 phải dùng đến 2 thanh ghi 16
bit ( một thanh ghi để chứa địa chỉ cơ sở, còn thanh kia chứa độ lệch ) và từ nội dung của cặp thanh ghi đó tạo ra địa
chỉ vật lý theo công thức sau:
Địachỉvậtlý=Thanhghiđoanx16 (16D=10H)+Thanhghilệch
• Việc dùng 2 thanh ghi để ghi nhớ thông tin về địa chỉ thực chất để tạo ra một loại địa chỉ gọi là địa chỉ logic và được ký
hiệu như sau:
Thanhghiđoạn: Thanhghilệch hay segment: offset
• Địa chỉ kiểu ‘‘segment : offset’’ là logic vì nó tồn tại dưới dạng giá trị của các thanh ghi cụ thể bên trong CPU và khi cần
thiết truy cập ô nhớ nào đó thì nó phải được đổi ra địa chỉ vật lý để rồi được đưa lên bus địa chỉ Việc chuyển đổi này
Trang 7Hằng số 16 bit và các thanh ghi chỉ mục BX, BP, SI, DI
Trong đó các cặp BX và BP , SI và DI không được
phép cùng xuất hiện
Các thanh ghi con trỏ và chỉ số
• Trong 8088 còn có ba thanh ghi con trỏ và hai thanh
ghi chỉ số 16 bit Các thanh ghi này ( trừ IP ) đều có
thể được dùng như các thanh ghi đa năng, nhưng
ứng dụng chính của mỗi thanh ghi là chúng được
ngầm định như là thanh ghi lệch cho các đoạn tương
Trang 8Nhóm thanh ghi chỉ mục và con trỏ (Index & Pointer
registers): SI,DI,BP,SP
• Có thể sử dụng như các thanh ghi đa dụng,
ngoài ra còn đóng vai trò làm chỉ mục khi xác
dịnh địa chỉ theo offset của bộ xử lý:
16
Các thanh ghi con trỏ và chỉ số(tt)
• IP ( Instruction pointer ):con trỏ lệnh IP luôn trỏ vào lệnh tiếp theo sẽ được thực
hiện nằm trong đoạn mã CS Địa chỉ đầy đủ của lệnh tiếp theo này ứng vớiCS:IPvà
được xác định theo cách đã nói ở trên
• BP ( base pointer ):con trỏ cơ sở 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 ứng vớiSS:BPvà
được xác định theo cách đã nói ở trên
• SP ( stack pointer ):con trỏ ngăn xếp SP luôn trỏ vào đỉnh hiện thời của ngăn xếp
nằm trong đoạn ngăn xếp SS Địa chỉ đỉnh ngăn xếp ứng vớiSS:SPvà được xác định
theo cách đã nói ở trên
• SI ( source index ):chỉ số gốc hay nguồn SI chỉ vào dữ liệu trong đoạn dữ liệu DS
mà địa chỉ cụ thể đầy đủ ứng vớiDS:SIvà được xác định theo cách đã nói ở trên
• DI ( destination index ):chỉ số đích DI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa
chỉ cụ thể đầy đủ ứng vớiDS:DIvà được xác định theo cách đã nói ở trên
• Riê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ộc
chuỗi gốc
Trang 9Thanh ghi cờ FR ( Flag Register )
• Đây là thanh ghi khá đặc biệt trong CPU, mỗi
bit của nó được dùng để phản ánh mộ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ái hoạ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ếp theo cho bộ vi xử lý
(các lệnh nhảy có điều kiện) Thanh ghi cờ
gồm 16 bit nhưng người ta chỉ dùng hết 9 bit
của nó để làm các bit cờ.
Thanh ghi cờ FR (Flag Register)(tt)
• 6 bit cờ trạng thái: AF,CF,SF,PF,ZF,OF.
• AF ( auxilialyry carry flag )
• CF ( carry flag )
• SF ( sign flag )
• PF ( parity flag )
Trang 10II Mô tả tập lệnh của bộ vi xử lý 8086/88.
• 1 Nhóm lệnh chuyển:MOV, PUSH, POP, XCHG, XLAT, LEA, LDS, LES, IN, INC,
OUT,
• 2 Nhóm lệnh xử lý số học:ADD, ADC, INC, DAA, AAA, SUB, SBB, DEC, NEG,
DAS,…
• 3 Các lệnh logic:AND, OR, XOR, NOT,
• 4 Dịch chuyển và quay:SAL, SHL, SHR, SAR, ROL, ROR, RCL, RCR,
• 5 Nhóm lệnh xử lý chuỗi:MOVS, CMPS, SCAS, LODS, STOS,
• 6 Nhóm lệnh chuyển điều khiển chương trình:JA, JAE, JB, JBE, JC, JCXZ, JE,
JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC,
• 7 Các lệnh xử lý ngắt (interrupt):INT, INTO, INT n, IRET
• 8 Các lệnh điều khiển quay vòng thực hiện chương trình: LOOP, LOOPE,
LOOPZ, LOOPNE, LOOPNZ,…
được giữ lại, các cờ hiệu bị thay đổi.
được giữ lại, các cờ hiệu bị thay đổi.
chuyển điều khiển theo điều kiện.
Trang 11Các lệnh chuyển điều khiển theo điều kiện
• Lệnh chuyển điều khiển theo điều kiện có
dạng thức chung như sau :
<Jump_command> <Label>
• <Label> là một tên nhãn đánh dấu một vị trí
trong chương trình Khi điều kiện kiểm tra là
đúng, CPU sẽ chuyển đến thực hiện lệnh tại vị
trí <Label> , nếu điều kiện kiểm tra là sai CPU
Trang 12Lệnh chuyển điều khiển theo cờ hiệu Lệnh làm thay đổi cờ hiệu trực tiếp
Các lệnh chuyển điều khiển theo điều kiện thường đi theo sau lệnh CMP
Các lệnh chuyển điều khiển không làm thay đổi giá trị của các cờ hiệu.
24
III Cách mã hoá lệnh
• Để tìm hiểu cách mã hoá lệnh, ta xét lệnh MOV des,src dùng để chuyển dữ
liệu giữa hai thanh ghi hay một ô nhớ và một thanh ghi
• Đối với các lệnh MOV Để chuyển dữ liệu kiểu:
o Thanh ghi thanh ghi ( trừ thanh ghi đoạn )
o hoặc Bộ nhớ thanh ghi ( trừ thanh ghi đoạn )
thì 6 bit đầu này luôn là 100010 Đối với các thanh ghi đoạn thì điều này lại
khác
Trang 13III Cách mã hoá lệnh(tt)
• Để mã hóa lệnh MOV, ta cần dùng ít nhất là 2
byte trong đó 6 bit dùng cho mã lệnh
• Bit D xác định hướng truyền của dữ liệu, D = 0
xác định dữ liệu sẽ đi từ thanh ghi cho bởi 3
bit Reg, D = 1 xác định dữ liệu sẽ đi đến thanh
ghi cho bởi 3 bit Reg.
• Bit W xác định sẽ truyền 1 byte (W = 0) hay 1
word (W = 1).
III Cách mã hoá lệnh(tt)
• 3 bit REG dùng để chọn thanh ghi sử dụng:
Trang 14III Cách mã hoá lệnh(tt)
• 2 bit MOD ( chế độ ) cùng với 3 bit R/M ( thanh ghi/bộ nhớ ) tạo ra 5 bit
dùng để chỉ ra chế độ địa chỉ cho các toán hạng của lệnh Bảng sau cho ta
thấy cách mã hoá các chế độ địa chỉ :
28
III Cách mã hoá lệnh(tt)
Đối với các lệnh MOV Để chuyển dữ liệu kiểu:
•Thanh ghi thanh ghi ( trừ thanh ghi đoạn )
•hoặc Bộ nhớ thanh ghi ( trừ thanh ghi đoạn )
thì 6 bit đầu này luôn là 100010 Đối với các thanh ghi đoạn thì điều này lại khác
Trang 15• Ví dụ 1: Xét lệnhMOV AL, BL; copy nội dung thanh ghi cho thanh ghi
• Trong tr-ờng hợp, nếu ta lấy AL là thanh ghi cho trong byte 2 là REG =
000 thì trong byte 1 bit D =1 Và nh- vậy toán hạng còn lại là thanh ghi
BL sẽ t-ơng ứng với MOD = 11 và R/M = 011 Các byte lệnh là:
• Còn nếu lấy BL là thanh ghi cho trong byte 2 là REG =011, thì trong byte
1 bit D = 0 Toán hạng còn lại là AL t-ơng ứng với MOD =11 và R/M
=000 Khi đó, giá trị của nó là:
• Ví dụ 2: Xét lệnhMOV [BX], CL
• Trong tr-ờng hợp này, ta chỉ có CL là thanh ghi cho trong byte 2 là REG
=001 và trong byte 1 bit D=0 Toán hạng còn lại là ô nhớ địa chỉ trong
BX sẽ t-ơng ứng với MOD = 00 và R/M =111 Các byte lệnh là
– Địa chỉ của một phần tử của mảng cú thể được xỏc định bằng cỏch cộng một hằng
số với địa chỉ cơ sở Giả sử A là một mảng và S chỉ ra số byte của một phần tử của
mảng ( S=1 đối với mảng byte và S=2 đối với mảng từ ) Vị trớ của cỏc phần tử của
mảng A cú thể tớnh như sau :
Trang 16Các chế độ địa chỉ (addressing modes)
Cách thức chỉ ra toán hạng trong lệnh gọi là chế độ địa chỉ Các chế
độ địa chỉ thường dùng là :
• Chế độ địa chỉ bằng thanh ghi ( register mode) : toán hạng là thanh ghi
• Chế độ địa chỉ tức thời ( immediate mode) : toán hạng là hằng số
• Chế độ địa chỉ trực tiếp ( direct mode) : toán hạng là biến
Ví dụ :
MOV AX,0 ; AX là register mode còn 0 là immediate mode
ADD ALPHA,AX ; ALPHA là direct mode
Ngoài ra còn có 4 chế độ địa chỉ khác là :
• Chế độ địa chỉ gián tiếp bằng thanh ghi ( register indirect mode )
• Chế độ địa chỉ cơ sở ( based mode)
• Chế độ địa chỉ chỉ số ( indexed mode)
• Chế độ địa chỉ chỉ số sơ sở ( based indexed mode)
Trang 17Các chế độ địa chỉ(tt)
Ví dụ: chế độ địa chỉ thanh ghi
MOV BX, DX ; chuyển nội dung DX vào BX
MOV DX,AX ; chuyển nội dung AX vào DX
ADD AL,DL ; cộng nội dung AL và DL rồi đưa vào AL
Chế độ địa chỉ gián tiếp bằng thanh ghi.
• Trong chế độ địa chỉ gián tiếp bằng thanh ghi , địa chỉ
Chúng ta nói rằng thanh ghi là con trỏ ( pointer) của vị trí
các thanh ghi BX, SI, DI, BP Đối với các thanh ghi BX, SI,
Trang 18Ví dụ 2:Giả sử rằng nội dung các thanh ghi và nội dung của bộ nhớ tương ứng là như sau : Hãy
cho biết lệnh nào sau đây là hợp l{, offset nguồn và kết qủa của các lệnh hợp l{ ?
• c illegal source register ( must be BX,SI,DI)
• d illegal memory-memory add
• e 3000h 031Eh
36
Ví dụ 3 : Viết đoạn mã để cộng vào AX 10 phần tử của một mảng
W định nghĩa như sau :
W DW 10,20,30,40,50,60,70,80,90,100
• Giải :
XOR AX,AX ; xoá AX
LEA SI,W ; SI trỏ tới địa chỉ cơ sở ( base)
;của mảng W MOV CX,10 ; CX chưá số phần tử của mảng
ADDITION:
ADD AX,*SI+ ; AX=AX + phần tử thứ nhất
LOOP ADDITION ; lặp
Trang 19Ví dụ 3: Viết thủ tục để đảo ngược một mảng n từ có nghĩa là phần tử thứ 1 sẽ đổi thành
phần tử thứ n , phần tử thứ hai sẽ thành phần tử thứ n-1 Chúng ta sẽ dùng SI như là con
trỏ của mảng còn BX chứa số phần tử của mảng ( n từ )
Giải : Số lần trao đổi là N/2 lần Nhớ rằng phần
tử thứ N của mảng có địa chỉ A+2x(N-1) Đoạn
mã như sau :
REVERSE PROC
; input: SI= offset of array
; BX= number of elements
; output : reverse array
PUSH AX ; cất các thanh ghi
MOV AX,[SI] ; lấy 1 phần tử ở nửa thấp của
;mảng XCHG AX,[DI] ; đưa nó lên nửa cao của
;mảng MOV [SI],AX ; hoàn thành trao đổi ADD SI,2 ; SI chỉ tới phần tử tiếp theo của
;mảng SUB DI,2 ; DI chỉ tới phần tử thứ n-1 LOOP XCHG_LOOP
POP DI POP SI POP CX POP BX POP AX RET REVERSE ENDP
Chế độ địa chỉ chỉ số và Chế độ địa chỉ cơ sở
Trong các chế độ địa chỉ này , địa chỉ offset của toán hạng có được bằng cách
cộng một số gọi làdisplacementvới nội dung của một thanh ghi
Displacement có thể là :
– địa chỉ offset của một biến , ví dụ A
– một hằng ( âm hoặc dương ), ví dụ -2
– địa chỉ offset của một biến cộng với một hằng số , ví dụ A+4
Cú pháp của một toán hạng có thể là một trong các kiểu tương đương sau :
– [ register + displacement]
Trang 20Chế độ địa chỉ chỉ số và Chế độ địa chỉ cơ
sở (tt)
• Chế độ địa chỉ được gọi là cơ sở ( based) nếu thanh ghi BX( base register)
hoặc BP ( base pointer) được dùng
• Chế độ địa chỉ được gọi là chỉ số ( indexed) nếu thanh ghi SI( source index) hoặc DI (
destination index) được dùng
Ví dụ :Giả sử rằng W là mảng từ và BX chưá 4 Trong lệnh MOV AX,W*BX+
displacementlà địa chỉ offset của biến W Lệnh này sẽ di chuyển phần tử có điạ chỉ W+4
vào thanh ghi AX Lệnh này cũng có thể viết dưới các dạng tương đương sau :
Ví dụ 1: Viết đoạn mã để cộng vào AX 10 phần tử của một
W DW 10,20,30,40,50,60,70,80,90,100
tính tổng 10 phần tử của mảng như sau :
Trang 21Ví dụ 2: Với chế độ địa chỉ chỉ số có thể viết lại
code cho bài toán tính tổng 10 phần tử
• Giải :
XOR AX,AX ; xoá AX
LEA SI,W ; SI trỏ tới địa chỉ cơ sở ( base)
;của mảmg W MOV CX,10 ; CX chưá số phần tử của mảng
ADDITION:
ADD AX,*SI+ ; AX=AX + phần tử thứ nhất
ADD SI,2 ; tăng con trỏ lên 2
LOOP ADDITION ; lặp
Chế độ địa chỉ chỉ số cơ sở
• Trong chế độ này , địa chỉ offset của toán hạng là tổng của :
1 nội dung của thanh ghi cơ sở ( BX or BP)
2 nội dung của thanh ghi chỉ số ( SI or DI)
3 địa chỉ offset của 1 biến ( tuz chọn)
4 một hằng âm hoặc dương ( tuz chọn)
• Nếu thanh ghi BX được dùng thì DS chứa số đoạn của địa chỉ toán hạng Nếu BP được dùng
thì SS chưá số đoạn Toán hạng được viết theo 4 cách dưới đây:
1 variable[base_register][index_register]
2 [base_register + index_register + variable + constant ]
Trang 2244
Trang 23V Hệ thống ngắt
• Ngắt là việc CPU dừng phục vụ chương trình chính để
chuyển sang phục vụ chương trình con để thực hiện
một chức năng nào đó khi có một yêu cầu ngắt Và
sau khi thực hiện xong chương trình con xử lý ngắt
đó thì CPU quay về phục vụ tiếp cho chương trình
chính ngay tại điểm bị ngắt.
• Các loại ngắt chính:
– Các ngắt bên trong là các ngắt được xắp đặt ở trong CPU
– Các ngắt bên ngoài là các ngắt được tạo bởi phần cứng bên
ngoài.
– Các ngắt mềm là các ngắt được khởi tạo bởi 1 lệnh INT hay
INTO.
Ví dụ: Các ngắt của DOS
Trang 24Ví dụ : INT 21H - Các chức năng của DOS
• Cách thức:gán AH là số hiệu(hàm) chức năng cần sử dụng, sau đó gọi ngắt INT
INT 21h ; AL chứa mã ASCII của k{ tự nhập
• Hàm 02h:xuất một k{ tự trong thanh ghi DL ra màn hình tại vị trí con trỏ
Một số chức năng hệ thống đơn giản của BIOS:
• Chờ đọc một phím, không in lại phím này ra màn hình
• Sau khi thực hiện AL = mã ASCII của phím được gõ vào
• AH = scan code của phím
• AL bằng 0 khi một số các phím chức năng được bấm