SlideShare a Scribd company logo
1 of 24
Download to read offline
Ассемблер хэлний команд, директив, операторууд
Ассемблер хэлний нөөц үг
Дараах нөөц үг нь зөвхөн програмын командууд, директив зэрэгт хэрэглэгдэх ба хэрэв
өгөгдөл зарлахдаа хэрэглэвэл програмд алдаа гарах болно.
Регистрийн нэрс
АН BH CH DH CS SS BP
AL BL CL DL DS SI SP
AX BX CX DX ES DI
Командууд
AAA DIV JLE JS OR SBB
AAD ESC JMP JS OUT SCAS
AAM HLT JNA LANF POP SHL
AAS IDIV JNAE LDS POPF SHR
ADC IMUL JNB LEA PUSH STC
ADD IN JNBE LES PUSHF STD
AND INC JNE LOCK RCL STI
CALL INT JNG LODS RCR STOS
CBW INTO JNGE LOOP REP SUB
CLC JRET JNL LOOPS REPE TEST
CLD JA JNLE LOOPNE REPNE WAIT
CLI JAE JNO LOOPNZ REPNZ XCHG
CMC JB JNP LOOPZ REPZ XLAT
CMP JBE JNS MOV RET XOR
CMPS JCXZ JNZ MOVS ROL
CWD JE JO MUL ORO
DAA JG JP NEG SAHF
DAS JGE JPE NOP SAL
DEC JL JPO NOT SAR
-1-
Ассемблер хэлний команд, директив, операторууд
-2-
IBM PC-ийн ассемблер хэлний командууд
AAA (ASCII Adjustfor Addition) - Нэмэх үйлдлийг ASCII хэлбэрт засах
команд
AL регистрт байгаа, ASCII байтуудын нийлбэрийг засна. Өмнөх
нэмэх үйлдлийн үр дүнд үүссэн AL регистрийн ахлах 4 битийг 0
болгох ба хэрэв бага 4 бит нь 9-өөс их (A → F гэсэн утгууд байх
юм бол ) эсвэл AF=1 бол AH регистрийн утгыг нэгээр нэмэгдүүлээд,
AL регистрийн утга дээр 6-г нэмнэ. Мөн CF=AF=1 болгоно.
Нөлөөлөх төлвийн битүүд: AF, CF
AAD (ASCII Adjust for Division) – Хуваах үйлдлийг ASCII хэлбэрт засах
команд
АХ регистрийн агуулж буы 2 байт утгыг 0-9 хоорондох утганд
ASCII-гаар хуваах боломжтой. Үүний тулд АН регистрийн утгыг 10-
аар үржүүлээд, үржвэрийг нь AL регистрийн агуулж буй утган дээр
нэмнэ. АН регистрийн утгыг 0 болгоно.
Нөлөөлөх төлвийн битүүд: PF, SF, ZF
AAM (ASCII Adjust for Multiplication) - Үржих үйлдлийг ASCII хэлбэрт
засах команд
ASCII тэмдэгтүүдийг нэг нэг байтаар нь л үржих боломжтой. Энэ
үйлдэл нь AL регистрийн утгыг 10 (0AH)-т хуваан, АН регистрт
коэффицентийг нь, AL регистрт үлдэгдлийг нь хийнэ.
Нөлөөлөх төлвийн битүүд: PF, SF, ZF
AAS (ASCII Adjust for Subtraction) – Хасах үйлдлийг ASCII хэлбэрт
засах команд
Энэ нь ААА-тай төстэй ажиллагаатай. Өмнөх хасах үйлдлийн үр
дүнд үүссэн AL регистрийн утган дээр үйлдлээ хийнэ. Ингэхдээ AL
регистрийн ахлах 4 битийг 0 болгох ба хэрэв бага 4 бит нь 9-өөс их
(A → F гэсэн утгууд байх юм бол) эсвэл АF= 1 бол AH регистрийн
утгыг 1-ээр хорогдуулаад, AL регистрийн утганаас 6-г хасна. Мөн
CF=AF=1 болгоно.
Нөлөөлөх төлвийн битүүд: AF, CF
ADC (Add with Carry) – Carry битийг оролцуулан нэмэх команд
2 утгыг CF-тэй хамт нэмээд үр дүнг нь эхний операндад хадгална.
ADC АХ, ВХ гэсэн команд нь АХ + ВХ + Carry glag = AX үйлдлийг
хийнэ.
Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF
ADD (Add binary Numers) – Нэмэх команд
Санах ой дотор болон регистрт байгаа байт болон word утгуудыг
хооронд нь нэмэх, мөн регистр болон шууд утгуудыг санах ойд
нэмэх зэрэг үйлдлүүдийг хийнэ. Жишээ нь:
ADD AX, BX гэсэн команд нь АХ + ВХ = АХ үйлдлийг хийнэ.
Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF
AND (Logical AND) – Логик БА үйлдэл
Хоёр гишүүний харгалзах битүүдийн хооронд логик БА үйлдлийг
хийгээд үр дүнг эхний гишүүнд хадгална. Хоёулаа ижил байт, эсвэл
word хэмжээтэй байх ба санах ой болон регистрүүд хооронд, мөн
хоёр дахь гишүүн нь шууд утга байж болно.
Ассемблер хэлний команд, директив, операторууд
-3-
Харгалзах бит 1 0 0 1 1
Харгалзах бит 2 0 1 0 1
Үр дүн 0 0 0 1
Нөлөөлөх төлвийн битүүд : CF, OF, PF=SF=ZF=0, AF
CALL Процедур болон програмыг дуудах команд
Холын болон ойрын процедурыг дуудан ажиллуулна. Процедураас
буцахдаа RET командыг ашиглана. Уг команд нь SP регистрийн
утгыг 2-оор хорогдуулаад, IF регистр IP регистр дахь биелэгдэх
дараагийн командын хаягийг стек санах ойд хийнэ. Дараа нь IP
регистрт дуудаж байгаа програмынхаа шилжлэг хаягийг ачаална.
Дуудагдах процедур нь нэг сегмент дотор болон гадна байгаагаас
хамааран 4 төрлийн CALL команд байна. Нэг сегментээс гаднах
дуудалт нь SP регистрийн утгыг мөн 2-оор хорогдуулан, CS
регистрийн утгыг стек санах ойд хийнэ. Дараа нь CP дуудагдах
сегментийн хаягийг ачаална.
Нөлөөлөх төлвийн битүүд: байхгүй.
CBW (Convert Byte to Word) – Байтыг word болгох
AL регистрийн signed байт утгыг АХ регистрт хийх ба AL-ийн ахлах
бит буюу 7 дахь битээр АН –ийн битүүдийг дүүргэнэ. Флаг битүүдэд
нөлөөлөхгүй.
CLC (Clear Carry Flag) – Орон шилжилтийн төлвийн бит CF-ийг
цэвэрлэн 0 болгоно. Үүний дараа хийгдэх ADC команд зөвхөн 2
гишүүний нийлбэрийг бодно. CLC нь гишүүнгүй үйлдэл юм.
Нөлөөлөх төлвийн битүүд: CF 0 болно.
CLD (Clear Direction Flag) - Чиглэлийн төлвийн бит DF-ийг цэвэрлэн 0
болгоно. Үүний үр дүнд CMPS, MOVS зэрэг тэмдэгттэй хийх
үйлдлүүд нь зүүнээс баруун тийш хийгдэнэ.
Нөлөөлөх төлвийн битүүд: DF 0 болно.
CLI (Clear Interrupt Flag) – Тасалдлын төлвийн бит IF-ийг цэвэрлэн 0
болно.
CMC (Complement Carry Flag) – CF төлвийн битийг урвуулна. 0 байсан
бол 1, 1 байсан бол 0 болгоно.
Нөлөөлөх төлвийн битүүд: CF
CMP (Compare) – 2 өгөгдлийн талбарын утгуудыг хасах зарчмаар
харьцуулна. Энэ команд нь гишүүн 1-ээс гишүүн 2-ийг хассан мэт
үйлдлийг хийх ба эдгээр гишүүдийн утганд нөлөөлөхгүй, Харин
төлвийн битүүдэд нөлөөнө. Гишүүд нь байт байж болно, word
хэмжээтэй ч байж болно. Энэ үйлдэл нь регистр, санах ой, шууд
утгыг регистртэй, эсвэл регистр, шууд утгыг санах ойн утгатай
харьцуулна.
Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF
CMPS/
CMPSB/
CMPSBW
(Compare Byte or Word String) – Байт байт буюу word word
хэмжээгээр дуртын уртттай тэмдэгт өгөгдлүүдийг харьцуулна.
Жишээ нь: REPE CMBSB гэж хэрэглэж болно. D ба ES:DI гэсэн хос
Ассемблер хэлний команд, директив, операторууд
-4-
регисртүүдээр санах ойн үүрүүдийн хаягыг тодорхойлно. DF
чиглэлийн битээс хамаарч DI, SI шилжлэг хаягууд нь нэмэгдэх буюу
хорогдоно. DF нь 0 бол зүүнээс баруун тийш харьцуулан, DI, SI
шилжлэг хаягуудыг нэмэгдүүлнэ. Харин 1 бол баруунаас зүүн тийш
харьцуулан, шилжлэг хаягыг хорогдуулах замаар харьцуулна.
Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF
CWD (Convert Word to Doubleword) – АХ регистрийн signed 2 утгыг
DX:AX регистрт хийх ба АХ-ийн ахлах бит буюу 15 дахь битээр DX-
ийн битүүдийг дүүргэнэ. Флаг битүүд нөлөөлөхгүй.
DAA (Decimal Adjust for Addition) – Нэмэх үйлдэл хийхэд 10-тын болгон
засах үйлдэл
BCD 2 тоог нэмэхэд AL регистрт гарах үр дүнг засна. Бага битийн
ута 9-өөс их эсвэл AF төлвийн бит 1 бол энэ үйлдэл AL регистрийн
утган дээр 6-г нэмэн, AF төлвийн бтийг 1 болгоно. Хэрэв AL
регистрийн утга 9F-ээс их, эсвэл CF төлвийн бит 1 бол энэ үйлдэл нь
AL регистрийн утган дээр 60-ийг нэмээд, төлвийн битийг 1 болгоно.
Нөлөөлөх төлвийн битүүд: AF, CF, PF, SF, ZF
DAS (Decimal Adjust for Subtraction) – хасах үйлдэл хийхэд 10-тын
болгон засах үйлдэл
BCD 2 тоог хасахад AL регистрт гарах үр дүнг засна. Бага битийн
утга 9-өөс их эсвэл AF төлвийн бит 1 бол энэ үлдэл AL регистрийн
утгаас 6-г хасан, AF төлвийн битийг 1 болгоно. Хэрэв AF
регистрийн утга 9F-ээс их, эсвэл CF төлвийн бит 1 бол энэ үйлдэл нь
AL регистрийн утгаас 60-г хасаад, CF төлвийн битийг 1 болгоно.
Нөлөөлөх төлвийн битүүд: AF, CF, PF, SF, ZF
DEC (Decrement by 1) – Нэгээр хорогдуулах үйлдэл
Регистр болон санах ой дахь 1 байт эсвэл нэг word утгыг нэгээр
хорогдуулна. DEC CX гэх мэтээр бичигдэнэ.
Нөлөөлөх төлвийин битүүд: AF, OF, PF, SF, ZF
DIV (Unsigned integer Divide) – Хуваах үйлдэл
Байт оперантын хувьд 16 бит AX регистрийн утгыг 8 бит регистрт
буюу санах ойн утганд хуваагаад 8 бит үр дүнг AL регистрт,
үлдэгдлийг нь AH регистрт хийнэ. Word операндын хувьд DX:AX
регистрийн хосд байгаа 32 бит утганд 16 бит регистр буюу санах ойн
утгыг хуваагаад 16 бит үр дүнг АХ регистрт, үлдэгдлийг нь DX
регистрт хийнэ. Жишээ: DIV BL нь (AX)/(BL)=(AL) ; үлдэгдлийг нь
АН-д оруулах үйлдлийг хийнэ.
Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF
ESC (Escape) – Энэ команд нь дагалдах математик процессорыг команд
болон гишүүнээр ханган, үйлдэл гүйцэтгүүлнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
HLT (Enter Halt State) – Тасалдал хүлээж байхдаа процессорыг
зогсолтын горимд оруулна. Энэ командыг өгөхөд CS болон IP
регистрүүд HLT командын дараагийн командыг заан зогсох бөгөөд
тасалдал орж ирмэгц, эдгээр регистрүүдийн утгыг стек ойд хийн
Ассемблер хэлний команд, директив, операторууд
-5-
тасалдлыг гүйцэтгэнэ. IRET командаар буцна.
Нөлөөлөх төлвийн битүүд: байхгүй
IDIV (signed Integer Division) – Signed тоонуудыг хуваах үйлдэл
DIV үйлдэлтэй бараг ижил боловч ялгаа нь signed тоонууд дээр
үйлдэл хийн, хамгийн ахлах битийг тэмдэгийн бит гэж үзнэ. 1
байвал сөрөг тоо гэж ойлгоно.
Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF
IMUL (signed Integer Multiplication) - Signed тоонуудыг үржинэ.
MUL үйлдэлтэй бараг ижил боловч ялгаа нь signed тоонууд дээр
үйлдэл хийнэ. Хамгийн ахлах битийг тэмдэгийн бит гэж үзнэ. 1
байвал сөрөг тоо гэж ойлгоно.
Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF
IN (Input byte or word)- Портоос өгөгдөл оруулах үйлдэл
Оролтын портоос 1 байт өгөгдөлийг авбал AL регистрт олгох ба 2
байт өгөгдлийг авбал AX регистрт ачаална. DX регистрт портын
дугаарыг олгож болно. Эсвэл портын дугаарыг шууд тоон хаягаар нь
өгч болно.
IN AX, DX эсвэл IN AX, портын дугаар
Нөлөөлөх төлвийн битүүд: байхгүй
INC (Increment by 1) – Нэгээр нэмэгдүүлэх үйлдэл
Регистр буюу санах ойн байт буюу word утгыг нэгээр нэмэгдүүлнэ.
Жишээ нь: INC CX гэвэл СХ регистрийн утга нэмэгдэнэ.
Нөлөөлөх төлвийн битүүд: AF, OF, PF, SF, ZF
INT (Interrupt) – Тасалдал дуудах команд
Флаг регистрийн утгыг стщк ойд хийнэ. Алхамын TF ба тасалдлын
IF битүүдийг цэвэрлэн 0 болгоно. CS ба IP регистрийн утгыг мөн
стек ойд хийнэ. Тасалдлын дугаарыг 4-өөр үржүүлэн, тасалдлын
вектор хаягийг олно. Тасалдлын хаягийн сүүлийн 2 байтыг CS
регистрт, эхний 2 байтыг IP регистрт хийнэ.
Нөлөөлөх төлвийн битүүд: IF=0, TF=0 болно.
INTO (Interrupt on Oferflow) – Дүүргэлтийн OF бит 1 болвол тасалдлыг
дуудна.
Флаг регистрийн тугыг стек ойд хийнэ. Алхамын TF ба тасалдлын IF
битүүдийг цэвэрлэн 0 болгоно. CS ба IP регистрүүдийн утгыг мөн
стек ойд хийнэ. 4-р тасалдлын хаягийн сүүлийн 2 байтыг CS
регистрт, эхний 2 байтыг IP регистрт хийнэ. Хэрэв OF бит 0 бол
ямар ч үйлдэл хийгдэхгүй.
Нөлөөлөх төлвийн битүүд: IF, TF
IRET (Interrupt Return) – Тасалдлаас буцах команд
Стекийн орой дахь утгыг IP регистрт аван дараагийнх нь утгыг CS
регистр хийнэ. Түүний дараагийн стекийн оройн утгыг флаг
регистрт хийнэ.
Нөлөөлөх төлвийн битүүд: стекийн утгын дагуу бүх битүүд
тавигдана.
Ассемблер хэлний команд, директив, операторууд
-6-
JA/ JNBE (Jump if Adobe or Jump if Not Below/ Equal) – Илүү буюу тэнцүү,
бага биш бол үсрэнэ.
CF=0 ба ZF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг
хаягийг IP регистр дээр нэмэн үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JAE/ JNB (Jump if Adobe/Equal or Jump if Not Below) – Илүү, тэнцүү буюу
бага биш бол үсрэнэ.
CF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP
регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JB/
JNAE
(Jump if Below or Jump if Not Adobe/ Equal) – Бага буюу илүү,
тэнцүү биш бол үсэрнэ.
CF=1 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP
регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JBE/ JNA (Jump if Below/Equal or Jump if Not Adobe) – Бага, тэнцүү буюу
илүү биш бол үсрэнэ. CF=1 эсвэл ZF=1 бол бол уг команд нь дуудаж
байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх
үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JC (Jump if Carry) – Carry буюу орон шилжилт үүсвэл үсрэнэ.
CF=1 бол үсрэнэ. JB/ JNAE зомандтай ижил үйлдэл хийнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JCXZ (Jump if CX is Zero ) – СХ регистрийн утга 0 бол үсрэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JE/ JZ (Jump if Equal or Jump if Zero) - Тэнцүү буюу үр дүн 0 бол үсрэнэ.
ZF=1 бол уг команд нь уг команд нь дуудаж байгаа гишүүний
шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JG/ JNLE (Jump if Greater or Jump if Not Less/ Equal) – ZF=0 ба SF=OF
утгатай бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг
IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JGE/ JNL (Jump if Greater or Jump if Not Less) – SF=OF бол уг команд нь
дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн,
үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JL/ JNGE (Jump if Less or Jump Not Greater/ Equal) – SF бит OF биттэй ижил
утгатай ижил утгайтай биш бол уг команд нь дуудаж байгаа
гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг
гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
Ассемблер хэлний команд, директив, операторууд
-7-
JLE/ JNG (Jump if Less/ Equal or Jump if Not Greater) – ZF=1 эсвэл SF бит
нь OF-тэй ижил утгатай биш бол уг команд нь дуудаж байгаа
гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг
гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JMP (Unconditional Jump) – Нөхцөлт бус үсрэлт бөгөөд ямар ч зүйлээс
шалтгаалахгүй заасан хаяг уруу үсрэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JNC (Jump No Carry) - Carry үүсээгүй буюу CF=0 бол уг команд нь
дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн,
үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JNE/ JNZ (Jump if Not Equal/ Jump if Not Zero) – Тэнцүү биш буюу үр дүн 0
биш бол үсрэнэ.
ZF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP
регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JNO (Jump No Overflow) – Overglow үүсээгүй буюу OF=0 бол уг команд
нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн,
үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JNP/ JPO (Jump No Parity/ Jump Parity Odd) – Parity флаг тэгш буюу PF=0
бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP
регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JNS (Jump No Sign) – Эерэг үр дүн гарвал буюу SF=0 бол уг команд нь
дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн,
үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JNZ (Jump on No Zero) – Тэш биш үр дүн гарвал буюу ZF=0 бол уг
команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр
дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JO (Jump if Overflow) – Overflow үүсвэл буюу OF=1 бол уг команд нь
дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн,
үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JP/ JPE (Jump on Parity/ Jump on Parity Even) – Parity флаг сондгой буюу
PF=1 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP
регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JS (Jump on Sign) – Сөрөг үр дүн гарвал буюу SF=1 бол уг команд нь
Ассемблер хэлний команд, директив, операторууд
-8-
дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн,
үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
JZ (Jump on Zero) – Тэг үр дүн гарвал буюу ZF=1 бол уг команд нь
дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн,
үсрэх үйлдлийг гүйцэтгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
LAHF (Load AH from Flags) – Төлвийн регистрийн бага 8 битийн утгыг
АН регистрт ачаална.
Нөлөөлөх төлвийн битүүд: байхгүй
LDS (Load Data Segment Register) – 16 бит ерөнхий зориулалтын
регистрт санах ойд байгаа гишүүний 16 бит шилжлэг хаягийг, DS
регистрт санах ойд байгаа гишүүний 16 бит сегмент хаягийг хийнэ.
LDS <регистр>, <хувьсагч>
Нөлөөлөх төлвийн битүүд: байхгүй
LEA (Load Effective Address) – 2 дахь гишүүний санах ойн шилжлэг
хаягийг эхний гишүүн болох регистрт хийнэ.
LEA <регистр>, <хувьсагч>
Нөлөөлөх төлвийн битүүд: байхгүй
LOCK (Lock Bus) – Өөр хамтран ажиллагч процессороос түгээгүүр дээрх
өгөгдлийг өөрчлүүлэхгүй байх зорилгоор процессороос илгээдэг
команд
Дараагийн команд хийгдтэл өгөгдлийг өөрчлүүлэхгүй
Нөлөөлөх төлвийн битүүд: байхгүй
LODS/
LODSB/
LODSW
(Load Byte or Word String) – DS:SI регистрийн хосоор хаяглагдах
санах ойн өгөгдлийг AL, AX регистрт ачаална. Байт бол AL-д, 2 байт
бол АХ –д хийнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
LOOP (Loop until Complete) – СХ регистрийн утга 0 биш бол 1-ээр
хорогдуулаад, удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ.
(хаяг нь энэ командаас -128-аас +127 байтын доторх санах ойд
байна)
Нөлөөлөх төлвийн битүүд: байхгүй
LOOPE/
LOOPZ
(Loop if Equals/ Loop if Zero) – СХ регистрийн утга 0 биш бол 1-ээр
хорогдуулаад, удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ.
Мөн СХ регистрийн утга 0 биш байхад ZF=1 бол удирдлагыг
гишүүнээр заагдсан хаягт шилжүүлнэ. (хаяг нь энэ командаас -128-
аас +127 байтын доторх санах ойд байна)
Нөлөөлөх төлвийн битүүд: байхгүй
LOOPNE/
LOOPNZ
(Loop if Not Equals/ Loop if Not Zero) - СХ регистрийн утга 0 биш
бол 1-ээр хорогдуулаад, удирдлагыг гишүүнээр заагдсан хаягт
шилжүүлнэ. Мөн СХ регистрийн утга 0 биш байхад ZF=0 бол
Ассемблер хэлний команд, директив, операторууд
-9-
удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ. (хаяг нь энэ
командаас -128-аас +127 байтын доторх санах ойд байна)
Нөлөөлөх төлвийн битүүд: байхгүй
MOV (Move data) – 2 дахь гишүүний утгыг 1 дэх гишүүнд хуулна.
Бичигдэх хэлбэр: MOV <гишүүн1>, <гишүүн2>
Гишүүн1 Гишүүн 2
Үндсэн регистр
Үндсэн регистр
Сегмент регистр
Санах ойн
хувьсагч
Шууд утга
Сегмент регистр
Үндсэн регистр
Санах ойн
хувьсагч
Санах ойн хувьсагч
Үндсэн регистр
Сегмент регистр
Шууд утга
Нөлөөлөх төлвийн битүүд: байхгүй
MOVS/
MOVSB/
MOVSW
(Move Byte or Word String) – ES:DI регистрийн хосоор хаяглагдсан
санах ойд DS:SI регистрийн хосоор хаяглагдсан санах ойн үүрний
утгыг хуулна. Хэрэв DF=0 бол SI, DI регистрүүд 1-ээр нэмэгдэнэ.
DF=1 бол SI, DI регистрүүд 1-ээр хорогдоно.
Бичигдэх хэлбэр:
MOVS <ES:DI-аар хаяглагдах гишүүн1>, <DS:SI-аар хаяглах
гишүүн2>
Нөлөөлөх төлвийн битүүд: байхгүй
MUL (Multiply unsigned) -Үржүүлэх үйлдэл
Байт операндын хувьд AL регистрийн утгыг 8 бит регистр буюу
санах ойн утгаар үржээд 16 бит үр дүнг AX регистрт хийнэ. Word
операндын хувьд АХ регистрийн утгыг 16 бит регистр буюу санах
ойн утгаар үржээд 32 бит үр дүнг DX:AX регистрийн хосд хийнэ.
Жишээ нь: MUL BL нь (BL)*(AL)=(AX) үйлдлийг хийнэ.
Нөлөөлөх төлвийн битүүд: OF, CF
NEG (Negate) – Санах ой болон регистрийн утгыг 2-тын комплиментэд
хөрвүүлнэ. Жишээ нь: NEG AL гэвэл AL регистр дахь 01011010
гэсэн утгыг 10100110 гэсэн утга болгон AL-д хадгална. Өөрөөр
хэлбэл, битүүдийг 0-ийг 1, 1-ийг 0 болгон хөрвүүлээд үр дүн дээр 1-
ийг нэмнэ.
Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF
NOP (No Operation) - Үйлдэл хийхгүй
Энэ команд нь 3 clock циклийн саатуулал оруулна. XCHG AX, AX
гэсэн машины кодыг үүсгэнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
NOT (Logical NOT) – Логик үгүйсгэх үйлдэл
Тухайн санах ойн болон регистрийн утгыг 1-тийн комплиментэд
Ассемблер хэлний команд, директив, операторууд
-10-
хөрвүүлнэ. Жишээ нь: NOT BH гэвэл ВН регистрийн 10101001
гэсэн утгыг 01010110 болгон уг регистртээ хадгална. Өөрөөр хэлбэл
битүүдийг 0-ийг 1, 1-ийг 0 болгон хөрвүүлнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
OR (Logical OR) – Логик БУЮУ үйлдэл
Эхний гишүүнийг 2 дахь гишүүнтэй БУЮУ үйлдэл хийн үр дүнг 1
дэхь гишүүнд хадгална.
Харгалзах бит 1 0 0 1 1
Харгалзах бит 2 0 1 0 1
Үр дүн 0 1 1 1
Нөлөөлөх төлвийн битүүд: OF, SF=ZF=PF=0, CF
OUT (Output Byte or Word) – Портоор байт буюу 2 байт өгөгдлийг
гаргана. Бичигдэх хэлбэр:
OUT <порт>, AL
OUT <порт>, АХ
Нөлөөлөх төлвийн битүүд: байхгүй
POP (Pop Word of Stack) – Заасан гишүүндээ стекийн орой дахь 16 бит
утгыг хуулж аваад, SP регистрийн утгыг 2-оор хорогдуулна.
Бичигдэх хэлбэр: POP <гишүүн>
Гишүүн: ерөнхий зориулалтын регистр, сегмент регистр, санах ойн
байрлал байж болно.
Нөлөөлөх төлвийн битүүд: AF, CF
POPA (Pop All general registers) – Дараах дарааллаар регистүүдэд стекээс
утга авна.
DI-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна.
SI-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна.
BP-д стекийн оройн утгыг хийгээд SP-ийн утгыг 4-оор хорогдуулна.
BX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна.
DX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна.
CX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна.
AX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна.
Нөлөөлөх төлвийн битүүд: байхгүй
POPF (Pop Flags off Stack) – Стек ойн оройн утгыг флаг регистрт хуулаад
SP-ийн утгыг 2-оор хорогдуулна.
Нөлөөлөх төлвийн битүүд: бүгд шинээр утга авна.
PUSH (Push Word onto Stack) – SP-ийн утгыг 2-оор хорогдуулаад 16
битийн гишүүний утгыг стекийн оройд хийнэ.
PUSH <гишүүн>
Гишүүн: ерөнхий зориулалтын регистр, сегмент регистр, санах ойн
байрлал, шууд утга байж болно.
Нөлөөлөх төлвийн битүүд: байхгүй
PUSHA (Push All general registers) – Бүх регистрүүдийг стек ойд дараах
дарааллаар хийнэ. AX, CX, DX, BX, SP, BP, SI, DI регистрүүдийг
стекд хийх ба регистрийн утгыг хийх бүрийн өмнө SP-ийн утгыг 2-
оор хорогдуулна.
Нөлөөлөх төлвийн битүүд: байхгүй
Ассемблер хэлний команд, директив, операторууд
PUSHF (Push Flags onto Stack) – Төлвийн регистрийг стек ойд хийнэ. SP-
ийн утгыг 2-оор хорогдуулна.
Нөлөөлөх төлвийн битүүд: байхгүй
RCL/
RCR
(Rotate Left Through Carry/ Rotate Right Through Carry) –
Заагдсан гишүүний утгыг заасан тоогоор буюу эсвэл CL регистрт
байгаа тоогоор зүүн/ баруун тийш шилжилтийн төлвийн битийг
дамжуулан шилжүүлнэ. Бичигдэх хэлбэр:
RCL <гишүүн>, 1
RCL <гишүүн>, CL
RCL командын хувьд дараах зурагт харуулсан байдлаар хийгдэнэ.
Харин RCR командын хувьд сумнуудын чиглэл эсрэг тийш байна.
CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
2 байтын гишүүн
CF 7 6 5 4 3 2 1 0
1 байтын гишүүн
Гишүүн: ерөнхий зориулалтын регистр, санах ойн утга байна.
Нөлөөлөх төлвийн битүүд: OF, CF
REP/
REPE/
REPNE/
REPNZ
(Repeat string) – Тэмдэгттэй ажиллах давталтын оператор
REP нь СХ регистрийн утгыг 0 болтол тэмдэгттэй хийх үйлдлийг
давтана. СХ-ийн утгыг өмнө нь зааж өгнө. DF (direction flag)-аар
давталтын чиглэлийг зааж өгнө. DF=0 бол зүүнээс баруун тийш
чиглэлээр давтана. CLD зомандаар DF-ийг 0 болгож болно. DF=1
бол баруунаас зүүн тийш чиглэлээр давтана. STD командаар DF-ийг
1 болгоно.
REPZ/ REPE нь ZF битийн утга 0 байх юм бол тэмдэгттэй хийх
үйлдлийг давтана. ZF-ийн утга 0 биш эсвэл СХ регистрийн утга 0
болох юм бол давталтаас гарна.
REPNZ/ REPNE нь ZF-ийн утга 0 биш байх юм бол тэмдэгттэй хийх
үйлдлийг давтана. ZF-ийн утга 0 эсвэл СХ регистрийн утга 0 болох
юм бол давталтаас гарна.
Нөлөөлөх төлвийн битүүд: байхгүй
RET (Return from a Procedure) – Процедураас буцах команд
Стекийн оройгоос буцах хаягаа аваад, энэ хаягт програмын
удирдлагыг шилжүүлнэ. Хэрэв ойрын буцалт бол IP регистрт, холын
буцалт бол CS ба IP 2 регистрүүдэд стекээс утга олгоно. SP
регистрийн утгыг ойрын бол 2-оор, холын бол 4-өөр нэмэгдүүлнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
ROL/
ROR
(Rotate Left/ Rotate Right) – Заагдсан гишүүний утгыг заасан
тоогооор буюу эсвэл СL регистрт байгаа тоогоор зүүн/ баруун тийш
дамжуулан шилжүүлнэ. Баруун талаасаа шилжиж гарсан бит нь зүүн
талынхаа битэд орно. Мөн шилжилтийн төлвийн битэд орно. Зүүн
-11-
Ассемблер хэлний команд, директив, операторууд
талаасаа шилжиж гарсан бит нь баруун талынхаа битэд орно. Мөн
шилжилтийн төлвийн битэд орно. Бичигдэх хэлбэр:
ROL <гишүүн>, 1
ROL <гишүүн>, CL
ROL командын хувьд дараах зурагт харуулсан байдлаар хийгдэнэ.
Харин ROR командын хувьд сумнуудын чиглэл эсрэг тийш байна.
-12-
Гишүүн: ерөнхий зориулалтын регистр, санах ойн утга байна.
Нөлөөлөх төлвийн битүүд: OF, CF
SAHF (Store AH Contents in Flags) – АН регистрийн утгыг төлвийн
регистрийн бага 8 битэд хуулж хийнэ.
Нөлөөлөх төлвийн битүүд: SF, ZF, AF, PF, CF
SAL/
SAR/
SHL/
SHR
(Shift Left/ Shift Right) – Заагдсан гишүүний утгыг заасан тоогоор
буюу эсвэл CL регистрт байгаа тоогоор зүүн/ баруун тийш
дамжуулан шилжүүлнэ. Баруун талаасаа шилжиж гарсан бит нь зүүн
талыхаа битэд орно, мөн шилжилтйин төлвийн битэд орно. Зүүн
талаасаа шилжиж гарсан бит нь баруун талыхаа битэд орно. Мөн
шилжилтийн төлвийн битэд орно. Бичигдэх хэлбэр:
SAL <гишүүн>, 1
SAL <гишүүн>, CL
SAL ба SHL командуудын хувьд дараах зурагт харуулсан байдлаар
хийгдэнэ.
Харин SAR командын хувьд дараах байдалтай байна. Ахлах бит 15-
ын утгыг 14-р битэд шилжүүлсэн ч гэсэн эргээгээд 15 дахь ахлах
битдээ хадгална.
Харин SHR командын хувьд SAR командтай төстэй боловч ахлах
битэд эргээгээд утгыг нь олгохгүй, харин 0 гэсэн утгыг оруулна.
Гишүүн: Ерөнхий зориулалтын регистр, санах ойн утга байна.
Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF
Ассемблер хэлний команд, директив, операторууд
-13-
SBB (Subtract with borrow ) – Орон шилжилтийн битийг оролцуулан
хасах үйлдэл
2 утгыг CF-тай хамт хасаад үр дүнг нь эхний операндад хадгална.
SBB BX, CX гэсэн команд нь ВХ-СХ-Carry flag=BX үйлдлийг
хийнэ.
Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF
SCAS/
SCASB/
SCASW
(Scan Byte or Word String) – AL регистрийн эсвэл АХ регистрийн
утгыг ES:DI регистрийн хосоор хаяглагдсан санах ойн үүрэн дэх 1
байт эсвэл 1word урттай утгуудтай харьцуулна. DF-ээс хамааран DI
регистр нэмэгдэн, эсвэл хорогдож харьцуулна.
Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF
STC (Set Carry Flag) – Орон шилжилтийн CF төлвийн битийг 1 болгоно.
Нөлөөлөх төлвийн битүүд: CF=1
STD (Set Direction Flag) - Чиглэлийн DF төлвийн битийг 1 болгоно.
Нөлөөлөх төлвийн битүүд: DF=1
STI (Set Interrupt Flag) – Тасалдлын IF төлвийн битийг 1 болгоно.
Нөлөөлөх төлвийн битүүд: IF=1
STOS/
STOSB/
STOSW
(Store Byte or Word String) – AL регистрийн эсвэл АХ регистрийн
утгыг санах ойд хадгална. Санах ойн хаяг нь ES:DI хос регистрээр
хаяглагдана. DF битээс хамаарч DI нь нэмэгдэх буюу хорогдоно.
Байттай ажиллаж байвал 1-ээр, word-той ажиллаж байвал 2-оор
өөрчлөгдөнө.
Нөлөөлөх төлвийн битүүд: байхгүй
SUB (Subtract Binary Numbers) – Хасах үйлдэл
2 гишүүний утгыг хасаад үр дүнг нь эхний операндад хадгална.
SUB AX, BX гэсэн команд нь АХ-ВХ=АХ үйлдлийг хийнэ.
Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF
TEST (Test bits) – Шалгах үйлдэл
Энэ хэдийгээр AND үйлдэлтэй ижил боловч битүүдийг өөрчлөхгүй,
зөвхөн флаг битүүдийш өөрчилдаг.
Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF
WAIT (Put Processor on Wait State) – Гадаад төхөөрөмжаас тасалдал орж
иртэл хүлээлтийн горимд процессор орно. Өөрөөр хэлбэл, гадаад
контроллёр ажлаа дуусган, хариу өгтөл хүлээнэ.
Нөлөөлөх төлвийн битүүд: байхгүй
XCHG (Exchange) – 2 гишүүний утгыг хооронд нь солино.
Бичигдэх хэлбэр: XCHG <шигүүн1>,<гишүүн2>
Гишүүн1 Гишүүн2
Ерөнхий зориулалтын
регистр
Ерөнхий зориулалтын регистр
Санах ойн утга
Санах ойн утга Ерөнхий зориулалтын регистр
Нөлөөлөх төлвийн битүүд: байхгүй
Ассемблер хэлний команд, директив, операторууд
-14-
XLAT (Translate) – XLAT команд нь матриц хэлыэрийн мэдээллийг
хөрвүүлэхэд ашиглагдана. Жишээ нь: ASCII болон EBCDIC
форматуудыг хооронд нь хөрвүүлэхэд, том үсгийг жижиш үрүү гэх
мэт байж болно. XLAT нь AL регистрийн утгыг шилжлэг хаяг
болгон ашиглаж, ВХ регистрийн утга дээр нэмнэ. DS:BX+AL
регистрүүдийн группээр матрицан мэдээллийнхээ эхлэх хаягийг
авна.
Нөлөөлөх төлвийн битүүд: байхгүй
XOR (Exclusive OR) - Зөвхөн БУЮУ үйлдэл
Эхний гишүүнийг 2 дахь гишүүнтэй ЗӨВХӨН БУЮУ үйлдэл хийн,
үр дүнг 1 дэх гишүүнд хадгална.
Харгалзах бит 1 0 0 1 1
Харгалзах бит 2 0 1 0 1
Үр дүн 0 1 1 0
Нөлөөлөх төлвийн бит: OF, SF=ZF=0, AF, PF=0, CF
IBM PC-ийн ассемблер хэлний
директивүүд
ASSUME
Микропроцессор нь SS регистрийг стек ойг хаяглахад, DS регистрийг өгөгдлийн
санах ойг хаяглахад, CS регистрийг код сегмент буюу командын санах ойг хаяглахад
хэрэглэнэ. Програмист нь ассемблерт сегмент бүрийн үүргийг зааж өгөхдөө хийсвэр
үйлдэл буюу assume директивийг ашигладаг.
ASSUME сегментийн нэр: нэр [… , …]
Жишээ нь:
ASUUMESS:stackname, DS:datasegname, CS:codesegname, ES:nothing
гэж бичих нь ES-ийг бичээгүйтэй ижил ба уг регистрийг ашиглаагүй гэсэн үг.
DB (Define byte)
Нэг байт өгөгдлийг тодорхойлно. Жишээ нь:
X DB5 ; X нэртэй 5 гэсэн анхны утгатай хувьсагчийг зарлана.
Y DB? ; Y нэртэй анхны утга нь тодорхой бус хувьсагчийг зарлана.
DW (Define word)
1 үг буюу 2 байт утгыг тодорхойлно.
DD (Define Doubleword)
4 байт утгыг тодорхойлно.
DQ (Define quadword)
8 байт утгыг тодорхойлно.
DT (Define tenbytes)
10 байт утгыг тодорхойлно.
END
END үйлдэл нь ажиллаж байгаа програмыг дуусгана.
END [Процедурын нэр] ; операнд нь хоосон байж болно.
Ассемблер хэлний команд, директив, операторууд
-15-
ENDS [Сегментийн нэр] ; сегментийг дуусгана.
ENDP [Процедурын нэр] ; процедурыг дуусгана.
EXTRN
Энэ директивээр заагдсан хувьсагч эсвэл хаяг нь өөр ассемблер програмд
зарлагдсан бөгөөд энэ програмд хэрэглэгдэнэ гэсэн үг.
Бичигдэх хэлбэр: EXTRN нэр: төрөл […, …]
Нэгээс олон нэрийг мөрийн төгсгөл хүртэл тодорхойлж болно. Эсвэл дахин шинэ
мөрөнд зарлаж болно. Төрөл нь ABS, BYTE, QWORD, FAR, NEAR, WORD байж
болно. Нэр нь хувьсагчийн эсвэл процедурын нэр байх ба EQU директивээр
тодорхойлогдож болно.
GROUP
Нэг програмд ижил төрлийн (код, өгөгдлийн, стек) сегментүүд хэд хэд байж
болно. Ийм үед тэдгээрийг нэр мөрний доор цуглуулан 64К болгох зорилгоор энэ
директивийг хэрэглэнэ. Бичигдэх хэлбэр:
Нэр GROUP сегментийн нэр […, …]
Жишээ нь:
GROUP GROUP SEC1, SEC2
SEC1 SEGMENT PARA’CODE’
ASSUME CS: GROUPX
……….
SEC1 ENDS
SEC2 SEGMENT PARA’CODE’
ASSUME CS: GROUPX
………
SEC2 ENDS
INCLUDE
Өөр бусад програмын хэрэглэж байгаа ассемблер код, эсвэл макро командуудын
хэсгийг өөрийнхөө програмд ашиглаж болно.
Жишээ нь: С дискэн дээр байгаа LABORATOR.LIB нэртэй файлд хандахдаа дараах
байдлаар уг директивийг ашиглана.
INCLUDE C:LABORATOR.LIB
Ингэхэд уг файлыг С дискэн дээр хайж олоод, ашиглана. Хэрэв байхгүй бол алдаа
мэдээлж, INCLUDE директивийг үгүйсгэнэ.
LABEL
Энэ директив нь тодорхойлогдсон хувьсагчийн нэрийг ашиглан дахин
хувьсагчийг тодорхойлохыг зөвшөөрнө. Бичигдэх хэлбэр:
Хувьсагчийн нэр LABEL төрөл
Төрөл нь BYTE, WORD, DWORD байна. Жишээ нь:
VARBYTE LABEL BYTE ; 1 байт өгөгдлийн талбар
DATAW DW 2532H
VARWORD LABEL WORD ; 2 байт өгөгдлийн талбар
DATAB DB 25H
DB 32H
…..
MOV AL, VARBYTE ; Эхний байт өгөгдлийг регистрт хуулна
MOV BX, VARWORD ; 2 байт өгөгдлийг регистрт хуулна.
Ассемблер хэлний команд, директив, операторууд
-16-
Энэ командуудын үр дүнд AL регистрт DATAW өгөгдлийн эхний байтыг авах ба ВХ
регистрт DATAB хаягаас эхлэх 2 байт өгөгдлийг ачаална.
NAME
Модульд буюу програмд нэр олгоно. Бичигдэх хэлбэр:
NAME нэр
Ассемблер нь модулийн нэрийг дараах байдлаар хайна.
- Хэрэв NAME директив оршиж байвал үүний гишүүн нь модулийн нэр байна.
- Хэрэв NAME директив оршихгүй байвал ассемблер нь TITLE директивийн эхний 6
тэмдэгтийг модулийн нэр болгоно.
- Хэрэв NAME, TITLE директивүүд оршиохгүй байвал ассемблер нь эх файлын нэрийг
нь модулийн нэр болгоно.
ORG
Өгөгдлийн буюу код сегментийн эхлэх байрлалыг зааж өгөхдөө үүнийг
хэрэглэнэ. Бичигдэх хэлбэр: ORG хаяг
Жишээ нь:
. code
ORG 100H
гэхэд зод сегмент 100Н хаягнаас эхлэн байрлана гэсэн үг.
PAGE
Програмын эхэнд 1 хуудсанд байх мөрийн тоо, нэр мөрөнд байх тэмдэгтийн тоог
зааж өгнө. 1 хуудсанд 10-255 мөр, 1 мөрт 60-132 тэмдэгт байж болно. Үүнийг
тодорхойлж өгөөгүй бол PAGE 66,80 гэж автоматаар авна.
PAGE 66, 80 ; 1 хуудсанд 60 мөр, 1 мөрөнд 132 тэмдэгт байлгах үйлдэл
PROC
Код сегмент нь програмын биелэгдэх кодоос гадна нэг буюу хэд хэдэн
процедурыг агуулна. Зөвхөн 1 процедуртай сегментийн жишээ:
Сегментийн Нэр SEGMENT PARA
Процедурын Нэр PROC FAR
….
….
RET
Процедур Нэр ENDP
Сегментийн Нэр ENDS
Far гэсэн операнд нь процедурыг програмын эхлэл хэсэг гэдгийг DOS прогам
ачаалагчид зааж өгнө. Endp нь заасан процедуртай ижил нэртэй байх ба процедурын
төгсгөлийг заана.
PUBLIC
Заагдсан нэртэй хувьсагч процедур нь бусад програмуудад ашиглагдана гэсэн
үг. Бичигдэх хэлбэр:
PUBLIC нэр […, …]
Нэгээс олон нэрийг мөрийн төгсгөл хүртэл тодорхойлж болно. Эсвэл дахин шинэ
мөрөнд зарлаж болно. Нэрний оронд програмын нэр, хувьсагчийн нэр, тоо байж болно.
SEGMENT
Бүх ассемблер програмууд нь хамгийн багадаа 1 сегмент агуулна. Энэ нь код
сегмент ба сегментийг биелэгдэх кодууд ашиглана. Зарим програмууд код сегмент дээр
нэмээд, стек сегментийг стек ойтой ажиллахдаа, өгөгдөл тодорхойлохдоо өгөгдлийн
сегментийг ашигладаг. Формат нь:
Ассемблер хэлний команд, директив, операторууд
-17-
Нэр SEGMENT [сонголт] ; сегментийн эхлэл
…
…
Нэр ENDS ; сегментийн төгсгөл
Сонголт нь 3 янз байна.
- alignment type
Сегментийн эхлэх завсрыг заана. Сегментийн эхлэх хаяг 16-д хуваагдах тоо байх
ба үүнийг Paragraph boundary гэнэ. Эндээс эхлэнэ гэж үзвэл PARA гэж тавина. Segment
гэж тодорхойлоогүй бол para гэж ойлгоно.
- combine type
Өөр сегменттэй холбогдох (link) үед STACK, COMMON, PUBLIC, AT,
MEMORY гэх мэт төрлүүдийн аль нэгийг зааж өгнө. Жишээ нь:
Name SEGMENT PARA STACK гэж стек сегментийг тодорхойлж өгч болно. Өөр
програмуудтай холбогдоогүй програмд үүнийг тодорхойлохгүй.
- class type
Класс төрлийг apostrophe (‘ ‘) дотор бичих ба хамтрах (link) сегментүүдтэй групп
болгоход хэрэглэнэ. Жишээ нь:
Нэр SEGMENT PARA STACK ‘Stack’
RECORD
Энэ директив нь битүүдийг тодорхойлох боломжийг олгоно.
Бичигдэх хэлбэр:
Бичлэгийн-хэмжээ RECORD талбарын-нэр: өргөн[=илэрхийлэл][,…]
Жишээ нь: Дараах байдлаар бичлэгийг зарлаж болно.
XYZ RECORD XX:6, YY:7, ZZ:3
XX нь XYZ-ийн эхний 6 битийг, YY нь дараагийн 7 битийг, ZZ нь сүүлийн 3 битийг
тодорхойлно. Нийт 16 бит буюу word болно. Мөн дараах байдлаар утгыг нь олгож
болно.
XYZ RECORD XX:6=010101B, YY:7=1000111B, ZZ:3=101B
STRUC
Энэ директив нь бүтэц дотор талбаруудыг зааж өгнө.
Бичигдэх хэлбэр нь:
Бүтцийн-нэр STRUC
…
[талбарууд]
…
Бүтцийн-нэр ENDS
Жишээ нь:
TITLE STRUCTURE
CODESG SEGMENT PARA ‘Code’
ASSUME CS:CODE, DS:DATA, SS:STACK
ORG 100H
BEGIN:
JMP SHORT MAIN
; - - - - - - - - - - - - - - - - - - - - - -
PARLIST STRUC ; Параметр лист
MAXLEN DB 25
ACTLEN DB ?
NAMELEN DB 25 DUP (‘ ‘)
PARLIST ENDS
PARAMS PARLIST <> ; бүтэц төрлийн өгөгдлийг зарлах
Ассемблер хэлний команд, директив, операторууд
-18-
PROMPT DB ‘NAME ?’, ‘$’; текст
; - - - - - - - - - - - - - - - - - - - - -
MAIN PROC NEAR
MOV AH, 09 ; Дэлгэцэнд хэвлэх функц
LEA DX, PROMPT
INT 21H
MOV AH, 0AH ; Өгөгдөл хүлээж авах функц
LEA DX, PARAMS
INT 21H
MOV AL, PARAMS.ACTLEN ; Оролтын урт
….
RET
MAIN ENDP
CODESG ENDS
END BEGIN
SUBTTL
Дэд програмд нэр өгнө.
TITLE
Програмд гарчиг өгөх ба үүнийг хуудас бүрийн эхэнд хэвлэнэ. Програмын
тайлбартайгаа нийлээд 60 тэмдэгтийн урттай байна.
Жишээ нь: TITLE ASMSORT-assembler program to sort customer names гэх мэт байж
болно.
IBM PC-ийн ассемблер хэлний операторууд
LENGTH
Энэ оператор нь DUP операндаар тодорхойлогдсон, оролтын утгуудын тоог
буцаадаг. Жишээ нь:
DATAX DW 10 DU (/)
…..
MOV DX, LENGTH DATAX
Хэрэв DUP гэсэн опеоанд байхгүй бол оператор нь 01 гэсэнутга буцаана.TYPE
опеоаторын жишээг хар.
OFFSET
Энэ оператор нь өгөгдсөн хувьсагч буюу өгөгдлийн талбарын эхлэлийн шилжлэг
хаягийг буцаана. Бичигдэх хэлбэр:
OFFSET хувьсагч
Жишээ нь:
MOV DX, OFFSET DATAX
Энэ үйлдлийн үр дүнд DATAX өгөгдлийн талбарын эхлэх шилжлэг хаягийг DX
регистрт олгоно. Үүнтэй ижил үйлдэл бол LEA команд юм.
LEA DX, DATAX
PTR
Энэ оператор нь BYTE, WORD, DWORD гэсэн төрлүүдийг ашиглан өгөгдлийн
төрлийг өөрчилж ажиллана. Бичигдэх хэлбэр нь:
Өгөгдлийн-төрөл PRT хувьсагч/тогтмол-утга
Жишээ нь:
TALBARB DB 22H
Ассемблер хэлний команд, директив, операторууд
-19-
DB 35H
TALBARW DW 2672H ; 7226
….
MOV AH, BYTE PTR TALBARW ; 72 гэсэн утгыг AH-д олгоно
ADD BL, BYTE PTR TALBARW+1 ; 26 гэсэн утгыг BL-д олгоно
MOV BYTE PTR TALBARW, 08; Эхний байтад 08-г ачаална
MOV AX, WORD PTR TALBARB ;2235 гэсэн утгыг AX-д ачаална
CALL FAR PTR[BX] ; Холын процедурыг дуудна
SEG
Энэ оператор нь өгөгдсөн хувьсагч буюу өгөгдлийн талбарын сегмент хаягийг
буцаана. Бичигдэх хэлбэр нь:
SEG хувьсагч
Жишээ нь:
MOV DX, SEG DATAX ; Өгөгдлийн сегментийн сегмент хаяг
MOV DX, SEG NEXT ; Код сегментийн сегмент хаяг
SHORT
Энэ оператор нь хэрэв JMP командын үсрэх хаяг нь -127 ба +128-ийн хооронд
байвал FAR атрибутыг NEAR атрибут болгон өөрчилнө.
Бичигдэх хэлбэр нь:
JMP SHORT ХАЯГ
Өөрөөр хэлбэл, 2 байт хаягийг 1 байт болгоно.
SIZE
Энэ оператор нь өгөгдлийн уртыг байтаар тодорхойлно. TYPE операторын
жишээг хар.
TYPE
Энэ оператор нь хувьсагчийн төрлийн байтуудын тоог буцаана.
DB 1
DW 2
DD 4
DQ 8
DT 10
STRUC ; struc-аар тодорхойлогдсон байтуудын тоо
NEAR хаяг FFFFH
FAR хаяг FFFEH
Бичигдэх хэлбэр:
TYPE хувьсагч
Жишээ нь:
UTGA DB ?
TALBAR DB 20 DUP (?)
... ; Буцаах утгууд
MOV AX, TYPE UTGA ; AX=0001 (байт төрөл)
MOV AX, TYPE TALBAR ; AX=0002 (word төрөл)
MOV CX, LENGTHTALBAR ; CX=000A (10 байт)
MOV DX, SIZE TALBAR ; DX=0014 (20 байт)
Ассемблер хэлний команд, директив, операторууд
IBM PC-ийн ASCII кодууд
16-таар Дэлгэцэнд хэвлэгдэх тэмдэгт болон принтерт
гаргах үед хэрэглэгдэх байдал
10-таар
(H)
0 0 Байхгүй
1 1 Хуудасны эхлэл
2 2 Текстийн эхлэл
3 3 ♥ Текстийн төгсгөл
4 4 ♦ Дамжууллын төгсгөл
5 5 Хүсэлт
6 6 ♠ Зөвшөөрөл
7 7 • Хонх дуугаргана
8 8 Bach space
9 9 ° Хөндлөн таб
10 A Босоо таб
-20-
11 B Хөндлөн таб
12 C Хуудасны төгсгөл
13 D Мөрийн эхлэл
14 E Цаасаа гаргах
15 F Цаасаа оруулах
16 10
17 11 Төхөөрөмжийн удирдлага 1
18 12 Төхөөрөмжийн удирдлага 2
19 13 !! Төхөөрөмжийн удирдлага 3
20 14 ¶ Төхөөрөмжийн удирдлага 4
21 15 §
22 16 ⎯
23 17
24 18 ↑ Хүчингүй болгох
25 19 ↓
26 1A →
27 1B ← Escape
28 1C Файлын зааглагч
29 1D Групп зааглагч
30 1E Бичлэгийн зааглагч
31 1F
32 20 Стандарт хоосон зай
33 21 !
34 22 “
35 23 #
36 24 $
37 25 %
38 26 &
39 27 ‘
40 28 (
41 29 )
42 2A *
Ассемблер хэлний команд, директив, операторууд
-21-
43 2B +
44 2C ‘
45 2D -
46 2E .
47 2F /
48 30 0
49 31 1
50 32 2
51 33 3
52 34 4
53 35 5
54 36 6
55 37 7
56 38 8
57 39 9
58 3A :
59 3B ;
60 3C <
61 3D =
62 3E >
63 3F ?
64 40 @
65 41 A
66 42 B
67 43 C
68 44 D
69 45 E
70 46 F
71 47 G
72 48 H
73 49 I
74 4A J
75 4B K
76 4C L
77 4D M
78 4E N
79 4F O
80 50 P
81 51 Q
82 52 R
83 53 S
84 54 T
85 55 U
86 56 V
87 57 W
88 58 X
89 59 Y
90 5A Z
91 5B [
92 5C
Ассемблер хэлний команд, директив, операторууд
-22-
93 5D ]
94 5E ^
95 5F _
96 60 ‘
97 61 a
98 62 b
99 63 c
100 64 d
101 65 E
102 66 f
103 67 g
104 68 h
105 69 i
106 6A j
107 6B k
108 6C l
109 6D m
110 6E n
111 6F o
112 70 p
113 71 q
114 72 r
115 73 s
116 74 t
117 75 u
118 76 v
119 77 w
120 78 x
121 79 y
122 7A z
123 7B {
124 7C |
125 7D }
126 7E ~
127 7F DEL
Ассемблер хэлний команд, директив, операторууд
Editor
програм
Computer
Editor дээр
Prog.asm
файлаа бичнэ.
ASM өргөтгөлтэй эх
(source) програмаа
үүсгэнэ
PROG.ASM
Assembler
програм
Assembler
буюу
боловсруулалт
хийнэ.
Эх програмаа
боловсруулан OBJ
өргөтгөлтэй объект
програмаа үүсгэнэ.
Объект програмыг
(link) үйлдлийн
системтэй холбон
биелэгдэх боломжтой
ЕХЕ програм үүсгэнэ.
PROG.LST,
PROC.CRF
файлууд
PROG.OBJ
PROG.EXE
DOS буюу
үйлдлийн
систем
Link буюу
холболт хийнэ.
Биелэлтэнд
бэлэн
Ассемблер програмын
боловсруулалтын үе шатууд
Ассемблер програм зохиох үе шат
Програмыг дурын текст редактор дээр бичиж болдог. Ассемблер хэлэнд өгөгдсөн
програмыг ЕХЕ болон СОМ файл болгоход 2 үе шатыг дамжина.
1-р шат:
Өгөгдсөн програмыг ассемблер хэлний хөрвүүлэгчээр машины (OBJ) object кодонд
хөрвүүлдэг. Энэ хөрвөсөн дүрсийг object модуль гэнэ. Энэ нь биелэх програм биш
зөвхөн биелэх програм руу хөрвүүлэхэд хялбар болгосон 16-тын хэлбэртэй машины
код юм.
TASM EXAMPLE. ASM гэхэд EXAMPLE.OBJ үүснэ.
-23-
Ассемблер хэлний команд, директив, операторууд
-24-
2-р шат:
Object файлруу хөрвүүлэх явцад ямар нэгэн алдаа илрээгүй бол object файлыг Link.exe
програмын тусламжтайгаар ЕХЕ файлруу хөрвүүлэлтийг хийнэ.
TLINK EXAMPLE. OBJ гэхэд EXAMPLE.EXE файл үүснэ.
ЕХЕ файлыг хэрэглэх хүсэлтэй бол эндээс шууд ашиглах ба СОМ файл мэтээр
ажиллуулах гэвэл No stack segment гэсэн мэдээлэл өгнө. Харин
TLINK /T CALC.OBJ
гэхэд СОМ програм нь объект програмаасаа үүснэ. Мөн өөрөөр
EXE2BIN CALC, CALC.COM гэж ЕХЕ файлаас СОМ файлд хөрвүүлж болно.
СОМ файлд нэр өгч болно. СОМ файл үүссэний дараа OBJ, EXE файлуудыг устгаж
болно.
Програмыг дараах хялбар бичлэгээр бичиж болно.
.MODEL SMALL
.DATA
.STACK 100H
.CODE
BEGIN PROC FAR ; Холын процедурын эхлэл
MOV АХ, @ Data ;Өгөгдлийн сегментийн эхлэлийг зааж өгнө.
MOV DS, AX
……..
……..
RET ; Процедураас буцна.
BEGIN ENDP ; Процедурын төгсгөл
END BEGIN ; Програмын төгсгөл

More Related Content

What's hot

What's hot (20)

It101 1
It101 1It101 1
It101 1
 
си хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р ангиси хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р анги
 
класс диаграм
класс диаграмкласс диаграм
класс диаграм
 
It101 9
It101 9It101 9
It101 9
 
It101 lec6 10.06
It101 lec6 10.06It101 lec6 10.06
It101 lec6 10.06
 
Database 3
Database 3Database 3
Database 3
 
Sw203 Lecture6 Inheritance
Sw203 Lecture6 InheritanceSw203 Lecture6 Inheritance
Sw203 Lecture6 Inheritance
 
компьютэрийн төрлүүд
компьютэрийн төрлүүдкомпьютэрийн төрлүүд
компьютэрийн төрлүүд
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
 
C cons
C consC cons
C cons
 
3
33
3
 
алгоритмчлалын үндэс
алгоритмчлалын үндэсалгоритмчлалын үндэс
алгоритмчлалын үндэс
 
бичвэр мэдээлэл боловсруулах програмын тест
бичвэр мэдээлэл боловсруулах  програмын тестбичвэр мэдээлэл боловсруулах  програмын тест
бичвэр мэдээлэл боловсруулах програмын тест
 
алгоритмын бодлогууд
алгоритмын бодлогуудалгоритмын бодлогууд
алгоритмын бодлогууд
 
Html хичээл
Html хичээлHtml хичээл
Html хичээл
 
11-р ангийн мэдээлэл зүйн тест
11-р ангийн мэдээлэл зүйн тест11-р ангийн мэдээлэл зүйн тест
11-р ангийн мэдээлэл зүйн тест
 
It101 7
It101 7It101 7
It101 7
 
Prog didacticsok
Prog didacticsokProg didacticsok
Prog didacticsok
 
It101 lab9
It101 lab9It101 lab9
It101 lab9
 
мэдээллийн технологи 1 тест
мэдээллийн технологи 1 тестмэдээллийн технологи 1 тест
мэдээллийн технологи 1 тест
 

More from E-Gazarchin Online University

More from E-Gazarchin Online University (20)

ESON101-Хичээл 11 /20190325/
ESON101-Хичээл 11 /20190325/ESON101-Хичээл 11 /20190325/
ESON101-Хичээл 11 /20190325/
 
ECON302-хичээл 10 /20190319/
ECON302-хичээл 10 /20190319/ECON302-хичээл 10 /20190319/
ECON302-хичээл 10 /20190319/
 
ECON302-хичээл 9 /20190312/
ECON302-хичээл 9 /20190312/ECON302-хичээл 9 /20190312/
ECON302-хичээл 9 /20190312/
 
ESON101-Хичээл 8 /20190306/
ESON101-Хичээл 8 /20190306/ESON101-Хичээл 8 /20190306/
ESON101-Хичээл 8 /20190306/
 
ESON101-Хичээл 9 /20190313/
ESON101-Хичээл 9 /20190313/ESON101-Хичээл 9 /20190313/
ESON101-Хичээл 9 /20190313/
 
ECON303-Хичээл 9 /20190311/
ECON303-Хичээл 9 /20190311/ECON303-Хичээл 9 /20190311/
ECON303-Хичээл 9 /20190311/
 
ECON303-Хичээл 8 /20190304/
ECON303-Хичээл 8 /20190304/ECON303-Хичээл 8 /20190304/
ECON303-Хичээл 8 /20190304/
 
ECON303-Хичээл 6 /20190218/
ECON303-Хичээл 6 /20190218/ ECON303-Хичээл 6 /20190218/
ECON303-Хичээл 6 /20190218/
 
ECON303-Хичээл 10 /20190318/
ECON303-Хичээл 10 /20190318/ECON303-Хичээл 10 /20190318/
ECON303-Хичээл 10 /20190318/
 
ESON101-Хичээл 7 /20190227/
ESON101-Хичээл 7 /20190227/ESON101-Хичээл 7 /20190227/
ESON101-Хичээл 7 /20190227/
 
ESON101-Хичээл 6-1 /20190220/
 ESON101-Хичээл 6-1 /20190220/ ESON101-Хичээл 6-1 /20190220/
ESON101-Хичээл 6-1 /20190220/
 
ECON303-Хичээл 7 /20190225/
ECON303-Хичээл 7 /20190225/ECON303-Хичээл 7 /20190225/
ECON303-Хичээл 7 /20190225/
 
ESON101-Хичээл 5 /20190213/
ESON101-Хичээл 5 /20190213/ESON101-Хичээл 5 /20190213/
ESON101-Хичээл 5 /20190213/
 
KLON103-Хичээл-2 /20190125/
KLON103-Хичээл-2 /20190125/KLON103-Хичээл-2 /20190125/
KLON103-Хичээл-2 /20190125/
 
ECON302-хичээл 4 /20190129/
ECON302-хичээл 4 /20190129/ECON302-хичээл 4 /20190129/
ECON302-хичээл 4 /20190129/
 
ESON101-Хичээл 4 /20190130/
ESON101-Хичээл 4 /20190130/ESON101-Хичээл 4 /20190130/
ESON101-Хичээл 4 /20190130/
 
KLON102-Хичээл 3/20190122/
KLON102-Хичээл 3/20190122/KLON102-Хичээл 3/20190122/
KLON102-Хичээл 3/20190122/
 
ESON101-Хичээл 3 /20190123/
ESON101-Хичээл 3 /20190123/ ESON101-Хичээл 3 /20190123/
ESON101-Хичээл 3 /20190123/
 
CPON411-Хичээл-2-1 /20190122/
CPON411-Хичээл-2-1 /20190122/ CPON411-Хичээл-2-1 /20190122/
CPON411-Хичээл-2-1 /20190122/
 
KLON102-Хичээл 2 /2019015/
KLON102-Хичээл 2 /2019015/ KLON102-Хичээл 2 /2019015/
KLON102-Хичээл 2 /2019015/
 

Assembler helnii command

  • 1. Ассемблер хэлний команд, директив, операторууд Ассемблер хэлний нөөц үг Дараах нөөц үг нь зөвхөн програмын командууд, директив зэрэгт хэрэглэгдэх ба хэрэв өгөгдөл зарлахдаа хэрэглэвэл програмд алдаа гарах болно. Регистрийн нэрс АН BH CH DH CS SS BP AL BL CL DL DS SI SP AX BX CX DX ES DI Командууд AAA DIV JLE JS OR SBB AAD ESC JMP JS OUT SCAS AAM HLT JNA LANF POP SHL AAS IDIV JNAE LDS POPF SHR ADC IMUL JNB LEA PUSH STC ADD IN JNBE LES PUSHF STD AND INC JNE LOCK RCL STI CALL INT JNG LODS RCR STOS CBW INTO JNGE LOOP REP SUB CLC JRET JNL LOOPS REPE TEST CLD JA JNLE LOOPNE REPNE WAIT CLI JAE JNO LOOPNZ REPNZ XCHG CMC JB JNP LOOPZ REPZ XLAT CMP JBE JNS MOV RET XOR CMPS JCXZ JNZ MOVS ROL CWD JE JO MUL ORO DAA JG JP NEG SAHF DAS JGE JPE NOP SAL DEC JL JPO NOT SAR -1-
  • 2. Ассемблер хэлний команд, директив, операторууд -2- IBM PC-ийн ассемблер хэлний командууд AAA (ASCII Adjustfor Addition) - Нэмэх үйлдлийг ASCII хэлбэрт засах команд AL регистрт байгаа, ASCII байтуудын нийлбэрийг засна. Өмнөх нэмэх үйлдлийн үр дүнд үүссэн AL регистрийн ахлах 4 битийг 0 болгох ба хэрэв бага 4 бит нь 9-өөс их (A → F гэсэн утгууд байх юм бол ) эсвэл AF=1 бол AH регистрийн утгыг нэгээр нэмэгдүүлээд, AL регистрийн утга дээр 6-г нэмнэ. Мөн CF=AF=1 болгоно. Нөлөөлөх төлвийн битүүд: AF, CF AAD (ASCII Adjust for Division) – Хуваах үйлдлийг ASCII хэлбэрт засах команд АХ регистрийн агуулж буы 2 байт утгыг 0-9 хоорондох утганд ASCII-гаар хуваах боломжтой. Үүний тулд АН регистрийн утгыг 10- аар үржүүлээд, үржвэрийг нь AL регистрийн агуулж буй утган дээр нэмнэ. АН регистрийн утгыг 0 болгоно. Нөлөөлөх төлвийн битүүд: PF, SF, ZF AAM (ASCII Adjust for Multiplication) - Үржих үйлдлийг ASCII хэлбэрт засах команд ASCII тэмдэгтүүдийг нэг нэг байтаар нь л үржих боломжтой. Энэ үйлдэл нь AL регистрийн утгыг 10 (0AH)-т хуваан, АН регистрт коэффицентийг нь, AL регистрт үлдэгдлийг нь хийнэ. Нөлөөлөх төлвийн битүүд: PF, SF, ZF AAS (ASCII Adjust for Subtraction) – Хасах үйлдлийг ASCII хэлбэрт засах команд Энэ нь ААА-тай төстэй ажиллагаатай. Өмнөх хасах үйлдлийн үр дүнд үүссэн AL регистрийн утган дээр үйлдлээ хийнэ. Ингэхдээ AL регистрийн ахлах 4 битийг 0 болгох ба хэрэв бага 4 бит нь 9-өөс их (A → F гэсэн утгууд байх юм бол) эсвэл АF= 1 бол AH регистрийн утгыг 1-ээр хорогдуулаад, AL регистрийн утганаас 6-г хасна. Мөн CF=AF=1 болгоно. Нөлөөлөх төлвийн битүүд: AF, CF ADC (Add with Carry) – Carry битийг оролцуулан нэмэх команд 2 утгыг CF-тэй хамт нэмээд үр дүнг нь эхний операндад хадгална. ADC АХ, ВХ гэсэн команд нь АХ + ВХ + Carry glag = AX үйлдлийг хийнэ. Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF ADD (Add binary Numers) – Нэмэх команд Санах ой дотор болон регистрт байгаа байт болон word утгуудыг хооронд нь нэмэх, мөн регистр болон шууд утгуудыг санах ойд нэмэх зэрэг үйлдлүүдийг хийнэ. Жишээ нь: ADD AX, BX гэсэн команд нь АХ + ВХ = АХ үйлдлийг хийнэ. Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF AND (Logical AND) – Логик БА үйлдэл Хоёр гишүүний харгалзах битүүдийн хооронд логик БА үйлдлийг хийгээд үр дүнг эхний гишүүнд хадгална. Хоёулаа ижил байт, эсвэл word хэмжээтэй байх ба санах ой болон регистрүүд хооронд, мөн хоёр дахь гишүүн нь шууд утга байж болно.
  • 3. Ассемблер хэлний команд, директив, операторууд -3- Харгалзах бит 1 0 0 1 1 Харгалзах бит 2 0 1 0 1 Үр дүн 0 0 0 1 Нөлөөлөх төлвийн битүүд : CF, OF, PF=SF=ZF=0, AF CALL Процедур болон програмыг дуудах команд Холын болон ойрын процедурыг дуудан ажиллуулна. Процедураас буцахдаа RET командыг ашиглана. Уг команд нь SP регистрийн утгыг 2-оор хорогдуулаад, IF регистр IP регистр дахь биелэгдэх дараагийн командын хаягийг стек санах ойд хийнэ. Дараа нь IP регистрт дуудаж байгаа програмынхаа шилжлэг хаягийг ачаална. Дуудагдах процедур нь нэг сегмент дотор болон гадна байгаагаас хамааран 4 төрлийн CALL команд байна. Нэг сегментээс гаднах дуудалт нь SP регистрийн утгыг мөн 2-оор хорогдуулан, CS регистрийн утгыг стек санах ойд хийнэ. Дараа нь CP дуудагдах сегментийн хаягийг ачаална. Нөлөөлөх төлвийн битүүд: байхгүй. CBW (Convert Byte to Word) – Байтыг word болгох AL регистрийн signed байт утгыг АХ регистрт хийх ба AL-ийн ахлах бит буюу 7 дахь битээр АН –ийн битүүдийг дүүргэнэ. Флаг битүүдэд нөлөөлөхгүй. CLC (Clear Carry Flag) – Орон шилжилтийн төлвийн бит CF-ийг цэвэрлэн 0 болгоно. Үүний дараа хийгдэх ADC команд зөвхөн 2 гишүүний нийлбэрийг бодно. CLC нь гишүүнгүй үйлдэл юм. Нөлөөлөх төлвийн битүүд: CF 0 болно. CLD (Clear Direction Flag) - Чиглэлийн төлвийн бит DF-ийг цэвэрлэн 0 болгоно. Үүний үр дүнд CMPS, MOVS зэрэг тэмдэгттэй хийх үйлдлүүд нь зүүнээс баруун тийш хийгдэнэ. Нөлөөлөх төлвийн битүүд: DF 0 болно. CLI (Clear Interrupt Flag) – Тасалдлын төлвийн бит IF-ийг цэвэрлэн 0 болно. CMC (Complement Carry Flag) – CF төлвийн битийг урвуулна. 0 байсан бол 1, 1 байсан бол 0 болгоно. Нөлөөлөх төлвийн битүүд: CF CMP (Compare) – 2 өгөгдлийн талбарын утгуудыг хасах зарчмаар харьцуулна. Энэ команд нь гишүүн 1-ээс гишүүн 2-ийг хассан мэт үйлдлийг хийх ба эдгээр гишүүдийн утганд нөлөөлөхгүй, Харин төлвийн битүүдэд нөлөөнө. Гишүүд нь байт байж болно, word хэмжээтэй ч байж болно. Энэ үйлдэл нь регистр, санах ой, шууд утгыг регистртэй, эсвэл регистр, шууд утгыг санах ойн утгатай харьцуулна. Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF CMPS/ CMPSB/ CMPSBW (Compare Byte or Word String) – Байт байт буюу word word хэмжээгээр дуртын уртттай тэмдэгт өгөгдлүүдийг харьцуулна. Жишээ нь: REPE CMBSB гэж хэрэглэж болно. D ба ES:DI гэсэн хос
  • 4. Ассемблер хэлний команд, директив, операторууд -4- регисртүүдээр санах ойн үүрүүдийн хаягыг тодорхойлно. DF чиглэлийн битээс хамаарч DI, SI шилжлэг хаягууд нь нэмэгдэх буюу хорогдоно. DF нь 0 бол зүүнээс баруун тийш харьцуулан, DI, SI шилжлэг хаягуудыг нэмэгдүүлнэ. Харин 1 бол баруунаас зүүн тийш харьцуулан, шилжлэг хаягыг хорогдуулах замаар харьцуулна. Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF CWD (Convert Word to Doubleword) – АХ регистрийн signed 2 утгыг DX:AX регистрт хийх ба АХ-ийн ахлах бит буюу 15 дахь битээр DX- ийн битүүдийг дүүргэнэ. Флаг битүүд нөлөөлөхгүй. DAA (Decimal Adjust for Addition) – Нэмэх үйлдэл хийхэд 10-тын болгон засах үйлдэл BCD 2 тоог нэмэхэд AL регистрт гарах үр дүнг засна. Бага битийн ута 9-өөс их эсвэл AF төлвийн бит 1 бол энэ үйлдэл AL регистрийн утган дээр 6-г нэмэн, AF төлвийн бтийг 1 болгоно. Хэрэв AL регистрийн утга 9F-ээс их, эсвэл CF төлвийн бит 1 бол энэ үйлдэл нь AL регистрийн утган дээр 60-ийг нэмээд, төлвийн битийг 1 болгоно. Нөлөөлөх төлвийн битүүд: AF, CF, PF, SF, ZF DAS (Decimal Adjust for Subtraction) – хасах үйлдэл хийхэд 10-тын болгон засах үйлдэл BCD 2 тоог хасахад AL регистрт гарах үр дүнг засна. Бага битийн утга 9-өөс их эсвэл AF төлвийн бит 1 бол энэ үлдэл AL регистрийн утгаас 6-г хасан, AF төлвийн битийг 1 болгоно. Хэрэв AF регистрийн утга 9F-ээс их, эсвэл CF төлвийн бит 1 бол энэ үйлдэл нь AL регистрийн утгаас 60-г хасаад, CF төлвийн битийг 1 болгоно. Нөлөөлөх төлвийн битүүд: AF, CF, PF, SF, ZF DEC (Decrement by 1) – Нэгээр хорогдуулах үйлдэл Регистр болон санах ой дахь 1 байт эсвэл нэг word утгыг нэгээр хорогдуулна. DEC CX гэх мэтээр бичигдэнэ. Нөлөөлөх төлвийин битүүд: AF, OF, PF, SF, ZF DIV (Unsigned integer Divide) – Хуваах үйлдэл Байт оперантын хувьд 16 бит AX регистрийн утгыг 8 бит регистрт буюу санах ойн утганд хуваагаад 8 бит үр дүнг AL регистрт, үлдэгдлийг нь AH регистрт хийнэ. Word операндын хувьд DX:AX регистрийн хосд байгаа 32 бит утганд 16 бит регистр буюу санах ойн утгыг хуваагаад 16 бит үр дүнг АХ регистрт, үлдэгдлийг нь DX регистрт хийнэ. Жишээ: DIV BL нь (AX)/(BL)=(AL) ; үлдэгдлийг нь АН-д оруулах үйлдлийг хийнэ. Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF ESC (Escape) – Энэ команд нь дагалдах математик процессорыг команд болон гишүүнээр ханган, үйлдэл гүйцэтгүүлнэ. Нөлөөлөх төлвийн битүүд: байхгүй HLT (Enter Halt State) – Тасалдал хүлээж байхдаа процессорыг зогсолтын горимд оруулна. Энэ командыг өгөхөд CS болон IP регистрүүд HLT командын дараагийн командыг заан зогсох бөгөөд тасалдал орж ирмэгц, эдгээр регистрүүдийн утгыг стек ойд хийн
  • 5. Ассемблер хэлний команд, директив, операторууд -5- тасалдлыг гүйцэтгэнэ. IRET командаар буцна. Нөлөөлөх төлвийн битүүд: байхгүй IDIV (signed Integer Division) – Signed тоонуудыг хуваах үйлдэл DIV үйлдэлтэй бараг ижил боловч ялгаа нь signed тоонууд дээр үйлдэл хийн, хамгийн ахлах битийг тэмдэгийн бит гэж үзнэ. 1 байвал сөрөг тоо гэж ойлгоно. Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF IMUL (signed Integer Multiplication) - Signed тоонуудыг үржинэ. MUL үйлдэлтэй бараг ижил боловч ялгаа нь signed тоонууд дээр үйлдэл хийнэ. Хамгийн ахлах битийг тэмдэгийн бит гэж үзнэ. 1 байвал сөрөг тоо гэж ойлгоно. Нөлөөлөх төлвийн битүүд: AF, CF, OF, PF, SF, ZF IN (Input byte or word)- Портоос өгөгдөл оруулах үйлдэл Оролтын портоос 1 байт өгөгдөлийг авбал AL регистрт олгох ба 2 байт өгөгдлийг авбал AX регистрт ачаална. DX регистрт портын дугаарыг олгож болно. Эсвэл портын дугаарыг шууд тоон хаягаар нь өгч болно. IN AX, DX эсвэл IN AX, портын дугаар Нөлөөлөх төлвийн битүүд: байхгүй INC (Increment by 1) – Нэгээр нэмэгдүүлэх үйлдэл Регистр буюу санах ойн байт буюу word утгыг нэгээр нэмэгдүүлнэ. Жишээ нь: INC CX гэвэл СХ регистрийн утга нэмэгдэнэ. Нөлөөлөх төлвийн битүүд: AF, OF, PF, SF, ZF INT (Interrupt) – Тасалдал дуудах команд Флаг регистрийн утгыг стщк ойд хийнэ. Алхамын TF ба тасалдлын IF битүүдийг цэвэрлэн 0 болгоно. CS ба IP регистрийн утгыг мөн стек ойд хийнэ. Тасалдлын дугаарыг 4-өөр үржүүлэн, тасалдлын вектор хаягийг олно. Тасалдлын хаягийн сүүлийн 2 байтыг CS регистрт, эхний 2 байтыг IP регистрт хийнэ. Нөлөөлөх төлвийн битүүд: IF=0, TF=0 болно. INTO (Interrupt on Oferflow) – Дүүргэлтийн OF бит 1 болвол тасалдлыг дуудна. Флаг регистрийн тугыг стек ойд хийнэ. Алхамын TF ба тасалдлын IF битүүдийг цэвэрлэн 0 болгоно. CS ба IP регистрүүдийн утгыг мөн стек ойд хийнэ. 4-р тасалдлын хаягийн сүүлийн 2 байтыг CS регистрт, эхний 2 байтыг IP регистрт хийнэ. Хэрэв OF бит 0 бол ямар ч үйлдэл хийгдэхгүй. Нөлөөлөх төлвийн битүүд: IF, TF IRET (Interrupt Return) – Тасалдлаас буцах команд Стекийн орой дахь утгыг IP регистрт аван дараагийнх нь утгыг CS регистр хийнэ. Түүний дараагийн стекийн оройн утгыг флаг регистрт хийнэ. Нөлөөлөх төлвийн битүүд: стекийн утгын дагуу бүх битүүд тавигдана.
  • 6. Ассемблер хэлний команд, директив, операторууд -6- JA/ JNBE (Jump if Adobe or Jump if Not Below/ Equal) – Илүү буюу тэнцүү, бага биш бол үсрэнэ. CF=0 ба ZF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JAE/ JNB (Jump if Adobe/Equal or Jump if Not Below) – Илүү, тэнцүү буюу бага биш бол үсрэнэ. CF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JB/ JNAE (Jump if Below or Jump if Not Adobe/ Equal) – Бага буюу илүү, тэнцүү биш бол үсэрнэ. CF=1 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JBE/ JNA (Jump if Below/Equal or Jump if Not Adobe) – Бага, тэнцүү буюу илүү биш бол үсрэнэ. CF=1 эсвэл ZF=1 бол бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JC (Jump if Carry) – Carry буюу орон шилжилт үүсвэл үсрэнэ. CF=1 бол үсрэнэ. JB/ JNAE зомандтай ижил үйлдэл хийнэ. Нөлөөлөх төлвийн битүүд: байхгүй JCXZ (Jump if CX is Zero ) – СХ регистрийн утга 0 бол үсрэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JE/ JZ (Jump if Equal or Jump if Zero) - Тэнцүү буюу үр дүн 0 бол үсрэнэ. ZF=1 бол уг команд нь уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JG/ JNLE (Jump if Greater or Jump if Not Less/ Equal) – ZF=0 ба SF=OF утгатай бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JGE/ JNL (Jump if Greater or Jump if Not Less) – SF=OF бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JL/ JNGE (Jump if Less or Jump Not Greater/ Equal) – SF бит OF биттэй ижил утгатай ижил утгайтай биш бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй
  • 7. Ассемблер хэлний команд, директив, операторууд -7- JLE/ JNG (Jump if Less/ Equal or Jump if Not Greater) – ZF=1 эсвэл SF бит нь OF-тэй ижил утгатай биш бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JMP (Unconditional Jump) – Нөхцөлт бус үсрэлт бөгөөд ямар ч зүйлээс шалтгаалахгүй заасан хаяг уруу үсрэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JNC (Jump No Carry) - Carry үүсээгүй буюу CF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JNE/ JNZ (Jump if Not Equal/ Jump if Not Zero) – Тэнцүү биш буюу үр дүн 0 биш бол үсрэнэ. ZF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JNO (Jump No Overflow) – Overglow үүсээгүй буюу OF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JNP/ JPO (Jump No Parity/ Jump Parity Odd) – Parity флаг тэгш буюу PF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JNS (Jump No Sign) – Эерэг үр дүн гарвал буюу SF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JNZ (Jump on No Zero) – Тэш биш үр дүн гарвал буюу ZF=0 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JO (Jump if Overflow) – Overflow үүсвэл буюу OF=1 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JP/ JPE (Jump on Parity/ Jump on Parity Even) – Parity флаг сондгой буюу PF=1 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JS (Jump on Sign) – Сөрөг үр дүн гарвал буюу SF=1 бол уг команд нь
  • 8. Ассемблер хэлний команд, директив, операторууд -8- дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй JZ (Jump on Zero) – Тэг үр дүн гарвал буюу ZF=1 бол уг команд нь дуудаж байгаа гишүүний шилжлэг хаягийг IP регистр дээр нэмэн, үсрэх үйлдлийг гүйцэтгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй LAHF (Load AH from Flags) – Төлвийн регистрийн бага 8 битийн утгыг АН регистрт ачаална. Нөлөөлөх төлвийн битүүд: байхгүй LDS (Load Data Segment Register) – 16 бит ерөнхий зориулалтын регистрт санах ойд байгаа гишүүний 16 бит шилжлэг хаягийг, DS регистрт санах ойд байгаа гишүүний 16 бит сегмент хаягийг хийнэ. LDS <регистр>, <хувьсагч> Нөлөөлөх төлвийн битүүд: байхгүй LEA (Load Effective Address) – 2 дахь гишүүний санах ойн шилжлэг хаягийг эхний гишүүн болох регистрт хийнэ. LEA <регистр>, <хувьсагч> Нөлөөлөх төлвийн битүүд: байхгүй LOCK (Lock Bus) – Өөр хамтран ажиллагч процессороос түгээгүүр дээрх өгөгдлийг өөрчлүүлэхгүй байх зорилгоор процессороос илгээдэг команд Дараагийн команд хийгдтэл өгөгдлийг өөрчлүүлэхгүй Нөлөөлөх төлвийн битүүд: байхгүй LODS/ LODSB/ LODSW (Load Byte or Word String) – DS:SI регистрийн хосоор хаяглагдах санах ойн өгөгдлийг AL, AX регистрт ачаална. Байт бол AL-д, 2 байт бол АХ –д хийнэ. Нөлөөлөх төлвийн битүүд: байхгүй LOOP (Loop until Complete) – СХ регистрийн утга 0 биш бол 1-ээр хорогдуулаад, удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ. (хаяг нь энэ командаас -128-аас +127 байтын доторх санах ойд байна) Нөлөөлөх төлвийн битүүд: байхгүй LOOPE/ LOOPZ (Loop if Equals/ Loop if Zero) – СХ регистрийн утга 0 биш бол 1-ээр хорогдуулаад, удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ. Мөн СХ регистрийн утга 0 биш байхад ZF=1 бол удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ. (хаяг нь энэ командаас -128- аас +127 байтын доторх санах ойд байна) Нөлөөлөх төлвийн битүүд: байхгүй LOOPNE/ LOOPNZ (Loop if Not Equals/ Loop if Not Zero) - СХ регистрийн утга 0 биш бол 1-ээр хорогдуулаад, удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ. Мөн СХ регистрийн утга 0 биш байхад ZF=0 бол
  • 9. Ассемблер хэлний команд, директив, операторууд -9- удирдлагыг гишүүнээр заагдсан хаягт шилжүүлнэ. (хаяг нь энэ командаас -128-аас +127 байтын доторх санах ойд байна) Нөлөөлөх төлвийн битүүд: байхгүй MOV (Move data) – 2 дахь гишүүний утгыг 1 дэх гишүүнд хуулна. Бичигдэх хэлбэр: MOV <гишүүн1>, <гишүүн2> Гишүүн1 Гишүүн 2 Үндсэн регистр Үндсэн регистр Сегмент регистр Санах ойн хувьсагч Шууд утга Сегмент регистр Үндсэн регистр Санах ойн хувьсагч Санах ойн хувьсагч Үндсэн регистр Сегмент регистр Шууд утга Нөлөөлөх төлвийн битүүд: байхгүй MOVS/ MOVSB/ MOVSW (Move Byte or Word String) – ES:DI регистрийн хосоор хаяглагдсан санах ойд DS:SI регистрийн хосоор хаяглагдсан санах ойн үүрний утгыг хуулна. Хэрэв DF=0 бол SI, DI регистрүүд 1-ээр нэмэгдэнэ. DF=1 бол SI, DI регистрүүд 1-ээр хорогдоно. Бичигдэх хэлбэр: MOVS <ES:DI-аар хаяглагдах гишүүн1>, <DS:SI-аар хаяглах гишүүн2> Нөлөөлөх төлвийн битүүд: байхгүй MUL (Multiply unsigned) -Үржүүлэх үйлдэл Байт операндын хувьд AL регистрийн утгыг 8 бит регистр буюу санах ойн утгаар үржээд 16 бит үр дүнг AX регистрт хийнэ. Word операндын хувьд АХ регистрийн утгыг 16 бит регистр буюу санах ойн утгаар үржээд 32 бит үр дүнг DX:AX регистрийн хосд хийнэ. Жишээ нь: MUL BL нь (BL)*(AL)=(AX) үйлдлийг хийнэ. Нөлөөлөх төлвийн битүүд: OF, CF NEG (Negate) – Санах ой болон регистрийн утгыг 2-тын комплиментэд хөрвүүлнэ. Жишээ нь: NEG AL гэвэл AL регистр дахь 01011010 гэсэн утгыг 10100110 гэсэн утга болгон AL-д хадгална. Өөрөөр хэлбэл, битүүдийг 0-ийг 1, 1-ийг 0 болгон хөрвүүлээд үр дүн дээр 1- ийг нэмнэ. Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF NOP (No Operation) - Үйлдэл хийхгүй Энэ команд нь 3 clock циклийн саатуулал оруулна. XCHG AX, AX гэсэн машины кодыг үүсгэнэ. Нөлөөлөх төлвийн битүүд: байхгүй NOT (Logical NOT) – Логик үгүйсгэх үйлдэл Тухайн санах ойн болон регистрийн утгыг 1-тийн комплиментэд
  • 10. Ассемблер хэлний команд, директив, операторууд -10- хөрвүүлнэ. Жишээ нь: NOT BH гэвэл ВН регистрийн 10101001 гэсэн утгыг 01010110 болгон уг регистртээ хадгална. Өөрөөр хэлбэл битүүдийг 0-ийг 1, 1-ийг 0 болгон хөрвүүлнэ. Нөлөөлөх төлвийн битүүд: байхгүй OR (Logical OR) – Логик БУЮУ үйлдэл Эхний гишүүнийг 2 дахь гишүүнтэй БУЮУ үйлдэл хийн үр дүнг 1 дэхь гишүүнд хадгална. Харгалзах бит 1 0 0 1 1 Харгалзах бит 2 0 1 0 1 Үр дүн 0 1 1 1 Нөлөөлөх төлвийн битүүд: OF, SF=ZF=PF=0, CF OUT (Output Byte or Word) – Портоор байт буюу 2 байт өгөгдлийг гаргана. Бичигдэх хэлбэр: OUT <порт>, AL OUT <порт>, АХ Нөлөөлөх төлвийн битүүд: байхгүй POP (Pop Word of Stack) – Заасан гишүүндээ стекийн орой дахь 16 бит утгыг хуулж аваад, SP регистрийн утгыг 2-оор хорогдуулна. Бичигдэх хэлбэр: POP <гишүүн> Гишүүн: ерөнхий зориулалтын регистр, сегмент регистр, санах ойн байрлал байж болно. Нөлөөлөх төлвийн битүүд: AF, CF POPA (Pop All general registers) – Дараах дарааллаар регистүүдэд стекээс утга авна. DI-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна. SI-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна. BP-д стекийн оройн утгыг хийгээд SP-ийн утгыг 4-оор хорогдуулна. BX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна. DX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна. CX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна. AX-д стекийн оройн утгыг хийгээд SP-ийн утгыг 2-оор хорогдуулна. Нөлөөлөх төлвийн битүүд: байхгүй POPF (Pop Flags off Stack) – Стек ойн оройн утгыг флаг регистрт хуулаад SP-ийн утгыг 2-оор хорогдуулна. Нөлөөлөх төлвийн битүүд: бүгд шинээр утга авна. PUSH (Push Word onto Stack) – SP-ийн утгыг 2-оор хорогдуулаад 16 битийн гишүүний утгыг стекийн оройд хийнэ. PUSH <гишүүн> Гишүүн: ерөнхий зориулалтын регистр, сегмент регистр, санах ойн байрлал, шууд утга байж болно. Нөлөөлөх төлвийн битүүд: байхгүй PUSHA (Push All general registers) – Бүх регистрүүдийг стек ойд дараах дарааллаар хийнэ. AX, CX, DX, BX, SP, BP, SI, DI регистрүүдийг стекд хийх ба регистрийн утгыг хийх бүрийн өмнө SP-ийн утгыг 2- оор хорогдуулна. Нөлөөлөх төлвийн битүүд: байхгүй
  • 11. Ассемблер хэлний команд, директив, операторууд PUSHF (Push Flags onto Stack) – Төлвийн регистрийг стек ойд хийнэ. SP- ийн утгыг 2-оор хорогдуулна. Нөлөөлөх төлвийн битүүд: байхгүй RCL/ RCR (Rotate Left Through Carry/ Rotate Right Through Carry) – Заагдсан гишүүний утгыг заасан тоогоор буюу эсвэл CL регистрт байгаа тоогоор зүүн/ баруун тийш шилжилтийн төлвийн битийг дамжуулан шилжүүлнэ. Бичигдэх хэлбэр: RCL <гишүүн>, 1 RCL <гишүүн>, CL RCL командын хувьд дараах зурагт харуулсан байдлаар хийгдэнэ. Харин RCR командын хувьд сумнуудын чиглэл эсрэг тийш байна. CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 2 байтын гишүүн CF 7 6 5 4 3 2 1 0 1 байтын гишүүн Гишүүн: ерөнхий зориулалтын регистр, санах ойн утга байна. Нөлөөлөх төлвийн битүүд: OF, CF REP/ REPE/ REPNE/ REPNZ (Repeat string) – Тэмдэгттэй ажиллах давталтын оператор REP нь СХ регистрийн утгыг 0 болтол тэмдэгттэй хийх үйлдлийг давтана. СХ-ийн утгыг өмнө нь зааж өгнө. DF (direction flag)-аар давталтын чиглэлийг зааж өгнө. DF=0 бол зүүнээс баруун тийш чиглэлээр давтана. CLD зомандаар DF-ийг 0 болгож болно. DF=1 бол баруунаас зүүн тийш чиглэлээр давтана. STD командаар DF-ийг 1 болгоно. REPZ/ REPE нь ZF битийн утга 0 байх юм бол тэмдэгттэй хийх үйлдлийг давтана. ZF-ийн утга 0 биш эсвэл СХ регистрийн утга 0 болох юм бол давталтаас гарна. REPNZ/ REPNE нь ZF-ийн утга 0 биш байх юм бол тэмдэгттэй хийх үйлдлийг давтана. ZF-ийн утга 0 эсвэл СХ регистрийн утга 0 болох юм бол давталтаас гарна. Нөлөөлөх төлвийн битүүд: байхгүй RET (Return from a Procedure) – Процедураас буцах команд Стекийн оройгоос буцах хаягаа аваад, энэ хаягт програмын удирдлагыг шилжүүлнэ. Хэрэв ойрын буцалт бол IP регистрт, холын буцалт бол CS ба IP 2 регистрүүдэд стекээс утга олгоно. SP регистрийн утгыг ойрын бол 2-оор, холын бол 4-өөр нэмэгдүүлнэ. Нөлөөлөх төлвийн битүүд: байхгүй ROL/ ROR (Rotate Left/ Rotate Right) – Заагдсан гишүүний утгыг заасан тоогооор буюу эсвэл СL регистрт байгаа тоогоор зүүн/ баруун тийш дамжуулан шилжүүлнэ. Баруун талаасаа шилжиж гарсан бит нь зүүн талынхаа битэд орно. Мөн шилжилтийн төлвийн битэд орно. Зүүн -11-
  • 12. Ассемблер хэлний команд, директив, операторууд талаасаа шилжиж гарсан бит нь баруун талынхаа битэд орно. Мөн шилжилтийн төлвийн битэд орно. Бичигдэх хэлбэр: ROL <гишүүн>, 1 ROL <гишүүн>, CL ROL командын хувьд дараах зурагт харуулсан байдлаар хийгдэнэ. Харин ROR командын хувьд сумнуудын чиглэл эсрэг тийш байна. -12- Гишүүн: ерөнхий зориулалтын регистр, санах ойн утга байна. Нөлөөлөх төлвийн битүүд: OF, CF SAHF (Store AH Contents in Flags) – АН регистрийн утгыг төлвийн регистрийн бага 8 битэд хуулж хийнэ. Нөлөөлөх төлвийн битүүд: SF, ZF, AF, PF, CF SAL/ SAR/ SHL/ SHR (Shift Left/ Shift Right) – Заагдсан гишүүний утгыг заасан тоогоор буюу эсвэл CL регистрт байгаа тоогоор зүүн/ баруун тийш дамжуулан шилжүүлнэ. Баруун талаасаа шилжиж гарсан бит нь зүүн талыхаа битэд орно, мөн шилжилтйин төлвийн битэд орно. Зүүн талаасаа шилжиж гарсан бит нь баруун талыхаа битэд орно. Мөн шилжилтийн төлвийн битэд орно. Бичигдэх хэлбэр: SAL <гишүүн>, 1 SAL <гишүүн>, CL SAL ба SHL командуудын хувьд дараах зурагт харуулсан байдлаар хийгдэнэ. Харин SAR командын хувьд дараах байдалтай байна. Ахлах бит 15- ын утгыг 14-р битэд шилжүүлсэн ч гэсэн эргээгээд 15 дахь ахлах битдээ хадгална. Харин SHR командын хувьд SAR командтай төстэй боловч ахлах битэд эргээгээд утгыг нь олгохгүй, харин 0 гэсэн утгыг оруулна. Гишүүн: Ерөнхий зориулалтын регистр, санах ойн утга байна. Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF
  • 13. Ассемблер хэлний команд, директив, операторууд -13- SBB (Subtract with borrow ) – Орон шилжилтийн битийг оролцуулан хасах үйлдэл 2 утгыг CF-тай хамт хасаад үр дүнг нь эхний операндад хадгална. SBB BX, CX гэсэн команд нь ВХ-СХ-Carry flag=BX үйлдлийг хийнэ. Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF SCAS/ SCASB/ SCASW (Scan Byte or Word String) – AL регистрийн эсвэл АХ регистрийн утгыг ES:DI регистрийн хосоор хаяглагдсан санах ойн үүрэн дэх 1 байт эсвэл 1word урттай утгуудтай харьцуулна. DF-ээс хамааран DI регистр нэмэгдэн, эсвэл хорогдож харьцуулна. Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF STC (Set Carry Flag) – Орон шилжилтийн CF төлвийн битийг 1 болгоно. Нөлөөлөх төлвийн битүүд: CF=1 STD (Set Direction Flag) - Чиглэлийн DF төлвийн битийг 1 болгоно. Нөлөөлөх төлвийн битүүд: DF=1 STI (Set Interrupt Flag) – Тасалдлын IF төлвийн битийг 1 болгоно. Нөлөөлөх төлвийн битүүд: IF=1 STOS/ STOSB/ STOSW (Store Byte or Word String) – AL регистрийн эсвэл АХ регистрийн утгыг санах ойд хадгална. Санах ойн хаяг нь ES:DI хос регистрээр хаяглагдана. DF битээс хамаарч DI нь нэмэгдэх буюу хорогдоно. Байттай ажиллаж байвал 1-ээр, word-той ажиллаж байвал 2-оор өөрчлөгдөнө. Нөлөөлөх төлвийн битүүд: байхгүй SUB (Subtract Binary Numbers) – Хасах үйлдэл 2 гишүүний утгыг хасаад үр дүнг нь эхний операндад хадгална. SUB AX, BX гэсэн команд нь АХ-ВХ=АХ үйлдлийг хийнэ. Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF TEST (Test bits) – Шалгах үйлдэл Энэ хэдийгээр AND үйлдэлтэй ижил боловч битүүдийг өөрчлөхгүй, зөвхөн флаг битүүдийш өөрчилдаг. Нөлөөлөх төлвийн битүүд: OF, SF, ZF, AF, PF, CF WAIT (Put Processor on Wait State) – Гадаад төхөөрөмжаас тасалдал орж иртэл хүлээлтийн горимд процессор орно. Өөрөөр хэлбэл, гадаад контроллёр ажлаа дуусган, хариу өгтөл хүлээнэ. Нөлөөлөх төлвийн битүүд: байхгүй XCHG (Exchange) – 2 гишүүний утгыг хооронд нь солино. Бичигдэх хэлбэр: XCHG <шигүүн1>,<гишүүн2> Гишүүн1 Гишүүн2 Ерөнхий зориулалтын регистр Ерөнхий зориулалтын регистр Санах ойн утга Санах ойн утга Ерөнхий зориулалтын регистр Нөлөөлөх төлвийн битүүд: байхгүй
  • 14. Ассемблер хэлний команд, директив, операторууд -14- XLAT (Translate) – XLAT команд нь матриц хэлыэрийн мэдээллийг хөрвүүлэхэд ашиглагдана. Жишээ нь: ASCII болон EBCDIC форматуудыг хооронд нь хөрвүүлэхэд, том үсгийг жижиш үрүү гэх мэт байж болно. XLAT нь AL регистрийн утгыг шилжлэг хаяг болгон ашиглаж, ВХ регистрийн утга дээр нэмнэ. DS:BX+AL регистрүүдийн группээр матрицан мэдээллийнхээ эхлэх хаягийг авна. Нөлөөлөх төлвийн битүүд: байхгүй XOR (Exclusive OR) - Зөвхөн БУЮУ үйлдэл Эхний гишүүнийг 2 дахь гишүүнтэй ЗӨВХӨН БУЮУ үйлдэл хийн, үр дүнг 1 дэх гишүүнд хадгална. Харгалзах бит 1 0 0 1 1 Харгалзах бит 2 0 1 0 1 Үр дүн 0 1 1 0 Нөлөөлөх төлвийн бит: OF, SF=ZF=0, AF, PF=0, CF IBM PC-ийн ассемблер хэлний директивүүд ASSUME Микропроцессор нь SS регистрийг стек ойг хаяглахад, DS регистрийг өгөгдлийн санах ойг хаяглахад, CS регистрийг код сегмент буюу командын санах ойг хаяглахад хэрэглэнэ. Програмист нь ассемблерт сегмент бүрийн үүргийг зааж өгөхдөө хийсвэр үйлдэл буюу assume директивийг ашигладаг. ASSUME сегментийн нэр: нэр [… , …] Жишээ нь: ASUUMESS:stackname, DS:datasegname, CS:codesegname, ES:nothing гэж бичих нь ES-ийг бичээгүйтэй ижил ба уг регистрийг ашиглаагүй гэсэн үг. DB (Define byte) Нэг байт өгөгдлийг тодорхойлно. Жишээ нь: X DB5 ; X нэртэй 5 гэсэн анхны утгатай хувьсагчийг зарлана. Y DB? ; Y нэртэй анхны утга нь тодорхой бус хувьсагчийг зарлана. DW (Define word) 1 үг буюу 2 байт утгыг тодорхойлно. DD (Define Doubleword) 4 байт утгыг тодорхойлно. DQ (Define quadword) 8 байт утгыг тодорхойлно. DT (Define tenbytes) 10 байт утгыг тодорхойлно. END END үйлдэл нь ажиллаж байгаа програмыг дуусгана. END [Процедурын нэр] ; операнд нь хоосон байж болно.
  • 15. Ассемблер хэлний команд, директив, операторууд -15- ENDS [Сегментийн нэр] ; сегментийг дуусгана. ENDP [Процедурын нэр] ; процедурыг дуусгана. EXTRN Энэ директивээр заагдсан хувьсагч эсвэл хаяг нь өөр ассемблер програмд зарлагдсан бөгөөд энэ програмд хэрэглэгдэнэ гэсэн үг. Бичигдэх хэлбэр: EXTRN нэр: төрөл […, …] Нэгээс олон нэрийг мөрийн төгсгөл хүртэл тодорхойлж болно. Эсвэл дахин шинэ мөрөнд зарлаж болно. Төрөл нь ABS, BYTE, QWORD, FAR, NEAR, WORD байж болно. Нэр нь хувьсагчийн эсвэл процедурын нэр байх ба EQU директивээр тодорхойлогдож болно. GROUP Нэг програмд ижил төрлийн (код, өгөгдлийн, стек) сегментүүд хэд хэд байж болно. Ийм үед тэдгээрийг нэр мөрний доор цуглуулан 64К болгох зорилгоор энэ директивийг хэрэглэнэ. Бичигдэх хэлбэр: Нэр GROUP сегментийн нэр […, …] Жишээ нь: GROUP GROUP SEC1, SEC2 SEC1 SEGMENT PARA’CODE’ ASSUME CS: GROUPX ………. SEC1 ENDS SEC2 SEGMENT PARA’CODE’ ASSUME CS: GROUPX ……… SEC2 ENDS INCLUDE Өөр бусад програмын хэрэглэж байгаа ассемблер код, эсвэл макро командуудын хэсгийг өөрийнхөө програмд ашиглаж болно. Жишээ нь: С дискэн дээр байгаа LABORATOR.LIB нэртэй файлд хандахдаа дараах байдлаар уг директивийг ашиглана. INCLUDE C:LABORATOR.LIB Ингэхэд уг файлыг С дискэн дээр хайж олоод, ашиглана. Хэрэв байхгүй бол алдаа мэдээлж, INCLUDE директивийг үгүйсгэнэ. LABEL Энэ директив нь тодорхойлогдсон хувьсагчийн нэрийг ашиглан дахин хувьсагчийг тодорхойлохыг зөвшөөрнө. Бичигдэх хэлбэр: Хувьсагчийн нэр LABEL төрөл Төрөл нь BYTE, WORD, DWORD байна. Жишээ нь: VARBYTE LABEL BYTE ; 1 байт өгөгдлийн талбар DATAW DW 2532H VARWORD LABEL WORD ; 2 байт өгөгдлийн талбар DATAB DB 25H DB 32H ….. MOV AL, VARBYTE ; Эхний байт өгөгдлийг регистрт хуулна MOV BX, VARWORD ; 2 байт өгөгдлийг регистрт хуулна.
  • 16. Ассемблер хэлний команд, директив, операторууд -16- Энэ командуудын үр дүнд AL регистрт DATAW өгөгдлийн эхний байтыг авах ба ВХ регистрт DATAB хаягаас эхлэх 2 байт өгөгдлийг ачаална. NAME Модульд буюу програмд нэр олгоно. Бичигдэх хэлбэр: NAME нэр Ассемблер нь модулийн нэрийг дараах байдлаар хайна. - Хэрэв NAME директив оршиж байвал үүний гишүүн нь модулийн нэр байна. - Хэрэв NAME директив оршихгүй байвал ассемблер нь TITLE директивийн эхний 6 тэмдэгтийг модулийн нэр болгоно. - Хэрэв NAME, TITLE директивүүд оршиохгүй байвал ассемблер нь эх файлын нэрийг нь модулийн нэр болгоно. ORG Өгөгдлийн буюу код сегментийн эхлэх байрлалыг зааж өгөхдөө үүнийг хэрэглэнэ. Бичигдэх хэлбэр: ORG хаяг Жишээ нь: . code ORG 100H гэхэд зод сегмент 100Н хаягнаас эхлэн байрлана гэсэн үг. PAGE Програмын эхэнд 1 хуудсанд байх мөрийн тоо, нэр мөрөнд байх тэмдэгтийн тоог зааж өгнө. 1 хуудсанд 10-255 мөр, 1 мөрт 60-132 тэмдэгт байж болно. Үүнийг тодорхойлж өгөөгүй бол PAGE 66,80 гэж автоматаар авна. PAGE 66, 80 ; 1 хуудсанд 60 мөр, 1 мөрөнд 132 тэмдэгт байлгах үйлдэл PROC Код сегмент нь програмын биелэгдэх кодоос гадна нэг буюу хэд хэдэн процедурыг агуулна. Зөвхөн 1 процедуртай сегментийн жишээ: Сегментийн Нэр SEGMENT PARA Процедурын Нэр PROC FAR …. …. RET Процедур Нэр ENDP Сегментийн Нэр ENDS Far гэсэн операнд нь процедурыг програмын эхлэл хэсэг гэдгийг DOS прогам ачаалагчид зааж өгнө. Endp нь заасан процедуртай ижил нэртэй байх ба процедурын төгсгөлийг заана. PUBLIC Заагдсан нэртэй хувьсагч процедур нь бусад програмуудад ашиглагдана гэсэн үг. Бичигдэх хэлбэр: PUBLIC нэр […, …] Нэгээс олон нэрийг мөрийн төгсгөл хүртэл тодорхойлж болно. Эсвэл дахин шинэ мөрөнд зарлаж болно. Нэрний оронд програмын нэр, хувьсагчийн нэр, тоо байж болно. SEGMENT Бүх ассемблер програмууд нь хамгийн багадаа 1 сегмент агуулна. Энэ нь код сегмент ба сегментийг биелэгдэх кодууд ашиглана. Зарим програмууд код сегмент дээр нэмээд, стек сегментийг стек ойтой ажиллахдаа, өгөгдөл тодорхойлохдоо өгөгдлийн сегментийг ашигладаг. Формат нь:
  • 17. Ассемблер хэлний команд, директив, операторууд -17- Нэр SEGMENT [сонголт] ; сегментийн эхлэл … … Нэр ENDS ; сегментийн төгсгөл Сонголт нь 3 янз байна. - alignment type Сегментийн эхлэх завсрыг заана. Сегментийн эхлэх хаяг 16-д хуваагдах тоо байх ба үүнийг Paragraph boundary гэнэ. Эндээс эхлэнэ гэж үзвэл PARA гэж тавина. Segment гэж тодорхойлоогүй бол para гэж ойлгоно. - combine type Өөр сегменттэй холбогдох (link) үед STACK, COMMON, PUBLIC, AT, MEMORY гэх мэт төрлүүдийн аль нэгийг зааж өгнө. Жишээ нь: Name SEGMENT PARA STACK гэж стек сегментийг тодорхойлж өгч болно. Өөр програмуудтай холбогдоогүй програмд үүнийг тодорхойлохгүй. - class type Класс төрлийг apostrophe (‘ ‘) дотор бичих ба хамтрах (link) сегментүүдтэй групп болгоход хэрэглэнэ. Жишээ нь: Нэр SEGMENT PARA STACK ‘Stack’ RECORD Энэ директив нь битүүдийг тодорхойлох боломжийг олгоно. Бичигдэх хэлбэр: Бичлэгийн-хэмжээ RECORD талбарын-нэр: өргөн[=илэрхийлэл][,…] Жишээ нь: Дараах байдлаар бичлэгийг зарлаж болно. XYZ RECORD XX:6, YY:7, ZZ:3 XX нь XYZ-ийн эхний 6 битийг, YY нь дараагийн 7 битийг, ZZ нь сүүлийн 3 битийг тодорхойлно. Нийт 16 бит буюу word болно. Мөн дараах байдлаар утгыг нь олгож болно. XYZ RECORD XX:6=010101B, YY:7=1000111B, ZZ:3=101B STRUC Энэ директив нь бүтэц дотор талбаруудыг зааж өгнө. Бичигдэх хэлбэр нь: Бүтцийн-нэр STRUC … [талбарууд] … Бүтцийн-нэр ENDS Жишээ нь: TITLE STRUCTURE CODESG SEGMENT PARA ‘Code’ ASSUME CS:CODE, DS:DATA, SS:STACK ORG 100H BEGIN: JMP SHORT MAIN ; - - - - - - - - - - - - - - - - - - - - - - PARLIST STRUC ; Параметр лист MAXLEN DB 25 ACTLEN DB ? NAMELEN DB 25 DUP (‘ ‘) PARLIST ENDS PARAMS PARLIST <> ; бүтэц төрлийн өгөгдлийг зарлах
  • 18. Ассемблер хэлний команд, директив, операторууд -18- PROMPT DB ‘NAME ?’, ‘$’; текст ; - - - - - - - - - - - - - - - - - - - - - MAIN PROC NEAR MOV AH, 09 ; Дэлгэцэнд хэвлэх функц LEA DX, PROMPT INT 21H MOV AH, 0AH ; Өгөгдөл хүлээж авах функц LEA DX, PARAMS INT 21H MOV AL, PARAMS.ACTLEN ; Оролтын урт …. RET MAIN ENDP CODESG ENDS END BEGIN SUBTTL Дэд програмд нэр өгнө. TITLE Програмд гарчиг өгөх ба үүнийг хуудас бүрийн эхэнд хэвлэнэ. Програмын тайлбартайгаа нийлээд 60 тэмдэгтийн урттай байна. Жишээ нь: TITLE ASMSORT-assembler program to sort customer names гэх мэт байж болно. IBM PC-ийн ассемблер хэлний операторууд LENGTH Энэ оператор нь DUP операндаар тодорхойлогдсон, оролтын утгуудын тоог буцаадаг. Жишээ нь: DATAX DW 10 DU (/) ….. MOV DX, LENGTH DATAX Хэрэв DUP гэсэн опеоанд байхгүй бол оператор нь 01 гэсэнутга буцаана.TYPE опеоаторын жишээг хар. OFFSET Энэ оператор нь өгөгдсөн хувьсагч буюу өгөгдлийн талбарын эхлэлийн шилжлэг хаягийг буцаана. Бичигдэх хэлбэр: OFFSET хувьсагч Жишээ нь: MOV DX, OFFSET DATAX Энэ үйлдлийн үр дүнд DATAX өгөгдлийн талбарын эхлэх шилжлэг хаягийг DX регистрт олгоно. Үүнтэй ижил үйлдэл бол LEA команд юм. LEA DX, DATAX PTR Энэ оператор нь BYTE, WORD, DWORD гэсэн төрлүүдийг ашиглан өгөгдлийн төрлийг өөрчилж ажиллана. Бичигдэх хэлбэр нь: Өгөгдлийн-төрөл PRT хувьсагч/тогтмол-утга Жишээ нь: TALBARB DB 22H
  • 19. Ассемблер хэлний команд, директив, операторууд -19- DB 35H TALBARW DW 2672H ; 7226 …. MOV AH, BYTE PTR TALBARW ; 72 гэсэн утгыг AH-д олгоно ADD BL, BYTE PTR TALBARW+1 ; 26 гэсэн утгыг BL-д олгоно MOV BYTE PTR TALBARW, 08; Эхний байтад 08-г ачаална MOV AX, WORD PTR TALBARB ;2235 гэсэн утгыг AX-д ачаална CALL FAR PTR[BX] ; Холын процедурыг дуудна SEG Энэ оператор нь өгөгдсөн хувьсагч буюу өгөгдлийн талбарын сегмент хаягийг буцаана. Бичигдэх хэлбэр нь: SEG хувьсагч Жишээ нь: MOV DX, SEG DATAX ; Өгөгдлийн сегментийн сегмент хаяг MOV DX, SEG NEXT ; Код сегментийн сегмент хаяг SHORT Энэ оператор нь хэрэв JMP командын үсрэх хаяг нь -127 ба +128-ийн хооронд байвал FAR атрибутыг NEAR атрибут болгон өөрчилнө. Бичигдэх хэлбэр нь: JMP SHORT ХАЯГ Өөрөөр хэлбэл, 2 байт хаягийг 1 байт болгоно. SIZE Энэ оператор нь өгөгдлийн уртыг байтаар тодорхойлно. TYPE операторын жишээг хар. TYPE Энэ оператор нь хувьсагчийн төрлийн байтуудын тоог буцаана. DB 1 DW 2 DD 4 DQ 8 DT 10 STRUC ; struc-аар тодорхойлогдсон байтуудын тоо NEAR хаяг FFFFH FAR хаяг FFFEH Бичигдэх хэлбэр: TYPE хувьсагч Жишээ нь: UTGA DB ? TALBAR DB 20 DUP (?) ... ; Буцаах утгууд MOV AX, TYPE UTGA ; AX=0001 (байт төрөл) MOV AX, TYPE TALBAR ; AX=0002 (word төрөл) MOV CX, LENGTHTALBAR ; CX=000A (10 байт) MOV DX, SIZE TALBAR ; DX=0014 (20 байт)
  • 20. Ассемблер хэлний команд, директив, операторууд IBM PC-ийн ASCII кодууд 16-таар Дэлгэцэнд хэвлэгдэх тэмдэгт болон принтерт гаргах үед хэрэглэгдэх байдал 10-таар (H) 0 0 Байхгүй 1 1 Хуудасны эхлэл 2 2 Текстийн эхлэл 3 3 ♥ Текстийн төгсгөл 4 4 ♦ Дамжууллын төгсгөл 5 5 Хүсэлт 6 6 ♠ Зөвшөөрөл 7 7 • Хонх дуугаргана 8 8 Bach space 9 9 ° Хөндлөн таб 10 A Босоо таб -20- 11 B Хөндлөн таб 12 C Хуудасны төгсгөл 13 D Мөрийн эхлэл 14 E Цаасаа гаргах 15 F Цаасаа оруулах 16 10 17 11 Төхөөрөмжийн удирдлага 1 18 12 Төхөөрөмжийн удирдлага 2 19 13 !! Төхөөрөмжийн удирдлага 3 20 14 ¶ Төхөөрөмжийн удирдлага 4 21 15 § 22 16 ⎯ 23 17 24 18 ↑ Хүчингүй болгох 25 19 ↓ 26 1A → 27 1B ← Escape 28 1C Файлын зааглагч 29 1D Групп зааглагч 30 1E Бичлэгийн зааглагч 31 1F 32 20 Стандарт хоосон зай 33 21 ! 34 22 “ 35 23 # 36 24 $ 37 25 % 38 26 & 39 27 ‘ 40 28 ( 41 29 ) 42 2A *
  • 21. Ассемблер хэлний команд, директив, операторууд -21- 43 2B + 44 2C ‘ 45 2D - 46 2E . 47 2F / 48 30 0 49 31 1 50 32 2 51 33 3 52 34 4 53 35 5 54 36 6 55 37 7 56 38 8 57 39 9 58 3A : 59 3B ; 60 3C < 61 3D = 62 3E > 63 3F ? 64 40 @ 65 41 A 66 42 B 67 43 C 68 44 D 69 45 E 70 46 F 71 47 G 72 48 H 73 49 I 74 4A J 75 4B K 76 4C L 77 4D M 78 4E N 79 4F O 80 50 P 81 51 Q 82 52 R 83 53 S 84 54 T 85 55 U 86 56 V 87 57 W 88 58 X 89 59 Y 90 5A Z 91 5B [ 92 5C
  • 22. Ассемблер хэлний команд, директив, операторууд -22- 93 5D ] 94 5E ^ 95 5F _ 96 60 ‘ 97 61 a 98 62 b 99 63 c 100 64 d 101 65 E 102 66 f 103 67 g 104 68 h 105 69 i 106 6A j 107 6B k 108 6C l 109 6D m 110 6E n 111 6F o 112 70 p 113 71 q 114 72 r 115 73 s 116 74 t 117 75 u 118 76 v 119 77 w 120 78 x 121 79 y 122 7A z 123 7B { 124 7C | 125 7D } 126 7E ~ 127 7F DEL
  • 23. Ассемблер хэлний команд, директив, операторууд Editor програм Computer Editor дээр Prog.asm файлаа бичнэ. ASM өргөтгөлтэй эх (source) програмаа үүсгэнэ PROG.ASM Assembler програм Assembler буюу боловсруулалт хийнэ. Эх програмаа боловсруулан OBJ өргөтгөлтэй объект програмаа үүсгэнэ. Объект програмыг (link) үйлдлийн системтэй холбон биелэгдэх боломжтой ЕХЕ програм үүсгэнэ. PROG.LST, PROC.CRF файлууд PROG.OBJ PROG.EXE DOS буюу үйлдлийн систем Link буюу холболт хийнэ. Биелэлтэнд бэлэн Ассемблер програмын боловсруулалтын үе шатууд Ассемблер програм зохиох үе шат Програмыг дурын текст редактор дээр бичиж болдог. Ассемблер хэлэнд өгөгдсөн програмыг ЕХЕ болон СОМ файл болгоход 2 үе шатыг дамжина. 1-р шат: Өгөгдсөн програмыг ассемблер хэлний хөрвүүлэгчээр машины (OBJ) object кодонд хөрвүүлдэг. Энэ хөрвөсөн дүрсийг object модуль гэнэ. Энэ нь биелэх програм биш зөвхөн биелэх програм руу хөрвүүлэхэд хялбар болгосон 16-тын хэлбэртэй машины код юм. TASM EXAMPLE. ASM гэхэд EXAMPLE.OBJ үүснэ. -23-
  • 24. Ассемблер хэлний команд, директив, операторууд -24- 2-р шат: Object файлруу хөрвүүлэх явцад ямар нэгэн алдаа илрээгүй бол object файлыг Link.exe програмын тусламжтайгаар ЕХЕ файлруу хөрвүүлэлтийг хийнэ. TLINK EXAMPLE. OBJ гэхэд EXAMPLE.EXE файл үүснэ. ЕХЕ файлыг хэрэглэх хүсэлтэй бол эндээс шууд ашиглах ба СОМ файл мэтээр ажиллуулах гэвэл No stack segment гэсэн мэдээлэл өгнө. Харин TLINK /T CALC.OBJ гэхэд СОМ програм нь объект програмаасаа үүснэ. Мөн өөрөөр EXE2BIN CALC, CALC.COM гэж ЕХЕ файлаас СОМ файлд хөрвүүлж болно. СОМ файлд нэр өгч болно. СОМ файл үүссэний дараа OBJ, EXE файлуудыг устгаж болно. Програмыг дараах хялбар бичлэгээр бичиж болно. .MODEL SMALL .DATA .STACK 100H .CODE BEGIN PROC FAR ; Холын процедурын эхлэл MOV АХ, @ Data ;Өгөгдлийн сегментийн эхлэлийг зааж өгнө. MOV DS, AX …….. …….. RET ; Процедураас буцна. BEGIN ENDP ; Процедурын төгсгөл END BEGIN ; Програмын төгсгөл