Bài giảng Công nghệ thông tin - Chương 6: Toán tử - Toán hạng - Các phép định địa chỉ - tập lệnh
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ thông tin - Chương 6: Toán tử - Toán hạng - Các phép định địa chỉ - tập lệnh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_cong_nghe_thong_tin_chuong_6_toan_tu_toan_hang_cac.ppt
Nội dung text: Bài giảng Công nghệ thông tin - Chương 6: Toán tử - Toán hạng - Các phép định địa chỉ - tập lệnh
- ChươngChương 66 :: ToánToán tửtử –– ToánToán hạnghạng cáccác phépphép địnhđịnh địađịa chỉchỉ –– TậpTập lệnhlệnh HiểuHiểu cáchcách dùngdùng toántoán tửtử trongtrong ASM.ASM. NắmNắm đượcđược tậptập lệnhlệnh củacủa CPUCPU 8086/8088.8086/8088. BiếtBiết cáchcách địnhđịnh địađịa chỉchỉ thôngthông quaqua toántoán hạng.hạng. BiếtBiết vậnvận dụngdụng cáccác kỹkỹ năngnăng trêntrên vàovào vấnvấn đềđề cầncần giảigiải quyếtquyết vàvà hiệnhiện thựcthực thànhthành chươngchương trình.trình. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 1
- Toán tử ĐiểmĐiểm quanquan trọngtrọng phânphân biệtbiệt giữagiữa toántoán tửtử vàvà lệnhlệnh làlà :: ToánToán tửtử điềuđiều khiểnkhiển sựsự tínhtính toántoán cáccác trịtrị hằnghằng xácxác địnhđịnh lúclúc dịch.dịch. LệnhLệnh điềuđiều khiểnkhiển sựsự tínhtính toántoán cáccác trịtrị khôngkhông xácxác địnhđịnh đượcđược chocho đếnđến khikhi CTCT thựcthực hiện.hiện. Ex : toán tử + điều khiển phép cộng khi dịch. Lệnh cộng ADD điều khiển phép cộng khi chương trình thực hiện. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 2
- Toán tử số học Toán tử Cú pháp Công dụng + + expression Dương - - expression Aâm * exp1*exp2 Nhân / exp1/exp2 Chia MOD exp1 mod exp2 Phần dư + exp1 + exp2 Cộng - exp1 - exp2 Trừ SHL exp shl n Dịch exp sang trái n bit SHR exp shr n Dịch exp sang phải n bit 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 3
- Toán tử logic NotNot NotNot expressionexpression AndAnd Exp1Exp1 andand exp2exp2 OrOr Exp1Exp1 oror exp2exp2 XorXor Exp1Exp1 xorxor exp2exp2 Ex : MOV AH , 8 OR 4 AND 2 MOV AL, NOT (20 XOR 0011100B) 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 4
- ToánToán TửTử QuanQuan HệHệ SoSo sánhsánh 22 biểubiểu thứcthức vàvà chocho trịtrị làlà truetrue (-1)(-1) nếunếu điềuđiều kiệnkiện củacủa toántoán tửtử thỏa,thỏa, ngượcngược lạilại làlà false.false. EQEQ Exp1Exp1 EQEQ exp2exp2 TrueTrue nếunếu Exp1Exp1 == exp2exp2 NENE Exp1Exp1 NENE exp2exp2 TrueTrue nếunếu Exp1Exp1 exp2exp2 LTLT Exp1Exp1 LTLT exp2exp2 TrueTrue nnếuếu Exp1Exp1 > exp2exp2 GEGE Exp1Exp1 GEGE exp2exp2 TrueTrue nếunếu Exp1Exp1 >=>= exp2exp2 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 5
- ĐỘ ƯU TIÊN TOÁNTOÁN TỬ TOÁNTOÁN TỬTỬ MÔMÔ TẢTẢ (( )) DấuDấu ngoặcngoặc ++ ,, DấuDấu dươngdương ,, âmâm // MODMOD NhânNhân ,, chia,chia, ModulusModulus ++ ,, Cộng,Cộng, trừtrừ 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 6
- Toán tử SEG Cú pháp : SEG expression Cho địa chỉ đoạn của biểu thức expression. Expression có thể là biến | nhãn | tên segment hay toán hạng bộ nhớ khác. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 7
- Toán tử OFFSET Cú pháp : OFFSET expression Cho địa chỉ OFFSET của biểu thức expression. Expression có thể là biến | nhãn | tên segment hay toán hạng trực tiếp bộ nhớ khác. Ex : nạp địa chỉ segment và offset của biến table vào DS :AX TABLE DB ? MOV AX, SEG TABLE MOV DS, AX MOV DX, OFFSET Table 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 8
- TOÁN TỬ $ Cho địa chỉ của OFFSET của phát biểu chứa toán tử $. Thường được dùng để tính chiều dài chuổi. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 9
- TOÁN TỬ PTR CúCú pháppháp :: type PTR expression ChoCho phépphép thaythay đổiđổi dạngdạng củacủa expressionexpression nếunếu exprexpr làlà 11 biếnbiến || toántoán hạnghạng bộbộ nhớnhớ thìthì typetype cócó thểthể làlà bytebyte ,, wordword hayhay dword.dword. NếuNếu exprexpr làlà 11 nhãnnhãn thìthì typetype cócó thểthể làlà nearnear hayhay far.far. Ex : mov ax, word ptr var1 ; var1 là toán hạng kiểu Word mov bl , byte ptr var2 ; var2 là toán hạng kiểu byte 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 10
- Toán hạng (Operand) Các toán hạng chỉ ra nơi chứa dữ liệu cho 1 lệnh , chỉ thị. Hầu hết các lệnh Assembly đều có đối số là 1 hoặc 2 toán hạng Có 1 số lệnh chỉ có 1 toán hạng như RET, CLC. Với các lệnh 2 toán hạng thì toán hạng thứ 2 là toán hạng nguồn (source) – chứa dữ liệu hoặc địa chỉ của dữ liệu. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 11
- Toán hạng (Operand) Toán hạng đích giữ kết quả (nếu có yêu cầu) sau khi thi hành lệnh. Toán hạng đích có thể là thanh ghi hay Bộ nhớ. Toán hạng nguồn có thể là thanh ghi, bộ nhớ hay 1 giá trị tức thời . Toán hạng số tức thời có thể là số trong các hệ đếm khác nhau và được viết theo qui định sau : Số hệ 2 : xxxxxxxxB (x là bit nhị phân) Số hệ 10 : xxxxxD hay xxxxx (x là 1 số hệ 10) Số hệ 16 : xxxxH và bắt đầu bằng số (x là 1 số hệ 16) 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 12
- Cơ chế định vị địa chỉ Cách xác định dữ liệu trong lệnh được gọi là cơ chế định vị địa chỉ (addressing mode) chỉ ra nơi cất dữ liệu Cơ chế này chia làm 3 loại : định vị bằng thanh ghi, bằng giá trị tức thời và bằng bộ nhớ. MOV AL, BL ; định vị bằng thanh ghi INC BX ; định vị bằng thanh ghi 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 13
- ĐỊNH VỊ TỨC THỜI ToánToán hạnghạng tứctức thờithời làlà dữdữ liệuliệu 88 bitbit hayhay 1616 bitbit nằmnằm ngayngay trongtrong câucâu lệnh.lệnh. DữDữ liệuliệu xửxử lýlý đượcđược lưulưu ngayngay trongtrong lệnhlệnh ExEx :: MOVMOV CL,CL, 61h61h ;; toántoán hạnghạng tứctức thờithời MãMã máymáy củacủa lệnhlệnh trêntrên làlà B161hB161h 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 14
- ĐỊNH VỊ THANH GHI Giá trị của tốn hạng được truy xuất nằm ngay trong thanh ghi của CPU. Ex : MOV AX,BX ; chuyển nội dung của thanh ghi BX vào thanh ghi AX 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 15
- ĐỊNH VỊ BỘ NHỚ Định vị gián tiếp thanh ghi : địa chỉ toán hạng không chứa trực tiếp trong lệnh mà gián tiếp thông qua một thanh ghi. Ex : SUB DX, [BX] ; Khác với lệnh SUB DX, BX Trong chế độ này, địa chỉ Offset của ơ nhớ chứa nộI dung của tốn hạng nằm trong các thanh ghi BX,BP,SI,DI. Địa chỉ segment ngầm định chứa trong DS nếu dùng BX,SI,DI Địa chỉ segment ngầm định chứa trong ES nếu dùng BP 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 16
- ĐịnhĐịnh vịvị giángián tiếptiếp thanhthanh ghighi :: EX1 : MOV AX, [SI] Nạp nội dung của ơ nhớ mà địa chỉ Offset lưu trong SI và địa chỉ đoạn lưu trong DS vào AX. EX2 : MOV AX, [BP] Nạp nội dung của ơ nhớ mà địa chỉ Offset lưu trong BP và địa chỉ đoạn lưu trong ES vào AX. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 17
- ĐỊNH VỊ TRỰC TIẾP Địa chỉ Offset của ơ nhớ chứa dữ liệu tốn hạng nằm trực tiếp trong câu lệnh cịn địa chỉ segment ngầm định chứa trong DS. Ex : MOV BX, [1234] Nạp nộI dung ơ nhớ cĩ địa chỉ DS:1234 BX 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 18
- ĐỊNH VỊ CƠ SỞ Địa chỉ Offset của tốn hạng được tính là tổng của nộI dung thanh ghi BX hoặc BP và 1 độ dịch. Độ dịch là 1 số nguyên âm hoặc dương. Địa chỉ đọan là đoạn hiện tại. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 19
- ĐỊA CHỈ HIỆU DỤNG Toán hạng bộ nhớ dùng trong tập lệnh vi xử lý 86 sử dụng phương pháp định địa chỉ tổng hợp được gọi là địa chỉ hiệu dụng. Địa chỉ hiệu dụng là tổ hợp của 3 nhóm sau đặt trong dấu [ ]. Nhóm thanh ghi chỉ số : SI , DI Nhóm thanh ghi nền : BX, BP Địa chỉ trực tiếp : số 16 bit Các thanh ghi trong cùng 1 nhóm không được xuất hiện trong cùng 1 địa chỉ hiệu dụng. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 20
- ĐỊA CHỈ HIỆU DỤNG Địa chỉ hiệu dụng hợp lệ : [1000h] [SI], [DI] , [BX] , [BP] [SI+BX], [SI+BP] , [DI+BX] , [DI+BP] , [SI+1000h], [DI+100h] [SI] [BX] [1000h], [SI+BP+1000h] , [DI+BX][1000h], [DI+1000h]+[BP] Địa chỉ hiệu dụng không hợp lệ : [70000], [AX] , [SI+DI+1000h], [BX] [BP] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 21
- ĐỊA CHỈ HIỆU DỤNG (tt) ĐịaĐịa chỉchỉ hiệuhiệu dụngdụng chínhchính làlà phầnphần offsetoffset củacủa địađịa chỉchỉ luậnluận lýlý bộbộ nhớ.nhớ. SegmentSegment củacủa địađịa chỉchỉ hiệuhiệu dụngdụng đượcđược mặcmặc địnhđịnh nhưnhư sausau :: nếunếu khôngkhông sửsử dụngdụng BPBP trongtrong địađịa chỉchỉ hiệuhiệu dụngdụng thìthì mặcmặc địnhđịnh theotheo DS.DS. nếunếu cócó sửsử dụngdụng BPBP trongtrong địađịa chỉchỉ hiệuhiệu dụngdụng thìthì mặcmặc địnhđịnh theotheo ES.ES. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 22
- Địa chỉ hiệu dụng (tt) Để thuận tiện trong vấn đề giải thích lệnh, ta qui ước sau : Dữ liệu 8 bit bộ nhớ : [ địa chỉ ] Dữ liệu 16 bit bộ nhớ : [ địa chỉ +1, địa chỉ ] Để xác định rõ hoạt động của bộ nhớ , ta phải dùng thêm toán tử PTR như sau : 8 bit : BYTE PTR [1000H] Tham khảo 1 byte bộ nhớ ở địa chỉ 1000h 16 bit : WORD PTR [1000H] Tham khảo 2 byte bộ nhớ liên tiếp ở địa chỉ 1000h và 1001h 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 23
- Ex : Tính tổng 1 array có 5 phần tử Cách thực hiện : MOV BX, OFFSET LIST Lấy địa chỉ của List vào BX MOV AX, 0 MOV AL, [BX] Dựa vào BX để xác định các phần tử của array. ADD AL , [BX+1] ADD AL , [BX+2] Khi tính tổng xong, đưa tổng vào ADD AL , [BX+3] biến SUM. ADD AL , [BX+4] MOV SUM , AX LIST DB 10h, 20h, 40h, 2h, 5h SUM DW 0 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 24
- CHẠY CT này bằng DEBUG Ex : Tính tổng 1 array có 5 phần tử -A 100 MOV BX, 0120 MOV AX, 0 MOV AL, [BX] ADD AL , [BX+1] ADD AL , [BX+2] ADD AL , [BX+3] ADD AL , [BX+4] MOV [0125], AX -A 120 DB 10, 20, 40, 2, 5 DW 0 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 25
- Tập lệnh Lệnh MOV : Ý nghĩa : copy giá trị từ toán hạng nguồn toán hạng đích Cú pháp : MOV dest , source Yêu cầu : Dest và source cùng kiểu Dạng lệnh : MOV reg , reg MOV mem , reg MOV reg, mem MOV reg16, segreg MOV segreg, reg16 MOV reg, immed MOV mem, immed MOV mem16, segreg MOV segreg, mem16 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 26
- Minh hoạ lệnh MOV 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 27
- Chú ý LệnhLệnh MOVMOV khôngkhông làmlàm ảnhảnh hưởnghưởng đếnđến cờ.cờ. KhôngKhông thểthể chuyểnchuyển dữdữ liệuliệu trựctrực tiếptiếp giữagiữa 22 toántoán hạnghạng bộbộ nhớnhớ vớivới nhau,nhau, muốnmuốn chuyểnchuyển phảiphải dùngdùng thanhthanh ghighi trungtrung gian.gian. KhôngKhông thểthể chuyểnchuyển 11 giágiá trịtrị tứctức thờithời vàovào thanhthanh ghighi đoạn,đoạn, muốnmuốn chuyểnchuyển phảiphải dùngdùng thanhthanh ghighi trungtrung gian.gian. KhôngKhông thểthể chuyểnchuyển trựctrực tiếptiếp giữagiữa 22 thanhthanh ghighi đoạnđoạn 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 28
- Minh họa lệnh MOV Ex1 : Cho table là 1 mảng gồm 10 phần tử dạng byte Table DB 3,5,6,9,10, 29,30,46,45,90 Truy xuất phần tử đầu , phần tử thứ 2 và thứ 5 của mảng: MOV AL, TABLE hay MOV AL, TABLE[0] MOV AL, TABLE+1 hay MOV AL, TABLE[1] MOV AL, TABLE+4 hay MOV AL, TABLE[4] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 29
- Minh họa lệnh MOV Ex2 : MOV AX, DS : [100h] Ex3 : MOV AX, [100h] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 30
- Áp dụng Viết chương trình chuyển nội dung vùng nhớ bắt đầu tại địa chỉ 700h sang vùng nhớ có địa chỉ bắt đầu là 1000h. Biết chiều mỗi vùng nhớ là 9 bytes và dữ liệu đang khảo sát trong đoạn được chỉ bởi DS. Cho vùng nhớ MEM có chiều dài 9 bytes gồm các ký tự ‘abcdefghi’ trong đoạn chỉ bởi DS. Viết chương trình đảo ngược vùng nhớ MEM. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 31
- LệnhLệnh LEA (Load Effective Address) Cú pháp : LEA REG | MEM ý nghĩa : nạp địa chỉ Offset vào thanh ghi để khởi động Reg. Ex : MOV DX, OFFSET MES Tương đương với LEA DX, MES Ex : LEA BX, [1000h] ; BX 1000h LEA SI, [DI][BX][2000h] ; SI DI + BX + 2000h 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 32
- Lệnh XCHG (XCHANGE) Cú pháp : XCHG DEST , SOURCE ý nghĩa : hoán chuyển nội dung 2 Reg, Reg và ô nhớ Yêu cầu : 2 toán hạng phải cùng kiểu 2 toán hạng không thể là 2 biến bộ nhớ. Muốn hoán đổi trị của 2 biến phải dùng Reg trung gian. Ex : XCHG AH, BL MOV VAR1, VAR2 ; không hợp lệ, phải dùng Reg tạm 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 33
- LệnhLệnh PUSHPUSH Cú pháp : PUSH REG16 PUSH MEM16 PUSH SEGREG Đẩy toán hạng nguồn 16 bit vào STACK Ex : PUSH DI ; [SS :SP+1, SS :SP] DI Ex : PUSH CS ; [SS :SP+1, SS :SP] CS 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 34
- LệnhLệnh POPPOP Cú pháp : POP REG16 POP MEM16 POP SEGREG Lấy dữ liệu từ đỉnh STACK vào toán hạng địch. Ex : POP AX ; AX [SS :SP+1, SS :SP] Ex : POP [BX+1] ; [BX+2, BX+1] [SS :SP+1, SS :SP] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 35
- LệnhLệnh ININ Cú pháp : IN ACCUM, IMMED8 IN ACCUM, DX nhập dữ liệu từ cổng xuất nhập vào thanh ghi tích luỹ AL hay AX. Trường hợp AX sẽ nhập byte thấp trước, byte cao sau. Ex : IN AL ,61h IN AX, 40h Dạng lệnh có Reg DX dùng Ex : MOV DX, 378H Để cho cổng có địa chỉ 16 bit IN AL, DX 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 36
- SUMMARY Dùng DEBUG để hợp dịch và chạy chương trình sau : Chép 3 số nguyên kiểu Word ở địa chỉ 0120h vào địa chỉ 0130h. Cho biết giá trị của AX sau khi các lệnh sau được thực thi : MOV AX, ARRAY1 INC AX ADD AH, 1 SUB AX, ARRAY1 ARRAY1 DW 10h, 20h 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 37
- SUMMARY GiGiảả sửsử biếnbiến VAL1VAL1 ởở địađịa chỉchỉ offsetoffset 0120h0120h vàvà PTR1PTR1 ởở địađịa chỉchỉ 0122h.0122h. ChoCho biếtbiết giágiá trịtrị củacủa cáccác thanhthanh ghighi AX,AX, BXBX khikhi mỗimỗi lệnhlệnh sausau đượcđược thựcthực thithi :: .CODE MOV AX, @DATA MOV DS, AX MOV AX, 0 MOV AL, BYTE PTR VAL1 ; AX = ? MOV BX, PTR1 ; BX = ? XCHG AX, BX ; BX = ? SUB AL,2 ; AX = ? MOV AX, PTR2 ; AX = ? .DATA VAL1 DW 3Ah PTR1 DW VAL1 PTR2 DW PTR1 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 38
- Cho biết giá trị của các thanh ghi ở bên phải, khi mỗi lệnh của đoạn chương trình sau được thực thi. Giả sử FIRST ở offset 0H MOV AL, BYTE PTR FIRST+1 ; AL = MOV BX, WORD PTR SECOND+2 ; BX = MOV DX, OFFSET FIRST + 2 ; DX = MOV AX, 4C00H INT 21H . FIRST DW 1234h SECOND DW 16385 THIRD DB 10,20,30,40 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 39
- Bài tậptập Lập trình Bài 1 : Viết chương trình nhập 1 ký tự. Hiển thị ký tự đứng trước và ký tự đứng sau ký tự đã nhập theo thứ tự mã ASCII. Kết quả có dạng : Nhập một ký tự : B Ký tự đứng trước : A Ký tự đứng sau : C Bài 2 : Viết chương trình nhập 2 ký tự và hiển thị ký tự thứ 3 có mã ASCII là tổng của mã 2 ký tự đã nhập. Kết quả có dạng : 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 40