Bộ vi xử lý này hỗ trợ một tập lệnh phong phú và mạnh mẽ, cho phép thực hiện nhiều công việc khác nhau như xử lý số học, xử lý chuỗi ký tự, và quản lý bộ nhớ.Tập lệnh của bộ vi xử lý 808
GIỚI THIỆU CHUNG
Giới thiệu về tập lệnh vxl 8086/8088
Bộ vi xử lý 8086/8088 là một trong những bộ vi xử lý đầu tiên được phát triển bởi Intel vào những năm 1970 và 1980 Đây là những bộ vi xử lý 16-bit có kiến trúc x86 đầu tiên và đã đặt nền móng cho sự phát triển mạnh mẽ của ngành công nghệ máy tính.
Tập lệnh của bộ vi xử lý 8086/8088 được thiết kế dựa trên kiến trúc von Neumann, trong đó các lệnh và dữ liệu được lưu trữ trong bộ nhớ chung Bộ vi xử lý này hỗ trợ một tập lệnh phong phú và mạnh mẽ, cho phép thực hiện nhiều công việc khác nhau như xử lý số học, xử lý chuỗi ký tự, và quản lý bộ nhớ.
Bộ lệnh của bộ vi xử lý 8086/8088 được mô tả bằng các mã máy, với mỗi lệnh được mã hóa thành một chuỗi bit nhị phân cụ thể Những lệnh này thực hiện các phép tính và can thiệp vào các thanh ghi, bộ nhớ và các thiết bị ngoại vi.
Lý do chọn đề tài
Lịch sử quan trọng: Bộ vi xử lý 8086/8088 đã đóng vai trò quan trọng trong sự phát triển của ngành công nghệ thông tin Nghiên cứu về tập lệnh của bộ vi xử lý này giúp bạn hiểu rõ hơn về lịch sử và tiến trình phát triển của công nghệ máy tính.
Cơ sở kiến thức cần thiết: Tìm hiểu về tập lệnh của bộ vi xử lý 8086/8088 cung cấp cho bạn những kiến thức cơ bản về lập trình và kiến trúc máy tính Đây là những kiến thức quan trọng và cần thiết cho việc hiểu sâu về lĩnh vực công nghệ thông tin.
Tính ứng dụng cao: Kiến thức về tập lệnh của bộ vi xử lý 8086/8088 có thể áp dụng vào các dự án và ứng dụng thực tế Đặc biệt, nếu bạn quan tâm đến việc lập trình máy tính cổ điển hoặc nghiên cứu lĩnh vực lịch sử công nghệ, việc tìm hiểu về tập lệnh này sẽ hữu ích và thú vị.
Nền tảng cho việc nghiên cứu tiếp: Tìm hiểu về tập lệnh của bộ vi xử lý 8086/8088 có thể làm nền tảng cho việc nghiên cứu và tìm hiểu sâu hơn về các kiến trúc máy tính hiện đại và các bộ vi xử lý tiến tiến khác.
Thách thức và cơ hội học tập: Tìm hiểu về tập lệnh của bộ vi xử lý 8086/8088 đòi hỏi sự tập trung và nỗ lực Qua quá trình nghiên cứu, bạn sẽ đối mặt với những thách thức và có cơ hội phát triển kỹ năng lập trình và hiểu rõ hơn về nguyên lý hoạt động của máy tính.
Mục đích chọn đề tài
Nâng cao kiến thức về kiến trúc máy tính: Tìm hiểu về tập lệnh của bộ vi xử lý 8086/8088 giúp bạn hiểu rõ hơn về cách hoạt động của một bộ vi xử lý và kiến trúc máy tính 16-bit Điều này giúp bạn xây dựng một cơ sở kiến thức vững chắc về nguyên lý hoạt động của máy tính.
Làm quen với lập trình cổ điển thông qua lệnh bộ vi xử lý 8086/8088 giúp bạn trực tiếp thao tác trực tiếp phần cứng, nắm vững các khái niệm như thanh ghi, bộ nhớ và lệnh máy.
Khám phá lịch sử công nghệ: Bộ vi xử lý 8086/8088 đã đóng vai trò quan trọng trong sự phát triển của công nghệ máy tính Nghiên cứu về tập lệnh này giúp bạn khám phá và hiểu rõ hơn về quá trình tiến hóa của ngành công nghệ thông tin và những bước đột phá quan trọng trong lĩnh vực này. Áp dụng trong dự án và ứng dụng thực tế: Kiến thức về tập lệnh của bộ vi xử lý 8086/8088 có thể được áp dụng trong các dự án và ứng dụng thực tế Đặc biệt, nếu bạn quan tâm đến lập trình nhúng, viết trình điều khiển phần cứng, hoặc nghiên cứu lĩnh vực máy tính cổ điển, việc tìm hiểu về tập lệnh này sẽ mang lại lợi ích rõ ràng.
Phát triển kỹ năng lập trình và giải quyết vấn đề: Nghiên cứu và thực hành với tập lệnh của bộ vi xử lý 8086/8088 đòi hỏi sự tập trung và kỹ năng lập trình.Qua quá trình này, bạn có cơ hội phát triển kỹ năng lập trình, khả năng giải quyết vấn đề và tư duy logic.
TẬP LỆNH VXL 8088/8086
Dạng lệnh
Một lệnh của vi xử lý 86 có dạng tổng quát như sau:
,
Mã gợi nhớ giúp cho người sử dụng biết hoạt động của lệnh Mã gợi nhớ thường là các chữ tiếng anh viết tắt như: MOV là lệnh chuyển, ADD là lệnh cộng, AND là lệnh và luận lý, JMP là lệnh nhảy
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 một số tức thời.
Toán hạng thanh ghi là các thanh ghi của vi xử lý 86 gồm các thanh ghi tổng quát (8 bit lẫn 16 bit) và các thanh ghi đoạn đã biết.
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 như sau:
• Số hệ 2 : ××××××××B (× là 1 bit nhị phân).
• Số hệ 10 : ××××× , hay ×××××D (× là một số thuộc hệ 10).
• Số hệ 16 : ××××H và bắt đầu bằng số (là một số thuộc hệ 16).
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 được đặt trong dấu ngoặc vuông [ ]:
• 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 một nhóm không được xuất hiện trong cùng một đị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], [BX+1], [BP+1] [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]
• Địa chỉ hiệu dụng chính là thành phần offset của địa chỉ luận lý bộ nhớ.
Segment của địa chỉ hiệu dụng được mặc định như sau:
• Nếu không sử dụng BP trong địa chỉ hiệu dụng thì mặc định theo thanh ghi DS.
• Nếu có BP trong địa chỉ hiệu dụng thì mặc định theo thanh ghi SS.
Các hoạt động thực hiện trên bộ nhớ thông qua địa chỉ hiệu dụng chia ra làm 2 trường hợp: hoạt động 8 bit và hoạt động 16 bit.
Hoạt động bộ nhớ 8 bit làm việc trên 1 byte bộ nhớ ngay vị trí chỉ ra bởi địa chỉ hiệu dụng.
Nhóm lệnh chuyển dữ liệu
MOV reg,reg MOV reg,immed
MOV mem,reg MOV mem,immed
MOV reg,mem MOV mem16,segreg
MOV reg16,segreg MOV segreg,mem16
Chép toán hạng nguồn vào toán hạng đích.
Đẩy toán hạng nguồn 16 bit vào chồng (địa chỉ đỉnh chồng là SS:SP).
Ví dụ : PUSH DI ; [SS:SP+1,SS:SP] ← DI
PUSH CS ; [SS:SP+1,SS:SP] ← CS
PUSH [SI] ; [SS:SP+1,SS:SP] ← [SI+1,SI]
POP reg16 POP segreg POP mem16
Giải thích: thđ ← [SS:SP+1,SS:SP]
Lấy dữ liệu từ đỉnh chồng vào toán hạng đích.
; AX ← [SS:SP+1,SS:SP]
; ES ← [SS:SP+1,SS:SP]
Dạng lệnh: XCHG reg,reg XCHG mem,reg
XCHG accum,reg16 XCHG reg,mem
Trao đổi nội dung hai toán hạng cho nhau.
Dạng lệnh: IN accum,immed8
Giải thích: btl ← [cổng IO]
Trường hợp AX sẽ nhập byte thấp trước, byte cao sau.
Dạng lệnh có immed8 dùng trong trường hợp địa chỉ cổng xuất nhập 8 bit.
Ví dụ: IN AL,61h IN AX,40h
Dạng lệnh có thanh ghi DX dùng cho trường hợp địa chỉ cổng 16 bit Tuy nhiên dạng này vẫn có thể dùng cho cổng xuất nhập có địa chỉ 8 bit và có lợi khi sử dụng địa chỉ cổng để nhập nhiều lần.
Dạng lệnh: OUT immed8,accum
Giải thích: [cổng IO] ← btl
Xuất dữ liệu từ thanh ghi bộ tích lũy AL hoặc AX ra cổng xuất nhập có địa chỉ 8 bit là số tức thời immed8 hay có địa chỉ 16 bit trong thanh ghi DX.
Giải thích: AL ← [DS:BX+AL]
Tra bảng Thanh ghi BX giữ địa chỉ đầu bảng Thanh ghi AL giữ chỉ số của phần tử cần lấy ra.
Dạng lệnh: LEA reg16,mem
Giải thích: thđ ← địa chỉ
Nạp địa chỉ hiệu dụng vào thanh ghi 16 bit.
Dạng lệnh: LDS reg16,mem32
Nạp 4 byte bộ nhớ (con trỏ) vào thanh ghi DS và một thanh ghi tổng quát.
Dạng lệnh: LES reg16,mem32
Giải thích: ES ← [địa chỉ+3,địa chỉ+2]
Nạp 4 byte bộ nhớ (con trỏ) vào thanh ghi ES và một thanh ghi tổng quát.
Nhóm lệnh số học
ADD reg,reg ADD reg,immed
ADD mem,reg ADD mem,immed
ADD reg,mem ADD accum,immed
Giải thích: thđ ← thđ + thn
Cộng toán hạng nguồn vào toán hạng đích Kết quả cất vào toán hạng đích.
ADD CX,SI ; CX ← CX + SI
ADD DH,BL ; DH ← DH + BL
ADD BYTE PTR [SI+8],5 ; [SI+8] ← [SI+8] + 05h
Dạng lệnh: ADC reg,reg ADC reg,immed
ADC mem,reg ADC mem,immed
ADC reg,mem ADC accum,immed
Giải thích: thđ ← thđ + thn + CF
Cộng toán hạng đích với toán hạng nguồn với cờ nhớ Kết quả cất vào toán hạng đích ADC dùng cho phép cộng 2 số có chiều dài nhiều byte.
Ví dụ: ADC BX,AX ; BX ← BX + AX + CF
ADC BYTE PTR [1000h],7Ah ; [1000h] ← [1000h]+7Ah+CF
Dạng lệnh: INC reg INC mem
Tăng tức là cộng 1 vào toán hạng đích nhưng không ảnh hưởng cờ nhớ.
Chỉnh ASCII sau phép cộng Chỉnh kết quả trong AL thành 2 số BCD không nén trong AH và AL.
Dạng lệnh: SUB reg,reg SUB reg,immed
Trừ toán hạng đích cho toán hạng nguồn Kết quả cất vào toán hạng đích.
Dạng lệnh: SBB reg,reg SBB reg,immed
Trừ toán hạng đích cho toán hạng nguồn và cờ nhớ Kết quả cất vào toán hạng đích.
Dạng lệnh: DEC reg DEC mem
Giảm tức là trừ 1 vào toán hạng đích nhưng không ảnh hưởng cờ nhớ.
Dạng lệnh: NEG reg NEG mem
Lấy bù 2 toán hạng đích.
Dạng lệnh: CMP reg,reg CMP reg,immed
CMP mem,reg CMP mem,immed
CMP reg,mem CMP accum,immed
So sánh: Thực hiện trừ toán hạng đích cho toán hạng nguồn, không lưu lại kết quả mà chỉ giữ lại tác động của phép trừ lên các cờ.
Chỉnh ASCII sau phép cộng Chỉnh kết quả trong AL thành 2 số BCD không nén trong AH và AL.
Chỉnh thập phân sau phép trừ Chỉnh kết quả trong AL thành số BCD nén trong AL.
Ví dụ: kết quả của (4-8): AL= 0FCh, AF=1, CF=1 sau khi chỉnh:ALh, AF=1, CF=1
Dạng lệnh: MUL reg MUL mem
Nhân hai số không dấu 8 bit hay 16 bit Số bit thực hiện được xác định bằng chiều dài của toán hạng nguồn.
• Phép nhân 8 bit: thực hiện nhân AL với toán hạng nguồn, kết quả 16 bit cất trong thanh ghi AX.
• Phép nhân 16 bit: thực hiện nhân AX với toán hạng nguồn, kết quả 32 bit cất trong 2 thanh ghi DX và AX DX giữ 16 bit cao, AX giữ 16 bit thấp.
Ví dụ: Nếu AL=5, CH=4, sau khi thực hiện lệnh MUL CH ta có AX = AL*CH = 0014h.
Nếu AXP0h, [1001h,1000h]@1h, sau khi thực hiện lệnh MUL
WORD PTR [1000h] ta có DXAX = AX * [1001h,1000h] = 500h * 401h = 00140500h
Nghĩa là DX14h và AX00h.
Nhóm lệnh luận lý
Dạng lệnh: NOT reg NOT mem
Giải thích: thđ ← bÓ 1 của thđ
Dạng lệnh: SHL reg,1 SHL mem,1
SHL reg,CL SHL mem,CL
Giải thích: thđ ← (thđ) dịch trái 1 hay nhiều bit
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.
Dạng lệnh: SHR reg,1 SHR mem,1
SHR reg,CL SHR mem,CL
Dịch phải luận lý Dạng có thanh ghi CL dùng để dịch nhiều bit.
Dạng lệnh: SAR reg,1 SAR mem,1
SAR reg,CL SAR mem,CL
Giải thích: thđ ← (thđ) dịch phải số học 1 hay nhiều bit
Dịch phải số học Dạng có thanh ghi CL dùng để dịch nhiều bit.
Dạng lệnh: ROL reg,1 ROL mem,1
ROL reg,CL ROL mem,CL
Giải thích: thđ ← (thđ) quay trái không qua cờ nhớ 1 hay nhiều bit
Quay trái không qua cờ nhớ Dạng có thanh ghi CL dùng để quay nhiều bit.
Dạng lệnh: ROR reg,1 ROR mem,1
ROR reg,CL ROR mem,CL
Giải thích: thđ ← (thđ) quay phải không qua cờ nhớ 1 hay nhiều bit
Quay phải không qua cờ nhớ Dạng có thanh ghi CL dùng để quay nhiều bit.
Dạng lệnh: RCL reg,1 RCL mem,1
RCL reg,CL RCL mem,CL
Giải thích: thđ ← (thđ) quay trái qua cờ nhớ 1 hay nhiều bit
Quay trái qua cờ nhớ Dạng có thanh ghi CL dùng để quay nhiều bit.
MOV CL,4RCLBYTE PTR [1000h],CL ; quay trái qua cờ nhớ 4 bit.
Dạng lệnh: RCR reg,1 RCR mem,1
RCR reg,CL RCR mem,CL
Giải thích: thđ ← (thđ) quay phải qua cờ nhớ 1 hay nhiều bit
Quay phải qua cờ nhớ Dạng có thanh ghi CL dùng để quay nhiều bit.
MOV CL,2 RCRBYTE PTR [1800h],CL ; quay phải qua cờ nhớ 2 bit.
Dạng lệnh: AND reg,reg AND reg,immed
AND mem,reg AND mem,immed
AND reg,mem AND accum,immed
Giải thích: thđ ← thđ AND thn
Và luận lý Xóa cờ nhớ về 0.
[SI],DXAND BYTE PTR [1000h],10000000bAND AX,0FFF0h
Dạng lệnh: OR reg,reg OR reg,immed
OR mem,reg OR mem,immed
OR reg,mem OR accum,immed
Giải thích: thđ ← thđ OR thn
Dạng lệnh: XOR reg,reg XOR reg,immed
XOR mem,reg XOR mem,immed
XOR reg,mem XOR accum,immed
Giải thích: thđ ← thđ XOR thn
Hay ngoại luận lý Xóa cờ nhớ về 0.
Ví dụ: XOR DL,80h ; đảo bit 7
Xử lý chuỗi
Dạng 1: REP lệnh xử lý chuỗi
Giải thích: giảm CX, lặp lại lệnh theo sau Nếu CX 0
Lặp lại không điều kiện Thanh ghi CX giữ số lần lặp Thường dùng với lệnh chép chuỗi MOVS.
REP MOVSB ; thực hiện lệnh MOVSB 10 lần.
Dạng 2: REPE / REPZ lệnh xử lý chuỗi
Giải thích: giảm CX, lặp lại lệnh theo sau Nếu CX 0 và ZF = 1
Lặp lại nếu bằng / nếu không Hai điều kiện CX 0 và ZF = 1 phải thỏa đồng 0 và ZF = 1 phải thỏa đồng thời thì lệnh theo sau mới được lặp lại Nếu không, làm qua lệnh kế Thường dùng với lệnh so sánh chuỗi CMPS để tìm chuỗi con trong chuỗi lớn.
REPE CMPSB ; thực hiện lệnh CMPSB nếu chưa đủ 10
; lần và hai chuỗi vẫn còn bằng nhau.
Dạng 3: REPNE / REPNZ lệnh xử lý chuỗi
Giải thích: giảm CX, lặp lại lệnh theo sau Nếu CX 0 và ZF = 0
Lặp lại nếu bằng / nếu không Hai điều kiện CX 0 và ZF = 1 phải thỏa 0 và ZF = 1 phải thỏa đồng đồng thời thì lệnh theo sau mới được lặp lại Nếu không, làm qua lệnh kế. Thường dùng với lệnh quét chuỗi SCAS để dò tìm ký tự tong chuỗi.
Sử dụng lệnh MOV để sao chép byte hoặc word từ chuỗi nguồn sang chuỗi đích Thanh ghi DS:SI lưu trữ địa chỉ chuỗi nguồn, trong khi ES:DI lưu trữ địa chỉ chuỗi đích Sau mỗi lần sao chép, địa chỉ chuỗi nguồn trong SI và địa chỉ chuỗi đích trong DI tự động tăng hoặc giảm Hướng tăng/giảm được xác định bởi cờ DF: DF=0 để tăng địa chỉ, DF=1 để giảm địa chỉ.
Lệnh này thường dùng kết hợp với tiếp đầu lệnh REP để thực hiện việc chép một chuỗi hay dãy Lúc đó thanh ghi CX giữ chiều dài chuỗi nguồn.
Ví dụ 1 chép byte: chép 80h byte từ địa chỉ 3000:1000 sang địa chỉ
MOV AX,4800h MOV ES,AX
Ví dụ 2 chép word: yêu cầu như ví dụ 1
MOV AX,3000h MOV DS,AX
MOV AX,4800h MOV ES,AX
So sánh byte hay word của chuỗi nguồn với chuỗi đích Cặp thanh ghi DS:SI giữ địa chỉ chuỗi nguồn Cặp thanh ghi ES:DI giữ địa chỉ chuỗi đích Các thanh ghi giữ địa chỉ offset SI, DI được tự động tăng hay giảm sau mỗi lần so sánh Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF DF=0 xử lý tăng địa chỉ DF=1 xử lý giảm địa chỉ.
Lệnh này thường dùng kết hợp với tiếp đầu lệnh REPE để thực hiện việc so sánh hai chuỗi hay hai dãy với nhau để tìm kiếm một chuỗi con trong một chuỗi lớn Lúc đó thanh ghi CX giữ chiều dài chuỗi.
Có thể có hai nguyên nhân làm ngừng lệnh so sánh chuỗi: hoặc hai chuỗi có byte hay word khác nhau (ZF = 0), hoặc hai chuỗi giống nhau (ZF = 1).
Lệnh REPNE kết hợp với lệnh SCAS để tìm kiếm một dữ liệu trong một chuỗi Thanh ghi CX lưu chiều dài chuỗi cần tìm kiếm.
Có thể có hai nguyên nhân làm ngừng lệnh quét chuỗi: hoặc tìm thấy dữ liệu trong chuỗi (ZF=1 hay CX 0), hoặc hết chuỗi mà vẫn chưa tìm thấy dữ liệu (ZF=0 hay CX=0).
Chuyển điều khiển
Gọi chương trình con Quá trình gọi chương trình con được thực hiện qua 2 bước:
• Cất địa chỉ trở về - chính là địa chỉ lệnh ngay sau lệnh CALL - vào chồng.
• Chuyển sự thi hành chương trình đến địa chỉ lệnh đầu tiên của chương trình con.
Địa chỉ trở về chính là nội dung hiện tại của cặp thanh ghi CS:IP.
• Lệnh gọi trực tiếp đến nhãn nearlabel chỉ cất nội dung IP, và nạp giá trị offset mới vào IP (nội dung CS không đổi) nên chỉ có thể dùng để gọi bên trong một segment Lệnh này còn được gọi là lệnh gọi gần hay gọi trong segment Nhãn nearlabel còn được gọi là nhãn gần và có kích thước 2 byte.
Lệnh gọi trực tiếp đến nhãn farlabel cất nội dung IP lẫn CS, sau đó nạp giá trị offset mới vào IP, nạp giá trị segment mới vào CS nên có thể dùng để gọi đến bất kỳ vị trí bộ nhớ nào cũng được Lệnh này còn được gọi là lệnh gọi xa hay gọi ngoài segment Nhãn farlabel còn được gọi là nhãn xa và có kích thước 4 byte.
Lệnh gọi gián tiếp qua thanh ghi reg16 cũng là một lệnh gọi gần Lúc đó địa chỉ chương trình con được nạp vào thanh ghi trước khi thực hiện lệnh gọi.
Lệnh gọi gián tiếp qua bộ nhớ mem16 được coi là lệnh gọi gần, do địa chỉ chương trình con được lưu trữ trong ô nhớ có địa chỉ hiệu dụng được chỉ định trong lệnh.
Lệnh gọi gián tiếp qua bộ nhớ mem32 là một lệnh gọi xa Lúc đó địa chỉ chương trình con đặt tại ô nhớ có địa chỉ hiệu dụng trong lệnh phải là địa chỉ
4 byte Lúc đó cần phải chỉ rõ ra hoạt động bộ nhớ 32 bit bằng cách dùng toán tử DWORD PTR.
• Ví dụ: CALL DWORD PTR [SI+2000h]
Với lệnh gọi gián tiếp qua bộ nhớ ta có thể tổ chức sắp xếp các địa chỉ chương trình con thành một bảng trong bộ nhớ gọi là bảng nhảy Lúc đó mỗi chương trình con sẽ được gọi theo số thứ tự của nó trong bảng nhảy.
Dạng lệnh: JMP shortlabel JMP mem16
Nhảy không điều kiện Lệnh nhảy không điều kiện thực hiện giống như lệnh gọi nhưng không có bước lưu lại địa chỉ trở về.
Lệnh nhảy đến nhãn ngắn shortlabel là lệnh nhảy tương đối Nơi đến phải nằm trong phạm vi từ -128 đến +127 so với vị 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ào thanh ghi IP Byte độ dời này được mở rộng dấu trước khi cộng vào thanh ghi IP.
Trở về từ chương trình con Lệnh trở về là lệnh dùng để kết thúc một chương trình con.
Lệnh RET để kết thúc một chương trình con gần.
Lệnh RETF để kết thúc một chương trình con xa.
Dạng lệnh trở về có toán hạng immed8 được sử dụng trong các chương trình con có sử dụng thông số trong chồng Trong lệnh này, toán hạng nguồn immed8 sẽ được cộng vào thanh ghi.
SP để chỉnh lại vị trí đỉnh chồng sau khi gọi chương trình con, tránh thất thoát bộ nhớ dùng cho chồng.
2.6.4 Lệnh nhảy có điều kiện
Lệnh nhảy có điều kiện dùng trạng thái các cờ để làm điều kiện.
Sau đây là bảng mã lệnh nhảy có điều kiện cùng với điều kiện nhảy.
- Lặp không điều kiện: Số lần lặp được giữ trong CX, giúp tạo vòng lặp dễ dàng.
Một trong những ứng dụng phổ biến của lệnh lặp vòng là tạo ra các vòng làm trễ.
Dạng lệnh 2: LOOPE/LOOPZ shortlabel
Đôi khi người ta xét các điều kiện để không lặp còn gọi là điều kiện thoát khỏi vòng lặp: CX = 0 hay ZF = 0 Có thể xem đó là các nguyên nhân gây ra kết thúc vòng lặp.
Đôi khi người ta xét các điều kiện để không lặp còn gọi là điều kiện thoát khỏi vòng lặp: CX = 0 hay ZF = 1 Có thể xem đó là các nguyên nhân gây ra kết thúc vòng lặp.
Cách thực hiện lệnh ngắt quãng chính là cách gọi xa gián tiếp qua bộ nhớ 32 bit.
Số ngắt 1 byte immed8 cung cấp trong lệnh chính là số thứ tự của chương trình con phục vụ ngắt quãng Nhờ vậy nên mặc dù lệnh ngắt quãng là lệnh gọi xa nhưng lại rất ngắn.
Các chương trình con phục vụ ngắt quãng thường được dùng cho các chương trình hệ thống (hệ điều hành, chương trình giao tiếp với các thiết bị, các chương trình con sử dụng thường xuyên, ) hơn là dùng cho chương trình của người sử dụng.
Mỗi chương trình con phục vụ ngắt quãng có thể thực hiện nhiều chức năng bên trong nghĩa là các phục vụ được chia nhỏ ra nữa Ví dụ ngắt phục vụ màn hình có chức năng chọn chế độ màn hình, chức năng định vị điểm nháy (cursor), chức năng xuất ký tự ra màn hình, chức năng đồ họa,
Thông số của chương trình phục vụ ngắt quãng thường được truyền thông qua các thanh ghi đầu vào (input) và k?t qu? thi hành chương trình con sẽ giữ trong các thanh ghi đầu ra (output).
Ví dụ: dùng ngắt 17h, chức năng 0 để xuất ký tự ra máy in.
Input: AH = số chức năng (trong trường hợp này là 0).
AL = ký tự cần in (mã ASCII).
DX = số thứ tự máy in (0=LPT1, 1=LPT2,
Ngắt quãng nếu tràn (OF = 1).
Trở về từ chương trình phục vụ ngắt quãng.
Điều khiển bộ xử lý
Giải thích: CF ← bù 1 của CF
Xóa cờ định hướng về 0 Xử lý tăng địa chỉ trong các lệnh xử lý chuỗi.
Lập cờ định hướng lên 1 Xử lý giảm địa chỉ trong các lệnh xử lý chuỗi.
Xóa cờ ngắt quãng về 0 Cấm ngắt quãng cứng.
Lập cờ ngắt quãng lên 1 Cho phép ngắt quãng cứng.
Giải thích: CPU vào trạng thái dừng
Dừng CPU, chờ một ngắt quãng cứng xảy ra (INTR hay NMI).
Giải thích: CPU vào trạng thái đợi
CPU vào trạng thái đợi cho đến khi ngỏ TEST tác động.
Giải thích: Khóa các tuyến trong khi thi hành lệnh theo sau
Khóa các tuyến khi thi hành lệnh theo sau Không cho phép các vi xử lý khác yêu cầu tuyến (chẳng hạn DMA).
Dạng lệnh: ESC immed,reg
Giải thích: đưa lệnh ra tuyến dữ liệu
Phát ra một lệnh cho vi mạch đồng xử lý 8087.
ỨNG DỤNG
Lập trình nhúng
Bộ vi xử lý 8086/8088 được sử dụng rộng rãi trong lập trình nhúng, nơi vi xử lý này làm chủ các hệ thống tích hợp nhúng Với kiến trúc 16-bit và tập lệnh đa dạng, nó được sử dụng trong các ứng dụng như điều khiển công nghiệp, hệ thống tự động hóa, thiết bị y tế, thiết bị đo lường, robot, và nhiều ứng dụng IoT khác.
Giả lập hệ thống cổ điển
Bộ lệnh 8086/8088 được ứng dụng trong giả lập các hệ thống cổ điển trên máy tính hiện đại Các phần mềm giả lập như DOSBox sử dụng bộ lệnh 8086/8088 để chạy các chương trình DOS trên hệ điều hành mới, cho phép người dùng trải nghiệm các ứng dụng và trò chơi cũ được thiết kế cho máy tính x86 cổ điển.
Học tập và nghiên cứu
Bộ lệnh 8086/8088 vẫn được sử dụng trong lĩnh vực giáo dục và nghiên cứu để giúp sinh viên và các nhà nghiên cứu nâng cao hiểu biết về kiến trúc máy tính cổ điển, lập trình gần với phần cứng và các khái niệm cơ bản của máy tính như thanh ghi, bộ nhớ và các lệnh máy.
Phát triển phần mềm đa nền tảng
Mặc dù tập lệnh 8086/8088 thuộc thế hệ cũ, nhưng vẫn có một số hệ điều hành và phần mềm đa nền tảng sử dụng nó Ví dụ, FreeDOS là một hệ điều hành mã nguồn mở dựa trên MS-DOS, sử dụng tập lệnh 8086/8088 để tương thích với các ứng dụng và trò chơi cổ điển.