Post on 20-Jun-2015
description
แฟล็�กแล็ะคำ�สั่��งคำณิ�ตศสั่ตร์�
ธนาวิ�นท์� รักธรัรัมานนท์�fengtwr@ku.ac.th
2
หัวิข้�อการัเรั�ยนแฟล็�กคำ�าสั่�งคำณิ�ตศาสั่ตรั�
• คำ�าสั่�งเก��ยวิกบการับวิกแล็ะล็บ• คำ�าสั่�งเก��ยวิกบการัคำ"ณิแล็ะหัารั
ผล็ข้องคำ�าสั่�งคำณิ�ตศาสั่ตรั�ต$อการัเปล็��ยนแปล็งข้องแฟล็�ก
การัคำ�านวิณิสั่มการัคำณิ�ตศาสั่ตรั�อย$างง$าย
3
แฟล็�กรั�จิ�สั่เตอรั� แฟล็�ก คำ'อรั�จิ�สั่เตอรั�ท์��ใช้�เก�บสั่ถานะข้องรัะบบ แฟล็�กข้อง 8086 ม�ข้นาด 16 บ�ต โดยแต$ล็ะบ�ตจิะแท์น
สั่ถานะต$างๆ ข้องรัะบบ แฟล็�กจิะเปล็��ยนแปล็งตามผล็ล็พธ�ข้องคำ�าสั่�งท์าง
คำณิ�ตศาสั่ตรั� การัคำดล็อกข้�อม"ล็จิะไม$ท์�าใหั�แฟล็�กเปล็��ยนแปล็งคำ$า- - - - O D I T S Z - - A P - C
0123456789101112131415
CarryParityAuxiliaryZeroSignTrapInterruptDirectionOverflow
4
แฟล็�กรั�จิ�สั่เตอรั� แฟล็�กท์ด (Carry flag) จิะม�คำ$า 1 หัากม�การัท์ดบ�ตหัรั'อข้อย'มคำ$า แฟล็�กพารั�ต�0 (Parity flag) จิะม�คำ$า 1 ถ�าผล็ล็พธ�ท์��ได�จิากคำ�าสั่�งคำ�านวิณิม�จิ�านวินบ�ตท์��
เท์$ากบ 1 เป1นเล็ข้คำ"$ แฟล็�กช้$วิย (Auxiliary flag) จิะม�คำ$า 1 หัาก 4 บ�ตข้วิาม'อข้องผล็ล็พธ�ม�การัท์ดหัรั'อ
ข้อย'มคำ$า แฟล็�กศ"นย� (Zero flag) จิะม�คำ$า 1 หัากผล็ล็พธ�การัคำ�านวิณิม�คำ$าเท์$ากบศ"นย� แฟล็�กเคำรั'�องหัมาย (Sign flag) จิะม�คำ$า 1 หัากผล็ล็พธ�การัคำ�านวิณิเป1นเล็ข้ล็บ แฟล็�กกบดก (Trap flag) หัากม�คำ$าเป1น 1 จิะบงคำบใหั�ไมโคำรัโปรัเซสั่เซอรั�ปฏิ�บต�งานใน
ภาวิะคำ�าสั่�งข้0นเด�ยวิ (single step) ซ5�งใช้�ในการัด�บกโปรัแกรัม
แฟล็�กอ�นเตอรั�รัพต� (Interrupt Enable flag) หัากม�คำ$าเป1น 1 จิะท์�าใหั�ซ�พ�ย"รับการัอ�นเตอรั�รัพต�แบบมาสั่�ก
แฟล็�กท์�ศท์าง (Direction flag) หัากม�คำ$าเป1น 1 จิะบงคำบใหั�คำ�าสั่�งถ$ายโอนข้�อม"ล็เป1นกล็6$มท์�างานจิากแอดเดรัสั่คำ$าน�อยไปหัาคำ$ามาก หัากม�คำ$าเป1น 0 จิะบงคำบม�การัถ$ายโอนจิากแอดเดรัสั่คำ$ามากไปหัาคำ$าน�อย
แฟล็�กคำ$าล็�นหัล็ก (Overflow flag) ใช้�สั่�าหัรับเล็ข้แบบคำ�ดเคำรั'�องหัมาย หัากม�คำ$าเป1น 1หัมายถ5งผล็ล็พธ�ข้องการัคำ�านวิณิเป1นเล็ข้ท์��ม�คำ$ามากหัรั'อน�อยกวิ$าข้อบเข้ตท์��ก�าหันด
5
แฟล็�กศ�นย์� (Z -ero flag) จิะม�คำ$าเป1น 1 เม'�อผล็ล็พธ�ม�คำ$าเท์$ากบศ"นย� นอกจิากกรัณิ�น�0จิะม�คำ$าเป1น 0
MOV AL,10hADD AL,E0hADD AL,20hSUB AL,10hSUB AL,10h
Z=?Z=1Z=0Z=0Z=1
AL=0AL=20hAL=10hAL=0
6
พร์�ต��แฟล็�ก (P -arity flag)
จิะม�คำ$าเป1น 1 เม'�อผล็ล็พธ�ม�จิ�านวินบ�ตท์��ม�คำ$าเป1นหัน5�งเป1นเล็ข้คำ"$
MOV AL,14hADD AL,20hADD AL,10hSUB AL,8hSUB AL,10h
P=?P=0P=1P=1P=0
AL=34hAL=44hAL=3ChAL=2Ch
7
แฟล็�กทด (C -arry flag) จิะม�คำ$าเป1น 1 เม'�อม�กร์ทดหร์�อกร์ย์�มในการัคำ�านวิณิ พ�จิารัณิาตวิเล็ข้แบบไม#คำ�ดเคำร์��องหมย์
MOV AL,77hADD AL,50hADD AL,50hSUB AL,A0hADD AL,27h
C=?C=0C=1C=1C=0
AL=C7hAL=17hAL=77hAL=9Eh
8
แฟล็�กเคำร์��องหมย์ (S -ignflag) จิะม�คำ$าเป1น 1 เม'�อผล็ล็�พธ์�ม�คำ#ล็บ พ�จิารัณิาตวิเล็ข้แบบคำ�ดเคำรั'�องหัมาย
MOV AL,77hADD AL,50hADD AL,50hSUB AL,A0hADD AL,27h
S=?S=1S=0S=0S=1
AL=C7hAL=17hAL=77hAL=9Eh
9
โอเวอร์�โฟล็�แฟล็�ก (O -verflow flag) จิะม�คำ$าเป1น 1 เม'�อผล็ล็พธ�ม�คำวิามผ�ดพล็าดเน'�องจิาก
เล็ขล็+นหล็�ก พ�จิารัณิาตวิเล็ข้แบบคำ�ดเคำรั'�องหัมาย การัล็�นหัล็กจิะเก�ดข้50นเฉพาะจิ�านวินบวิกรัวิมกนหัรั'อ
จิ�านวินล็บรัวิมกนเท์$าน0น จิะไม$เก�ดการัล็�นหัล็กสั่�าหัรับจิ�านวินบวิกรัวิมกบจิ�านวินล็บ
MOV AL,77hADD AL,50hADD AL,50hSUB AL,A0hADD AL,27h
O=?O=1O=0O=0O=1
AL=C7hAL=17hAL=77hAL=9Eh
10
แฟล็�กอ'�น ๆ แฟล็�กเสั่ร์�ม -(Auxiliary flag)
•จิะม�คำ$าเป1น 1 เม'�อผล็ล็พธ�ต�องม�การัปรับคำ$าข้องการัเก�บตวิเล็ข้แบบ BCD
แฟล็�กท�ศทง -(Direction flag)• ใช้�สั่�าหัรับก�าหันดท์�ศท์างข้องการัปรับคำ$าในคำ�าสั่ �งเก��ยวิกบสั่ายข้�อม"ล็.
แทร์ปแฟล็�ก -(Trap flag)• ใช้�สั่�าหัรับการัตรัวิจิสั่อบการัท์�างานข้องโปรัแกรัม โดยจิะท์�าใหั�เก�ด
การัข้ดจิงหัวิะท์6กคำรั0งหัล็งการัท์�างานข้องคำ�าสั่ �งต$างๆ อ�นเตอร์�ร์�พท�แฟล็�ก -(Interrupt flag)
• ใช้�สั่�าหัรับก�าหันดวิ$าหัน$วิยปรัะมวิล็ผล็จิะตอบสั่นองการัข้ดจิงหัวิะจิากฮารั�ดแวิรั�บางปรัะเภท์หัรั'อไม$
11
คำ�าสั่�งสั่�าหัรับก�าหันดคำ$าข้องแฟล็�ก แฟล็�กบางแฟล็�กสั่ามารัถก�าหันดคำ$าได� เน'�องจิากม�หัน�าท์��
ในการัรัะบ6สั่ถานะบางปรัะการั เรัาจิะเรั�ยกแฟล็�กท์��ม�คำ$าเป1น 1 วิ$าแฟล็�กน0นเซ็�ต ( flag
set ) แล็ะเรั�ยกแฟล็�กท์��ม�คำ$าเป1น 0 วิ$า แฟล็�กน0นเคำล็�ย์ร์� ( flag cleared)
แฟล็�กท์��สั่ามารัถก�าหันดคำ$าได� แล็ะคำ�าสั่�งในการัก�าหันดคำ$า
Carry-flagDirection-flagInterrupt-flag
CLCCLDCLI
STCSTDSTI
Clear SetFlag
12
คำ�าสั่�งคำณิ�ตศาสั่ตรั� คำ�าสั่�งเพ��มแล็ะล็ดคำ$า : INC แล็ะ DEC คำ�าสั่�งบวิก : ADD แล็ะ ADC คำ�าสั่�งล็บ : SUB แล็ะ SBB คำ�าสั่�งเปรั�ยบเท์�ยบ : CMP คำ�าสั่�งกล็บเคำรั'�องหัมาย : NEG คำ�าสั่�งคำ"ณิ : MUL แล็ะ IMUL คำ�าสั่�งหัารั : DIV แล็ะ IDIV คำ�าสั่�งปรับข้นาดข้�อม"ล็ : CBW แล็ะ CWD
13
คำ�าสั่�งเพ��มคำ$า INC แล็ะคำ�าสั่�งล็ดคำ$า DEC
การัเพ��มแล็ะล็ดคำ$าในหัน$วิยคำวิามจิ�าจิะต�องรัะบ6ข้นาดข้องข้�อม"ล็ด�วิย ม�ผล็กรัะท์บกบแฟล็�กท์างคำณิ�ตศาสั่ตรั�ท์0งหัมด ย์กเว+น แฟล็�กทด
INC registerINC memory
DEC registerDEC memory
MOV AL,1DEC ALDEC ALMOV BX,200hMOV [BX],ALINC BYTE PTR [BX]
AL=0hAL=FFh
[200h]=FFh[200h]=00h
ไม$เปล็��ยน C-flag
14
คำ�าสั่�งการับวิก ADD แล็ะ ADC (add with carry)
ผล็ล็พธ�ข้องการับวิกจิะเก�บไวิ�ในโอเปอรั�แล็นด�ตวิหัน�าเสั่มอ คำ�าสั่�ง ADD แล็ะ ADC ม�ผล็กรัะท์บถ5งแฟล็�กท์างคำณิ�ตศาสั่ตรั�ท์6ก
ตวิ เรัาน�ยมใช้�คำ�าสั่�ง ADC ในการับวิกเล็ข้ท์��ต�องการัรัวิมตวิท์ดจิาก
การัคำ�านวิณิท์��ผ$านมา ยกตวิอย$างเช้$น การับวิกเล็ข้ท์��อย"$ในรั�จิ�สั่เตอรั�หัล็ายตวิต$อเน'�องกน
ADD regs,regsADD regs,memADD mem,regsADD regs,immADD mem,imm
ADC regs,regsADC regs,memADC mem,regsADC regs,immADC mem,imm
15
คำ�าสั่�งการัล็บ SUB แล็ะ SBB (sub with borrow)
คำ�าสั่�ง SUB จิะล็บคำ$าในโอเปอรั�แรันด�ตวิหัล็งออกจิากตวิหัน�า แล็ะน�าไปเก�บในโอเปอรั�แรันด�ตวิหัน�า
คำ�าสั่�ง SBB ก�จิะท์�าเช้$นเด�ยวิกน แต$จิะม�การัรัวิมตวิย'มซ5�งเก�บอย"$ใน - Carry flag ด�วิย (คำล็�าย ADC)
คำ�าสั่�ง SUB แล็ะ SBB ม�ผล็กรัะท์บถ5งแฟล็�กท์างคำณิ�ตศาสั่ตรั�ท์6กตวิ
SUB regs,regsSUB regs,memSUB mem,regsSUB regs,immSUB mem,imm
SBB regs,regsSBB regs,memSBB mem,regsSBB regs,immSBB mem,imm
16
ตวิอย$างการัใช้�คำ�าสั่�งบวิกแล็ะล็บ
MOV AX,1115hMOV DX,34DAhADD AX,BXADC DX,CX
การับวิกเล็ข้ 32 บ�ต 341115 เข้�ากบตวิเล็ข้ 32 บ�ตท์��เก�บในคำ"$รั �จิ�สั่เตอรั� CX,BX
น�า 34 115DA h เก�บใน DX,AX
บวิก 16 บ�ตล็$างบวิก 16 บ�ตบนพรั�อมตวิท์ด
SUB AL,BLSBB AH,0
การัล็บเล็ข้ 16บ�ต ในรั�จิ�สั่เตอรั� AX ด�วิยเล็ข้ 8 บ�ตในรั�จิ�สั่เตอรั� BL
ล็บ 8 บ�ตล็$าง ล็บ 8 บ�ตบนพรั�อมตวิย'ม
17
คำ�าสั่�งเปรั�ยบเท์�ยบ CMP คำ�าสั่�ง CMP จิะท์�างานเหัม'อนคำ�าสั่�ง SUB แต$จิะไม$ม�การั
เปล็��ยนแปล็งคำ$าในโอเปอรั�แรันด�ท์0งสั่อง แต$จิะม�การัเปล็��ยนแปล็งคำ$าใน Flag
การัเปล็��ยนแปล็ง flag ข้องคำ�าสั่�ง CMP จิะเหัม'อนกบคำ�าสั่�ง SUB โดยปกต�เรัาจิะใช้�คำ�าสั่�ง CMP ในการัเปรั�ยบเท์�ยบ แล็ะตดสั่�นใจิ
MOV AX,10hCMP AX,100h
MOV BL,10hCMP AL,BL Z-flag = 1, C-flag = 0,
O-flag = 0, S-flag = 0.
Z-flag = 1, C-flag = 0, O-flag = 0, S-flag = 0.
Z-flag = 0, C-flag = 1, O-flag = 0, S-flag = 1.
Z-flag = 0, C-flag = 1, O-flag = 0, S-flag = 1.
18
คำ�าสั่�งกล็บเคำรั'�องหัมาย NEG
คำ�าสั่�ง NEG จิะกล็บคำ$าข้องโอเปอรั�แรันด�ใหั�เป1นคำ$าล็บ
การัแปล็งเป1นคำ$าล็บใช้�วิ�ธ�แบบ 2’scompl ement
คำ�าสั่�ง NEG จิะม�ผล็กรัะท์บกบแฟล็�กท์างคำณิ�ตศาสั่ตรั�ท์0งหัมด แต$สั่�าหัรับ แฟล็�กทดจะม�คำ#เป/นหน0�งเสั่มอหัล็งการัท์�างานข้องคำ�าสั่�งน�0
NEG regs NEG mem
19
ตวิอย$างการัเปล็��ยนคำ$าแฟล็�ก
Instruction Result Z-Flag C-Flag P-Flag S-Flag O-Flag
MOV AL,70h ADD AL,20h ADD AL,70h DEC AL ADD AL,5 ADD AL,30h SUB AL,40h SUB AL,7F NEG AL ADC AL,20h 0 0100 AL=ABh
1 011**0 AL=8Bh0 1000 AL=75h0 0110 AL=F4h0 0000 AL=34h0 0010 AL=04h1 011*0 AL=FFh1 0011 AL=00h1 1100 AL=90h? ???? AL=70h
20
คำ�าสั่�งคำ"ณิ MUL แล็ะ IMUL
ในการัใช้�คำ�าสั่�งคำ"ณิ เรัาจิะรัะบ6เฉพาะตวิคำ"ณิเท์$าน0น สั่�าหัรับตวิต0งแล็ะผล็ล็พธ�จิะอย"$ในรั�จิ�สั่เตอรั�ท์��ก�าหันดไวิ�แล็�วิ โดยจิะข้50นกบข้นาดข้องการัคำ"ณิ
การัคำ"ณิ 8 บ�ต ต�วต��ง : AL ผล็ล็�พธ์� : AX การัคำ"ณิ 16 บ�ต ต�วต��ง : AX ผล็ล็�พธ์� : DX,AX คำ�าสั่�ง MUL จิะคำ"ณิแบบไม$คำ�ดเคำรั'�องหัมาย คำ�าสั่�ง IMUL จิะคำ"ณิแบบคำ�ดเคำร์��องหมย์ คำ�าสั่�งท์0งสั่องจิะม�ผล็กรัะท์บกบ แฟล็�กท์ดแล็ะโอเวิอรั�โฟล็�แฟล็�ก
เท์$าน0น
MUL regs
MUL mem
IMUL regsIMUL mem
21
ตวิอย$างการัใช้�คำ�าสั่�งคำ"ณิ การัคำ"ณิคำ$า 12h ด�วิย คำ$าใน BL
MOV AL,12hMUL BL
ต0งคำ$าใหั�กบตวิต0งคำ"ณิด�วิย BL ผล็ล็พธ�อย"$ใน AX
การัคำ"ณิคำ$าในหัน$วิยคำวิามจิ�าข้นาด 16บ�ตท์�� 200offset hด�วิย คำ$าใน AX จิากน0นน�าผล็ล็พธ�ท์��ได�มาบวิกด�วิยคำ$าใน BXMUL WORD PTR[200h]ADD AX,BXADC DX,0
คำ"ณิ AX กบคำ$าใน [2 0 0 ]จิากน0นน�า BX มารัวิมกบผล็ล็พธ�
22
คำ�าสั่�งคำ"ณิ DIV แล็ะ IDIV
เช้$นเด�ยวิกบการัใช้�คำ�าสั่ �งคำ"ณิ เรัาจิะรัะบ6เฉพาะตวิหัารัเท์$าน0น ตวิต0งแล็ะผล็ล็พธ�จิะอย"$ในรั�จิ�สั่เตอรั�ท์��ก�าหันดไวิ�แล็�วิ โดยจิะข้50นกบข้นาดข้องการัหัารั
การัหัารั 8 บ�ต ต�วต��ง : AX ผล็ล็�พธ์� : AL เศษ : AH การัหัารั 16 บ�ต ต�วต��ง : DX, AX ผล็ล็�พธ์� : AX เศษ
: DX คำ�าสั่�ง DIV จิะหัารัแบบไม$คำ�ดเคำรั'�องหัมาย คำ�าสั่�ง IDIV จิะหัารัแบบคำ�ดเคำร์��องหมย์ คำ�าสั่�งท์0งสั่องจิะไม#ม�ผล็กร์ะทบก�บแฟล็�กทงคำณิ�ตศสั่ตร์�.
DIV regs
DIV mem
IDIV regsIDIV mem
23
คำ�าสั่�งปรับข้นาดข้�อม"ล็ ข้�อม"ล็แบบไม$คำ�ดเคำรั'�องหัมาย เรัาสั่ามารัถท์��จิะก�าหันดคำ$า 0 ใหั�
กบข้�อม"ล็นยสั่�าคำญสั่"งท์��ข้ยายเพ��มข้50นมาได� เพ'�อใหั�ข้นาดใหัญ$ข้50นแล็ะม�คำ$าคำงเด�ม
แต$ถ�าข้�อม"ล็เป1นตวิเล็ข้คำ�ดเคำรั'�องหัมายเรัาจิะต�องใช้�การัปรับคำ$าแบบอ'�น ม�เช้$นน0นคำ$าอาจิผ�ดเพ�0ยนไปได�
คำ�าสั่�ง CBW จิะข้ยายข้นาดข้�อม"ล็แบบคำ�ดเคำรั'�องหัมายใน AL ใหั�ม�ข้นาด 16 บ�ตใน AX
คำ�าสั่�ง CWD จิะข้ยายข้นาดข้�อม"ล็แบบคำ�ดเคำรั'�องหัมายใน AX ใหั�ม�ข้นาด 32 บ�ตใน DX,AX
ต�วอย์#ง การัหัารัคำ$าใน AL
ด�วิย BL
CBWIDIV BL
ข้ยาย - AL > AX.หัารัด�วิย BL ผล็ล็พธ�อย"$ใน AL
24
ตวิอย$างการัแก�สั่มการัท์างคำณิ�ตศาสั่ตรั�
1 คำ�านวิณิคำ$า AL2 + BL2 คำ�ดตวิเล็ข้แบบไม$คำ�ดเคำรั'�องหัมายโดยใหั�ผล็ล็พธ�เป1นเล็ข้ 1
6 บ�ต เก�บท์�� รั�จิ�สั่เตอรั� AXMUL ALMOV CX, AXMOV AL, BLMUL BLADD AX, CX
หัาคำ$า AL*ALน�าไปเก�บไวิ�ท์�� CX เน'�องจิาก AL ต�องใช้�ในการัคำ�านวิณิ
คำ"ณิ BL กบ BL แล็�วิเก�บผล็ล็พธ�ไวิ�ท์�� AXได�ผล็ล็พธ�แล็�วิน�าคำ$า AL*AL ท์��เก�บใน CXมาบวิก 2. คำ�านวิณิคำ$า *(CL BL+DX)/SI โดยคำ�ดเป1น
เล็ข้คำ�ดเคำรั'�องหัมาย
25
ตวิอย$างการัแก�สั่มการัท์างคำณิ�ตศาสั่ตรั�
2. คำ�านวิณิคำ$า *(CL BL+DX)/SI โดยคำ�ดเป1นเล็ข้คำ�ดเคำรั'�องหัมาย
MOV AL,CLMUL BLADD AX,DXCWDIDIV SI
หัาคำ$า CL*BL
บวิกกบ DX.ข้ยายข้นาดเป1น 32 บ�ตหัารัด�วิย SI ผล็อย"$ท์�� AX เศษท์�� DX
26
Question ?