Trắc nghiệm, bài giảng pptx các môn chuyên ngành Y dược và các ngành khác hay nhất có tại “tài liệu ngành Y dược hay nhất”; https://123doc.net/users/home/user_home.php?use_id=7046916. Slide bài giảng môn cấu trúc máy tính ppt dành cho sinh viên chuyên ngành công nghệ - kỹ thuật và các ngành khác. Trong bộ sưu tập có trắc nghiệm kèm đáp án chi tiết các môn, giúp sinh viên tự ôn tập và học tập tốt môn cấu trúc máy tính bậc cao đẳng đại học chuyên ngành công nghệ - kỹ thuật và các ngành khác
Trang 1Bài 6
LẬP TRÌNH ASSEMBLER VÀ CÁC CÔNG CỤ LẬP TRÌNH ASSEMBLER TRÊN MÁY TÍNH
Trang 2Nội dung
1) Giới thiệu lập trình hợp ngữ
2) Tập lệnh của vi xử lý 8086
3) Công cụ gỡ rối DEBUG
4) Công cụ mô phỏng Emu8086
5) Một vài ví dụ minh họa
Trang 31) Giới thiệu lập trình hợp ngữ
a) Giới thiệu chung
b) Định nghĩa đọan rút gọn và đầy đủ
c) Các phần cơ bản của hợp ngữ
d) Tập tin dạng com và exe
Trang 4a) Giới thiệu chung
• Hîp ng÷ (Assembly language) lµ ng«n ng÷ lËp tr×nh cÊp thÊp g¾n víi ng«n ng÷ m¸y Ng«n ng÷ lËp tr×nh d ưới d¹ng ký hiÖu,
Trang 5b) Định nghĩa đọan rỳt gọn và đầy đủ
• Có hai cách định nghĩa đoạn chư ơng trình:
- Dạng đầy đủ (Full segment definition)
- Dạng rút gọn (simplified segment definition).
Trang 6c) C¸c phÇn c¬ b¶n cña hîp ng÷
• TÖp tin hîp ng÷ nguån: TËp hîp c¸c ph¸t biÓu hîp ng÷ (Assembly
language statement) Mçi mét ph¸t biÓu ® ưîc viÕt trªn 1 dßng §ã
cã thÓ lµ
– 1 lÖnh hợp ngữ (Assembly language Instruction)
– 1 chØ dÉn hợp ngữ (Assembler directive)
Trang 7Lệnh hợp ngữ
• Khuôn dạng của 1 lệnh hợp ngữ
– [Nhãn:] [Tên gợi nhớ] [toán hạng] [;Ghi chú]
• Nhãn (Label): đ ược dùng để thay thế địa chỉ câu lệnh Các câu lệnh khác
tham chiếu đến dòng lệnh thông qua nhãn của nó.
• Tên gợi nhớ (Mnemonic): xác định hành động mà CPU thực hiện Ví dụ: INT 21,
MOV.
• Toán hạng (Operand): xác định các dữ liệu mà câu lệnh cần xử lý Toán hạng th
ường là các hằng, tên các thanh ghi, tên tư ợng trư ng hay biểu thức.
• Ghi chú (Comment): luôn bắt đầu bằng dấu chấm phẩy ";" đ ược sử dụng để
ghi các lời bình, chú giải Vùng này asembler sẽ bỏ qua khi dịch.
Trang 9i Toán hạng thanh ghi
(Register addressing mode)
• Trong chế độ địa chỉ này, dữ liệu đư ợc l ưu trong thanh ghi làm toán hạng Các thanh ghi có thể sử dụng trong chế độ địa chỉ này là:
• Chú ý: - Bộ nhớ sẽ không đư ợc truy nhập ở chế độ địa chỉ này
- Các thanh ghi trong lệnh phải phù hợp về kích th ước.
Trang 10ii Toán hạng trực hằng (Chế độ địa chỉ tức thì -
Immediate addressing mode)
• Toán hạng nguồn là một hằng số (tức một giá trị cụ thể 8 bit hay 16 bit đư ợc chỉ rõ trong câu lệnh)
• Các giá trị này có thể cho dư ới nhiều dạng: thập phân không dấu và có dấu, nhị phân, thập lục phân, các tên tư ợng tr ưng đã đ ược định nghĩa bằng lệnh EQU hay =
Trang 11iii Toán hạng bộ nhớ (Memory addressing mode)
• Toán hạng bộ nhớ trực tiếp (Direct addressing mode)
• Toán hạng bộ nhớ gián tiếp
– Chế độ thanh ghi gián tiếp (Register Indirect Addressing Mode)
– Chế độ địa chỉ cơ sở (Based Relative Addressing Mode)
– Chế độ địa chỉ chỉ số (Indexed Relative Addressing Mode )
– Chế độ địa chỉ chỉ số cơ sở (Based Indexed Relative Addressing
Mode)
Trang 12Toán hạng bộ nhớ trực tiếp (Direct addressing
mode)
• Địa chỉ của dữ liệu trong bộ nhớ do một toán hạng có trong
lệnh xác định trực tiếp Địa chỉ này là một tên hay một biểu thức hằng Có thể kết hợp thêm toán tử chỉ số [ ], toán tử +, -
và toán tử (:).
• Nếu trong một toán hạng không chỉ rõ tên thanh ghi đoạn thì thanh ghi đoạn đ ược dùng là thanh ghi DS, song cũng có thể
dùng toán tử (:) để chỉ thanh ghi đoạn khác
• VD: Chuyển nội dung 16 bit tại địa chỉ 100h trong đoạn DS
vào thanh ghi AX.
MOV AX, DS:[100h]
Trang 13Toán hạng bộ nhớ gián tiếp
• Toán hạng bộ nhớ gián tiếp cho phép dùng các thanh ghi và độ dời để chỉ đến các giá trị trong bộ nhớ Chỉ có 4 thanh ghi
BX, BP, SI, DI có thể dùng với toán hạng bộ nhớ gián tiếp.
• Độ dời có thể là một hằng hay một toán hạng bộ nhớ trực tiếp Một toán hạng có nhiều độ dời, các độ dời sẽ đ ược cộng lại thành một độ dời chung xác định khi dịch.
Trang 14Toán hạng bộ nhớ gián tiếp
• Chế độ thanh ghi gián tiếp (Register Indirect Addressing Mode)
– Địa chỉ của bộ nhớ chứa toán hạng đư ợc thanh ghi xác định Các thanh ghi sử dụng cho mục đích này là SI, DI và BX Và trong tr ường hợp này, các thanh ghi này xác định độ lệch, còn thanh ghi đoạn là DS
• VD MOV AL,[BX] ; địa chỉ đầy đủ là DS:BX
MOV [DI],AH ; địa chỉ đầy đủ là DS:DIMOV [SI],AX ; địa chỉ đầy đủ là DS:SI
Trang 15Toán hạng bộ nhớ gián tiếp
• Chế độ địa chỉ cơ sở (Based Relative Addressing Mode)
– Các thanh ghi cơ sở BX, BP và cùng với độ dời đư ợc sử dụng để xác định
địa chỉ offset của dữ liệu Độ dời có thể là 1 hằng hay 1 toán hạng bộ nhớ trực tiếp Một toán hạng có thể có nhiều độ dời, các độ dời sẽ đư ợc cộng lại thành 1 độ dời chung xác định
– Địa chỉ đoạn ngầm định ứng với BX là DS còn SS là với BP
• VD: MOV CX,[BX]+10 ;chuyển DS:BX+10 vào CX
Lệnh tư ơng đư ơng với
MOV CX, 10[BX]
• VD: MOV AL,[BP]+5 ; chuyển nội dung SS:BP+5 vào AL
Trang 16Toán hạng bộ nhớ gián tiếp
• Chế độ địa chỉ chỉ số (Indexed Relative Addressing Mode )
– Trong chế độ này các thanh ghi chỉ số DI, SI cùng với độ dời xác
định offset của dữ liệu Thanh ghi đoạn ngầm định là DS
• VD: MOV DX,[SI]+5 ; DS:SI+5
MOV CL,[DI]+20; DS:DI+20
Trang 17Toán hạng bộ nhớ gián tiếp
• Chế độ địa chỉ chỉ số cơ sở (Based Indexed Relative
Addressing Mode)
– Tổng hợp cả hai chế độ địa chỉ cơ sở và chỉ số được gọi là chế
độ địa chỉ chỉ số cơ sở, trong đó sử dụng cả thanh ghi cơ sở và thanh ghi chỉ số
MOV CH,[BX][SI]+20;DS:BX+SI+20 MOV AH,[BP][DI]+12;SS:BP+DI+12 MOV AH,[BP][SI]+29 ;SS:BP+SI+29
Trang 18[tên] tên gợi nhớ [toán hạng] [; chú giải]
• Chỉ dẫn đ ược dùng để định nghĩa tên t ượng trư ng, khai báo dữ liệu và biến, khai báo đoạn ch ương trình con, đánh dấu cuối
đoạn, cuối ch ương trình con hay kết thúc ch ơng trình.
• Toán hạng trong chỉ dẫn phải là một giá trị xác định.
Trang 19Một số dạng chỉ dẫn th ường dùng
• Nhóm định nghĩa tên t ượng tr ưng:
– name EQU <text>; VD: x EQU count
– Name=Expression; VD: dong=10
• Nhóm khai báo dữ liệu
– DB,DW,DD: dùng để khai báo dữ liệu dạng Byte, Word và Double Word.
– Chỉ dẫn: [name] DB data
– VD: MSGDB 'Hello$‘; Khai báo chuỗi
• Nhóm khai báo đoạn
Trang 20Một số dạng chỉ dẫn th ường dùng (tiếp)
• Chỉ dẫn thủ tục PROC và ENDP
– Chỉ dẫn này dùng để khai báo 1 chương trình con.
– Dạng: Name PROC [type]
Name ENDP
• Chỉ dẫn ASSUME
– Dạng ASSUME seg_reg:seg_name
– Chức năng: ASSUME giúp Assemler trong việc chuyển đổi các biến hay các nhãn trong
ch ơng trình sang các địa chỉ t ơng ứng ASSUME giúp Assemler biết thanh ghi đoạn nào mà ch ơng trình cần dùng để địa chỉ hoá các nhãn và các biến.
– seg_reg là tên các thanh ghi đoạn
– seg_name là tên của các đoạn đã đư ợc khai báo bằng chỉ dẫn SEGMENT.
• Nhóm chỉ dẫn điều khiển
– Dạng: ORG Expression
– Chỉ dẫn dùng để báo cho Assemler biết các mã lệnh và dữ liệu ngay sau Directive ORG
sẽ đư ợc nạp vào bộ nhớ bắt đầu tại địa chỉ offset đư ợc xác định.
– VD: ORG 100h
Trang 21d) Tập tin dạng com và exe
– Tệp tin dạng COM đ ược nạp vào bộ nhớ và thực hiện nhanh hơn tệp tin dạng EXE Song tệp tin dạng COM chỉ áp dụng cho các chư ơng trình nhỏ, còn để xây dựng các ch ương trình lớn nhất thiết phải viết d ưới dạng EXE
Trang 22d) Tập tin dạng com và exe
Trang 23d) Tập tin dạng com và exe
• Tệp tin dạng EXE
– ch ương trình có thể khai báo có nhiều đoạn khác nhau
– Kích thư ớc có thể lớn tuỳ ý phụ thuộc vào kích thư ớc bộ nhớ máy
tính.Đư ợc sử dụng để xây dựng các chư ơng trình lớn hơn 64 KB
Trang 24d) Tập tin dạng com và exe
Trang 252 Tập lệnh vi xử lý 8086
a) Nhóm chuyển dữ liệu: MOV,IN,OUT,PUSH,POP
b) Nhóm logic: NOT,AND,OR ,XOR,TEST
c) Nhóm dịch và quay: SHL,SHR,SAL,SAR,ROL,ROR
d) Nhóm số học: ADD,SUB,ADC,SBB,INC,DEC,MUL,DIV
e) Nhóm chuyển điều khiển: JMP , JA, JB, JC , JE, JG, JO, JS, JP, JZ , LOOP
f) Nhóm chương trình con và ngắt: CALL,RET ,INT,IRET
g) Nhóm xử lý chuỗi: MOVS ,MOVSB,CMPS,SCASB
h) Nhóm điều khiển bộ vi xử lý: NOP,HLT,WAIT
Trang 26a) Nhúm chuyển dữ liệu
+ Cú pháp MOV dest, source
– Toán hạng nguồn source có thể là reg, mem hay immed
– Toán hạng đích Dest có thể là reg hay mem
+ Chức năng: Chuyển nội dung toán hạng nguồn vào toán hạng đích Chiều dài của dữ liệu có thể
là 8 bit hay 16 bit.
VD: MOV DI, BX
MOV BL, CL
+ Chú ý:
– Không thể chuyển trực tiếp giữa 2 thanh ghi đoạn.
– Không thể dùng thanh ghi đoạn CS làm toán hạng đích trong lệnh MOV
– Lệnh MOV không làm ảnh h ưởng thanh ghi cờ hiệu.
+ VD : Viết chư ơng trình chuyển nội dung vùng nhớ 6 byte bắt đầu từ địa chỉ 300h sang 400 h Giải:
mov si,300h ; offset bắt đầu vùng dữ liệu nguồn
mov di,400h; offset bắt đầu vùng dữ liệu đích
mov ax,[si] ; chuyển 2 byte đầu
Trang 27a) Nhúm chuyển dữ liệu
+ Cú pháp: PUSH source (reg16 hoặc mem16)
PUSH immed16 (chỉ dùng với CPU 80286/386/486) + Chức năng: Dùng để cất một trực hằng, nội dung 1 thanh ghi 16 bit hay nội dung toán hạng bộ nhớ 16 bit vào STACK (Ngăn xếp).
+ Hoạt động: Lệnh PUSH giảm thanh ghi SP 2 đơn vị và chuyển nội dung 16 bit của toán hạng nguồn vào trên đỉnh của STACK Đỉnh STACK đ ược xác định bởi cặp thanh ghi
SS:SP
+ VD: PUSH BX
PUSH ES
Trang 28a) Nhúm chuyển dữ liệu
+ Cú pháp: POP Dest (reg16 hoặc mem16)
+ Chức năng: POP dùng để lấy dữ liệu đang hiện hành trên đỉnh của STACK (đư ợc xác định bởi cặp thanh ghi SS:SP) vào toán hạng Dest.
+ Hoạt động: Lệnh POP tăng thanh ghi 2 đơn vị để chỉ đến đỉnh mới của STACK.
VD: POP SI
POP CX
POP ES
Trang 29a) Nhúm chuyển dữ liệu
+ Cú pháp: IN AL, port8
IN AL, DX + Chức năng: Đọc một l ượng 8 bit từ một cổng nhập vào thanh ghi AL Nếu
địa chỉ của cổng có giá trị trong khoảng từ 0 đến FF thì địa chỉ có thể viết trực tiếp trong câu lệnh Còn nếu địa chỉ của cổng có giá trị lớn hơn FF thì cần dùng thanh ghi DX để định địa chỉ cổng.
+ VD1: IN AL, 61h ; đọc một byte từ cổng 61h
+ VD2: MOV DX, 03f8h ; đọc một byte từ cổng 03f8h.
IN AL,DX
Trang 30a) Nhúm chuyển dữ liệu
• Lệnh OUT
+ Cú pháp: OUT port8, AL
OUTDX, AL+ Chức năng: Gửi một l ượng 8 bit từ thanh ghi AL ra cổng xuất Nếu địa chỉ của cổng có giá trị trong khoảng từ 0 tới FF thì địa chỉ đó có thể viết trực tiếp trong câu lệnh Còn nếu địa chỉ của cổng lớn hơn 8 bit thì cần dùng thanh ghi DX để
định địa chỉ của cổng
+ VD1: OUT61h, AL
+ VD2: MOV DX, 03f8 ; địa chỉ cổng màn hình đơn sắc.
OUTDX, AL
Trang 31b) Nhúm logic
• Lệnh AND
+ Cú pháp: AND dest, source
– Source: có thể là thanh ghi, bộ nhớ hay trực hằng
– Dest: có thể thanh ghi hay bộ nhớ
+ Chức năng: lấy nội dung của toán hạng source, thực hiện phép toán logic AND từng bit với nội dung của toán hạng đích, kết quả l ưu vào toán hạng đích
(dest) < - (dest) AND (source)
+ Chỳ ý: - Lệnh này ảnh h ưởng đến các cờ CF, OF, PF, SF, ZF, không ảnh hư ởng cờ
AF (CF < - 0, OF < -0)
- Lệnh này th ường dùng để xoá một bit nào đó, ví dụ muốn xoá 2 bít cao của thanh ghi AL, ta chỉ cần thực hiện
ANDAL,00111111B
Trang 32b) Nhúm logic
• Lệnh OR
+ Cú pháp: OR dest, source
– Source: có thể là thanh ghi, bộ nhớ hay trực hằng
– Dest: có thể thanh ghi hay bộ nhớ
+ Chức năng: lấy nội dung của toán hạng source, thực hiện phép toán logic OR từng bit với nội dung của toán hạng đích, kết quả l ưu vào toán hạng đích
(dest) < - (dest) OR (source)
+ Chỳ ý: - Lệnh này ảnh h ưởng đến các cờ CF, OF, PF, SF, ZF, không ảnh hư ởng cờ
AF (CF < - 0, OF < -0)
- Lệnh này ngư ợc với lệnh AND, dùng để bật một bit nào đó lên 1, ví dụ muốn bật 2 bit cao của thanh ghi AH lên 1, ta chỉ cần thực hiện
OR AL, 11000000B
Trang 33b) Nhúm logic
• Lệnh XOR
+ Cú pháp: XOR dest, source
– Source: có thể là thanh ghi, bộ nhớ hay trực hằng
– Dest: có thể thanh ghi hay bộ nhớ
+ Chức năng: (dest) < - (dest) XOR (source)
+ Chỳ ý: - Lệnh này ảnh h ưởng đến các cờ CF, OF, PF, SF, ZF, không ảnh hư ởng cờ AF
- Lệnh này thư ờng dùng để xác định những bit nào khác nhau giữa 2 toán hạng, hoặc muốn đảo ng ược một số bit nào đó
+ Ví dụ: Viết ch ươgn trình đếm số bit khác nhau giữa 2 thanh ghi AL và AH
Trang 34b) Nhúm logic
• Lệnh NOT
+ Cú pháp: NOT Dest (reg / mem)
+ Chức năng: Đảo ngư ợc từng bit của nội dung toán hạng dest, lệnh NOT hoàn toàn không ảnh h ưởng đến các cờ
+ Ví dụ: mov al,0
not al; cho kết quả al = ffH
Trang 37- Lệnh ROL dest, CL dùng cho trư ờng hợp ROL nhiều hơn một bit.
- Lệnh ROL chỉ ảnh hư ởng đến các cờ CF và OF.
Trang 38c) Nhúm dịch và quay
• Lệnh ROR (rotate right):
+ Cỳ phỏp: RORdest, 1
hay RORdest, CL
+ Chức năng: Giống như lệnh ROL, thay vì quay bit sang trái, ta quay bit sang phải
- Lệnh ROR dest, 1: quay nội dung của toán hạng dest sang phải một bit Giống nh lệnh SHR, như
ng thay vì bit cuối là 0 thì đối với lệnh ROR bit đầu đ ược dịch chuyển vào bit cuối.
- Lệnh ROR dest, CL dùng cho trư ờng hợp ROR nhiều hơn một bit.
- Lệnh ROR chỉ ảnh hư ởng đến các cờ CF và OF.
Trang 39d) Nhúm số học
• Lệnh ADD (adition):
+ Cỳ phỏp: ADD dest, source
– Toán hạng nguồn Source có thể là Reg, Mem hay Immed.
– Toán hạng đích Dest chỉ có thể là Reg hoặc Mem.
+ Chức năng: Lệnh ADD cộng không nhớ nội dung của toán hạng source với toán hạng dest rồi gửi kết quả vào toán hạng dest
(dest ) + (source) → (dest)
• Lệnh ADC (ADD with carry):
+ Cỳ phỏp: ADC dest, source
+ Chức năng: Lệnh ADC cộng có nhớ nội dung của toán hạng source và toán hạng dest rồi cộng thêm 1 nếu cờ CF có giá trị 1, kết quả l u vào toán hạng dest Nh vậy lệnh ADC giống nh lệnh ADD, nh ng thực hiện phép cộng có nhớ
(dest ) + (source) + CF → (dest)
• Lệnh INC (Increment)
+ Cỳ phỏp: Inc dest (Reg/Mem)
+ Chức năng: Tăng nội dung toán hạng dest lên 1
(dest ) + 1 → (dest)
+ Ví dụ: INC CX;
Trang 40d) Nhóm số học
• LÖnh SUB:
+ Cú pháp: SUB dest, source
+ Chøc n¨ng: Thùc hiÖn phÐp trõ kh«ng nhí LÖnh SUB lÊy néi dung to¸n h¹ng Dest trõ néi dung to¸n h¹ng Source, kÕt qu¶ l u vµo trong to¸n h¹ng dest.
(dest ) - (source) → (dest)
+ Cú pháp: DEC dest (Reg/Mem)
+ Chøc n¨ng: Giảm néi dung to¸n h¹ng dest lªn 1
(dest ) - 1 → (dest)
+ VÝ dô: DEC CX;
Trang 41VD: MUL BX; DX:AX ← AX*BX
+ Chú ý: Lệnh này chỉ ảnh hư ởng đến cờ CF, OF
– Các cờ CF và OF nhận giá trị 1 nếu phần cao của kết quả khác không, ng ược lại cờ CF và
OF bằng 0 nếy phần cao của kết quả bằng 0.
Trang 42d) Nhóm số học
• LÖnh DIV:
+ Cú pháp: DIV source (thanh ghi hay bé nhí)
+ Chøc n¨ng: thùc hiÖn phÐp chia sè kh«ng dÊu, lÊy néi dung cña thanh ghi tÝch luü AX chia cho to¸n h¹ng source.
– NÕu source lµ to¸n h¹ng d¹ng byte th× lÖnh DIV lÊy néi dung cña thanh ghi tÝch luü AX chia cho to¸n h¹ng source, th ư¬ng sè vµ sè dư cña phÐp chia tư¬ng øng ®ư îc lư u trong thanh ghi AL vµ thanh ghi AH.
VD: DIV BL; AX DIV BL > AL (Lưu thương số), AX MOD BL > AH (Lưu số dư)
– NÕu source lµ to¸n h¹ng d¹ng word th× lÖnh DIV lÊy néi dung cña thanh ghi tÝch luü më réng DX:AX chia cho to¸n h¹ng source, th ư¬ng sè ® ưîc lư u trong thanh ghi tÝch luü AX, vµ sè dư cña phÐp chia được lưu trong thanh ghi tÝch luü mở réng DX.
VD: DIV BX; DX:AX DIV BX >AX, DX:AX MOD BX >DX
Trang 43e) Nhúm chuyển điều khiển
• Lệnh nhảy không điều kiện
– JMP Label
– JMP Target (reg/mem)
+ ý nghĩa: dùng để chuyển điều khiển chư ơng trình từ vị trí này sang vị trí
khác JMP thực hiện bằng cách thay đổi nội dung thanh ghi CS:IP để con trỏ lệnh chỉ đến vị trí mới
– Lệnh JMP có thể là short, near hay far Với dạng short hay near lệnh JMP chỉ thay đổi nội dung của thanh ghi con trỏ lệnh IP Còn với dạng far, lệnh JMP thay đổi cả thanh ghi đoạn
CS lẫn thanh ghi IP.
– VD về lệnh JMP Label: Viết chư ơng trình khởi động lại máy tính mà không cần ấn nút
RESET, biết đoạn ch ơng trình khởi động máy tính trong ROM BIOS bắt đầu tại địa chỉ F000:E05B.
Trang 44e) Nhúm chuyển điều khiển
J condition short_label
– Lệnh nhảy có điều kiện tr ước tiên kiểm tra điều kiện, sau đó nhảy đến
vị trí đư ợc chỉ bởi nhãn short_label nếu điều kiện đ ược thoả mãn, hoặc tiếp tục thực hiện lệnh kế tiếp nếu điều kiện không thoả mãn
– Mỗi lệnh nhảy chiếm 2 byte trong bộ nhớ Byte đầu tiên là mã lệnh Byte thứ hai là khoảng cách tương đối từ lệnh đến Label, do đó nhãn short_label trong lệnh nhảy có điều kiện phải nằm trong khoảng -128 đến +127
Muốn nhảy xa hơn phải sử dụng lệnh nhảy không điều kiện
– Một số lệnh thường dựng:
• JC (Jump if carry) >< JNC (Jump if not carry)
• JZ (Jump if zero) >< JNZ (Jump if not zero)
• JE (Jump if equal) >< JNE (Jump if not equal)
• JC (Jump if carry) >< JNC (Jump if not carry)