Assembler1. Ñèñòåì ïðîãðàìì÷ëàë áà àññåìáëåð õýë Ëåêö -24 öàã Ëàáîðàòîðè – 32 öàã Íèéò êðåäèò – 2,5 7 õîíîãò ëåêö – 4 öàã (6 äîëîî õîíîã îðíî) Ëàá – 2 öàã (16 äîëîî õîíîã îðíî) ßâöûí øàëãàëò: 7 äàõ äîëîî õîíîã, 14 äýõ äîëîî õîíîã 6. Íàéìòûí àðèôìåòèê 16 15 14 13 12 11 10 7 7 15 14 13 12 11 10 7 6 6 14 13 12 11 10 7 6 5 5 13 12 11 10 7 6 5 4 4 12 11 10 7 6 5 4 3 3 11 10 7 6 5 4 3 2 2 10 7 6 5 4 3 2 1 1 7 6 5 4 3 2 1 0 0 7 6 5 4 3 2 1 0 + 7. 2-ò, 10-ò, 16-òûí õàìààðàë F 15 1111 10 16 10000 E 14 1110 D 13 1101 C 12 1100 B 11 1011 A 10 1010 9 9 1001 8 8 1000 7 7 111 6 6 110 5 5 101 4 4 100 3 3 11 2 2 10 1 1 1 0 0 0 16-ò 10-ò 2-ò 9. Ìýäýýëëèéã ä¿ðñëýõ 1.Õî¸ðòûí ìýäýýëýë: Òîîí ìýäýýëýë: áàéò Òýìäýãã¿é òîî ¿ã Òýìäýãòýé òîî 2 ¿ã Ѻðºã òîîã 2-òûí ã¿éöýýëòýýð ä¿ðñëýíý gon(x)=2 k -mod(x) gon(-1)=2 8 -1=256-1=255=FFh gon(-2)=gon(-1)-1=255-1=254=FEh gon(-128)=2 8 -128=256-128=128=80h Òîîí áóñ ìýäýýëýë öýã, ä¿ðñ äóó àâèà áîëîí áóñàä 2. Òýìäýãò ìýäýýëýë: 1 òýìäýãò 1 áàéò ýçýëíý. (ASCII êîä) 1 òýìäýãò 2 áàéò ýçýëíý. (UNICOD) Äàðààëñàí òýìäýãò äàðààëñàí áàéò (¿ã) –ä áàéðëàíà. 3. Êîìàíä ïðîöåñîð áèåë¿¿ëýõ, òóãàé õýëáýðòýé áè÷èãäñýí ìýäýýëýë þì. ¯éëäëèéí êîä, ¿éëäýëä îðîõ îïåðàíäûí õàÿã çýðãýýñ òîãòîíî.1-6 áàéò ýçýëíý. òîî òýìäýãò êîìàíä Æèøýý ðåãèñòðèéí õóâüä 10101010 11000011 00001111 11110000 00000000 11111111 00010011 10011010 R E T U P M O C EA 0001 0002 A5 0000 1000 0004 A000 r2 r1 11 w kod Kod - ¿éëäëèéí êîä, w – 0 áîë áàéò ðåãèñòð 1 áîë ¿ã ðåãèñòð r – ðåãèñòðèéã çààõ 3 áèò óòãà, Æèøýý íü r – 000 áîë AX r – 001 áîë CX r – 100 áîë SP r – 101 áîë BP MOV AX,BX – 1000 1011 1100 0011 – 8B C3 14. Ǻâ áè÷èãäñýí ïðîãðàìûã õºðâ¿¿ëæ, øàëãàí ç¿ãøð¿¿ëæ àæëûí áýëýí ïðîãðàì ¿¿ñãýäýã. Ïðîãðàìûã ÿàæ õºðâ¿¿ëýõèéã äàðààõ ñõåìýýð õàðóóëúÿ. Ïðîãðàìûí àíõíû òåêñòèéã îðóóëàõ PROG1.ASM | Îáúåêò ìîäóëü ¿¿ñãýõ TASM.EXE PROG1.OBJ | Ïðîãðàìóóäûã õîëáîæ åõå ôàéë ¿¿ñãýõ TLINK.EXE PROG1.EXE | Ïðîãðàìûã øàëãàí ç¿ãøð¿¿ëýõ DEBUG.EXE Æèøýý: Ïðîãðàìûí àíõíû òåêñòèéã äóðûí òåêñò çàñâàðëàõ ïðîãðàìààð áýëòãýæ áîëîõ áà íýðèéí ºðãºòãºëèéã çààâàë .ASM ãýæ õàäãàëíà. C>TASM PROG1.ASM; PROG1.OBJ ôàéë ¿¿ñíý. Àëäàà áàéâàë àëäààíû ìýäýý ãàðíà. C>TLINK PROG1.OBJ; PROG1.EXE ôàéë ¿¿ñíý. C>DEBUG PROG1.EXE 19. Àðèôìåòèê ¿éëäëèéí êîìàíäóóä 1. Íýìýõ ¿éëäëèéí êîìàíä - ADD Åðºíõèé õýëáýð: ADD op1,op2 ôîðìàò íü: [r/r r/m r/c m/r m/c] Õî¸ð òîîã íýìæ, ¿ð ä¿íã 1-ð îïåðàíäàä áàéðëóóëíà. Op1=<op1>+<op2> Æèøýý: ADD AH,BH ADD AX,9 ADD x,DX ADD x,7 2. Õàñàõ ¿éëäëèéí êîìàíä Åðºíõèé õýëáýð: SUB op1,op2 ôîðìàò íü: [r/r r/m r/c m/r m/c] op1=<op1>-<op2> Æèøýý: SUB AX,BX SUB CX,a SUB DX,3 SUB a,DH 3. Ðåãèñòðèéí óòãûã íýãýýð íýìýãä¿¿ëýõ – INC, õîðîãäóóëàõ – DEC, îïåðàíäûí òýìäýãèéã ººð÷ëºõ – NEG êîìàíä áàéäàã. Åðºíõèé õýëáýð: INC op ôîðìàò: [r] op=<op>+1 Æèøýý: INC BX DEC op [r] op=<op>-1 DEC AX NEG op [r,m] op=-<op> NEG BL 4. Carry ôëàãèéã òîîöîæ íýìýõ – ADC, carry ôëàãèéã òîîöîæ õàñàõ – SBC êîìàíä áàéäàã. Åðºíõèé õýëáýð: ADC op1,op2 ôîðìàò: ADD-í àäèë op1=<op1>+<op2>+CF SBC op1,op2 SUB-í àäèë op1=<op1>-<op2>-CF Æèøýý: 13A0F120h + 4000200Ah íèéëáýðèéã îëîõäîî ýõëýýä áàãà ¿ãèéã ADD êîìàíäààð, äàðàà íü àõìàä ¿ãèéã ADC êîìàíäààð íýìíý. Ýíý ìàÿãààð ADC êîìàíäûã àøèãëàí õýäýí ÷ áàéò óòãûã íýìæ áîëíî. ßã ¿¿íèé àäèë carry-òàé õàñàõ ¿éëäëèéã ã¿éöýòãýíý. 20. 5. ¯ðæèõ ¿éëäýë: òýìäýãã¿é á¿õýë òîîã ¿ðæèõ-MUL, òýìäýãòýé á¿õýë òîîã ¿ðæèõ-IMUL êîìàíä Åðºíõèé õýëáýð: MUL op ôîðìàò: [r, m, c] 2 áàéòûã ¿ðæèõýä AX=AL x <op> IMUL op 2 ¿ãèéã ¿ðæèõýä DX:AX=AX x <op> Æèøýý: n DB 10 . . . MOV AL,2 MUL n ;AX=2 x 10=0014h AH=00h AL=14h MOV AL,28 MUL n ;AX=28 x 10=0104h AH=01h AL=04h MOV AX,8 MOV BX,-1 IMUL BX ;DX:AX=-1 x 8=0FFFFFFF8h AX=0FFF8h DX=0FFFFh 6. Õóâààõ ¿éëäýë: òýìäýãã¿é á¿õýë õóâààëò-DIV, òýìäýãòýé á¿õýë õóâààëò-IDIV êîìàíä Åðºíõèé õýëáýð: DIV op ôîðìàò: [r, m, c] ¯ãèéã áàéòàä õóâààõàä: AH,AL=AX:<op> IDIV op AH-ä ¿ëäýãäýë,AL-íîîãäâîð 2 ¿ãèéã ¿ãýä õóâààõàä: DX,AX=(DX:AX):<op> DX-¿ëäýãäýë,AX-íîîãäâîð Æèøýý: n DB 5 . . . MOV AX,17 DIV n ;AX:n=17:5=>íîîãäâîð AL=3,¿ëäýãäýë AH=2 MOV DX,0 MOV AX,17 MOV BX,5 DIV BX ; (DX:AX):BX=17:5 => íîîãäâîðAX=0002h, ¿ëäýãäýë DX=0003h 21. 7. Òîîíû õýìæýýã ººð÷ëºõ êîìàíä Àðèôìåòèê ¿éëäýëä îðæ áàéãàà 2 îïåðàíä(¿ðæèõ, õóâààõ îðîõã¿é) çààâàë íýã òºðëèéí áàéõ ¸ñòîé. Æèøýýëáýë ¿ã äýýð áàéò òîîã íýìæ áîëîõã¿é. Èéìä áàéòûã ¿ã áîëãîæ õóâèðãàõ õýðýãòýé. Áàéòûã ¿ã áîëãîæ õóâèðãàõ – CBW, ¿ãèéã 2 ¿ã áîëãîæ õóâèðãàõ – CWD êîìàíäóóä áàéäàã. Åðºíõèé õýëáýð: CBW îïåðàíäã¿é êîìàíä, õóâèðãàõ áàéò AL-ä, ¿ð ä¿í AX-ä CWD õóâèðãàõ ¿ã AX-ä, ¿ð ä¿í (DX:AX)-ä áàéðëàíà. Æèøýý: MOV AL,32 ; 20h->AL CBW ; 0020h->AX MOV AL,-3 ; 0E0h->AL CBW ; 0FFE0h->AX MOV AX,32 ; 0020h->AX CWD ; 0000h->DX, 0020h->AX MOV AX,-3 ; 0FFE0h->AX CWD ; 0FFFFh->DX, 0FFE0h->AX 22. Óäèðäëàãûí êîìàíä Óäèðäëàãûí êîìàíäûã 2 àíãèëíà: 1. ͺõöºëò áóñ äàìæóóëàëò – JMP Åðºíõèé õýëáýð: JMP <ì¸òêà> ì¸òêà-êîìàíäûã íýðëýñýí íýð JMP êîìàíä óäèðäëàãûã ì¸òêà-ààð òýìäýãëýãäñýí êîìàíäàä øóóä äàìæóóëíà. Æèøýý: JMP M . . . M: MOV AL,0 Óäèðäëàãûí êîìàíäûã óäèðäëàãà äàìæóóëæ áàéãàà çàéíààñ íü õàìààðóóëàí õîë, îéð äàìæóóëàëò ãýæ 2 àíãèëäàã. Îéð (near) äàìæóóëàëò çºâõºí IP ðåãèñòðèéí óòãûã ººð÷èëäºã áîë õîë (far) äàìæóóëàëò CS,IP ðåãèñòð¿¿äèéí óòãûã ººð÷èëíº. 2. ͺõöºëò äàìæóóëàëò ßìàð íýãýí íºõöºëººñ õàìààðóóëàí óäèðäëàãûã äàìæóóëíà. 2 ¿å øàòòàé: 1. õýìæèãäýõ¿¿í¿¿äèéã æèøèæ ¿ð ä¿íãýýñ íü õàìààðóóëàí ôëàãóóäûã ººð÷ëºíº. CMP op1,op2 2. ôëàãûí óòãààñ õàìààðóóëàí óäèðäëàãûã äàìæóóëíà. Jxx <ì¸òêà> _____________________________________________________________________________________________ Óäèðäëàãûí óäèðäëàãûí ¿éë÷ëýõ ôëàãèéí êîìàíä íºõöºë õ¿ðýý óòãà _____________________________________________________________________________________________ JE op1=op2 ÿìàð÷ òîîíû ZF=1 JNE op1<>op2 õóâüä ZF=0 _____________________________________________________________________________________________ JL/JNGE op1<op2 SF<>OF JLE/JNG op1<=op2 òýìäýãòýé SF<>OF ZF=1 JG/JNLE op1>op2 òîîíû õóâüä SF=OF ZF=0 JGE/JNL op1>=op2 SF=OF _____________________________________________________________________________________________ JB/JNAE op1<op2 CF=1 JBE/JNA op1<=op2 òýìäýãã¿é CF=1 ZF=1 JA/JNBE op1>op2 òîîíû õóâüä CF=0 ZF=0 JAE/JNB op1>=op2 CF=0 ______________________________________________________________________________________________ 26. Ëîãèê êîìàíäóóä Ëîãèê êîìàíä: NOT, AND, OR, XOR, TEST Îíöëîã: 1. áèò¿¿ä äýýð õèéíý 2. ôëàãèéí óòãûã ººð÷èëíº. 3. îïåðàíä áàéò, ýñâýë ¿ã áàéíà. Ëîãè¿éëäëèéí ¿ð ä¿í: Êîìàíäóóäûí åðºíõèé õýëáýð: 1. NOT op ôîðìàò: [r, m] 2. AND op1,op2 [r,r r,m r,c m,r m,c] op1=<op1> AND <op2> TEST op1,op2 AND êîìàíäòàé àäèëõàí, ¿ð ä¿íã õàäãàëàõã¿é. op2 – ìàñêà ãýæ íýðëýãäýõ òîãòìîë óòãà áàéíà. <Op2>- 00001111=0Fh 3. OR op1,op2 [r,r r,m r,c m,r m,c] op1=<op1> OR <op2> 4. XOR op1,op2 [r,r r,m r,c m,r m,c] op1=<op1> XOR <op2> Æèøýý: NOT AX NOT x AND AX,BX AND x,00001111b TEST BX,11110000b OR AX,x OR AX,10000000b XOR AX,AX 0 1 1 0 1 1 1 1 0 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0 x XOR y x OR y x AND y NOT x y x 34. 2 . Тэмдэгтийг мөртэй жиших команд: SCASB, SCASW Жиших тэмдэгтийг байт бол AL -д, үг бол AX -д байрлуулах бөгөөд мөрийн хаягыг ES:DI регистрээр заана. Чиглэлийг өмнөхийн адил тогтооно. Префикс ашиглана. Жишээ нь: REPE SCASB – команд мөрд тэнцүү биш эхний тэмдэгт гарч иртэл давтана. Эсвэл CX=0 REPNE SCASB -команд мөрд эхний тэнцүү тэмдэгт гарч иртэл давтана. Эсвэл CX=0 . Жишээ: N урттай S мөрд байгаа эхний ‘*’ –г ‘.’ –ээр солих програмын хэсгийг авч үзье. CLD PUSH DS POP ES LEA DI, S MOV CX,N MOV AL,’*’ REPNE SCASB JNE fin MOV BYTE PTR ES:[DI-1], ‘.’ fin: . . . 3. Мөрийг шилжүүлэх команд – MOVSB, MOVSW DS:SI хаягтай мөрийг ES:DI хаягтай мөрд шилжүүлнэ. Команд нэг удаа биелэхэд нэг л тэмдэгт зөөгдөнө. Иймд CX –д мөрийн уртыг хийж, зөвхөн REP префиксийг хэрэглэнэ. 4. Мөрд тэмдэгтийг хадгалах команд – STOSB, STOSW AL(AX) – д байгаа тэмдэгтийг ES:DI хаягтай мөрд хадгална. Зөвхөн REP префиксийг хэрэглэнэ. Жишээ: MOV AL, ‘ ‘ CLD LEA DI, S MOV CX, N REP STOSB 5. Мөрөөс тэмдэгтийг унших команд – LODSB, LODSW Мөрд байгаа ES:DI хаягтай тэмдэгтийг AL(AX) – д уншина. Давталт хэрэглэхгүй 40. Ìàñðîêîìàíä, ïðîöåäóð õî¸ðûí àäèë òàë: ßëãààòàé òàë: - Ïðîãðàìä íýã õýñýã áîëîí áè÷èãäýíý. - Ãîë íü òýäãýýðèéã áèåë¿¿ëýõýä áàéäàã. - Ïðîãðàìûí äóðûí áàéðíààñ õàíäàæ áîëíî. Åð íü ïðîãðàìûí õýìæýýã áàãà áàéëãàõ - Ïðîãðàìûã áè÷èõ ÿâäëûã õÿëáàð÷ëàíà. ãýâýë ïðîöåäóðûã, áèåëýõ õóãàöààã áàãà áàéëãàõ ãýâýë ìàñðîêîìàíäûã õýðýãëýíý. Ìàñðîêîìàíäàíä ïàðàìåòð àøèãëàäàã. Æèøýý áîëãîí ñàíàõ îéí íýã áàéòûã ÿíç á¿ðèéí óòãààð íýìýãä¿¿ëýõ õÿëáàð ïðîãðàì àâ÷ ¿çüå. SUMMA MACRO const ADD memb, const ENDM data SEGMENT ASSUME DS:data memb DB 0 one EQU 1 data ENDS code SEGMENT ASSUME CS:code MOV AX, data MOV DS, AX SUMMA 2 SUMMA 7 SUMMA one code ENDS END Ìàñðîêîìàíä õýä õýäýí ïàðàìåòðòàé áàéæ áîëíî: EXAMPLE MACRO par1, par2, par3 Èéì ìàñðîä õàíäàõäàà áè÷èãäñýí äàðààëëààð íü á¿õ ïàðàìåòð¿¿äûí óòãûã áè÷èæ ºãíº. Ìàñðîä õàíäàõ ¿åä ïàðàìåòð íü òîãòìîë, ñàíàõ îé, ðåãèñòð òºäèéã¿é õàÿã áàéæ áîëíî. EXAMPLE 5, [BX], memb 41. Ìàñðîêîìàíäûí îïåðàòîð Ìàñðîêîìàíä íü àññåìáëåð õýëíèé äóðûí êîìàíäûã àøèãëàæ áîëîõîîñ ãàäíà ººðèéí ãýñýí îïåðàòîðòàé áàéäàã. ¯¿íèé íýã íü íºõöºëò îïåðàòîð þì. Åðºíõèé õýëáýð: IFxx <èëýðõèéëýë> IFxx <èëýðõèéëýë> . . . . . . ELSE ENDIF . . . ENDIF IFxx îïåðàòîð äàðààõ õýëáýð¿¿äèéí íýã áàéíà: IF <èëýðõèéëýë> - èëýðõèéëëèéí óòãà òýãòýé òýíö¿¿ áèø áîë IFE <èëýðõèéëýë> - èëýðõèéëëèéí óòãà òýãòýé òýíö¿¿ áîë IFDEF <íýð> - íýð EXTRNAL áîë IFNDEF <íýð> - íýð EXTRNAL áèø áîë IFB <ïàðàìåòð> - ïàðàìåòð ïðîáåë áîë IFNB <ïàðàìåòð> - ïàðàìåòð ïðîáåë áèø áîë IFIDN <S1>,<S2> - S1 ìºð S2 ìºðòýé òýíö¿¿ áîë IFDIF <S1>,<S2> - S1 ìºð S2 ìºðòýé òýíö¿¿ áèø áîë Æèøýý: ADDX MACRO x code SEGMENT IFE 1-TYPE x ASSUME CS:code, DS:data ADD AH, x MOV AX, data ELSE MOV DS, AX IFE 2-TYPE x MOV AX, 0 ENDIF ADDX memx ENDIF code ENDS ENDM END data SEGMENT memx DB 0Ah data ENDS 43. Îïåðàòîð EXITM Ìàñðîêîìàíäààñ øóóä ãàðàõ ¿åä ýíý îïåðàòîðûã õýðýãëýíý. Çàðèì ¿åä IF îïåðàòîðò õýðýãëýõýä òîõèðîìæòîé áàéäàã. Îïåðàòîð LOCAL LOCAL îïåðàòîð òóõàéí ìàñðîêîìàíäàíä àøèãëàãäàõ ì¸òêûã òîäîðõîéëäîã.Ýíý íü ìàñðîêîìàíäûã äàõèí àøèãëàõ áîëîìæèéã îëãîäîã. Æèøýý: PAUSE MACRO sec LOCAL start MOV CX, sec start: LOOP start ENDM code SEGMENT ASSUME CS:code PAUSE 5000 PAUSE 10000 code ENDS END ;; - òàéëáàð ìàñðîêîìàíäàíä áè÷èõýä õýðýãëýíý. & - àðäàõ òýìäýãòýý çàëãàæ ºãíº. ! – äóðûí òýìäýãò îðóóëàõ áîëîìæ îëãîíî. % - àðäàõ èëýðõèéëëýý òîîí óòãà áîëãîí õºðâ¿¿ëíý. 45. Стектэй ажиллах жишээ: 1. Регистрийн утгыг хадгалах PUSH DX PUSH CX . . . ; DX, CX –г ашиглах POP CX POP DX 2. Утгыг стекээр дамжуулах PUSH a POP b ; b a 3. стек хоосон ба дүүрсэн эсэхийг шалгах SP=0 ; стек дүүрэн SP=K ; стек хоосон (K элемент ) 4. Стекийг цэвэрлэх ба сэргээх ADD SP,2 x K ; стекээс К үг цэвэрлэх MOV AX,SP . . . ; стекэд бичих MOV SP,AX 5. Стекийн элементийг ашиглах PUSH, POP команд зөвхөн стекийн оройтой ажилдаг. Бусад элементийг ашиглах гэвэл эдгээр командаар тохиромжгүй. Иймд BP регистрийг хэрэглэнэ. MOV BP, SP MOV AX, [BP+4] ; AX c SP регистрийг ингэж ашиглаж болохгүй. [BP+4] SS:[BP+4] гэж ойлгоно. BP -н оронд BX –г авбал DS сегментээс авах болно. BP,SP +2 +4 a b c 48. 2 äàõü àðãà íü èë¿¿ òîõèðîìæòîé. Ìîäóëü á¿ðèéã (m1.ASM, m2.ASM, . . . ,mK.ASM) ïðîãðàì áîëãîí áè÷íý. C:gt;TASM m1.ASM, m1.OBJ, m1.LST; Ýíý ìàÿãààð á¿õ ìîäóëèéã õºðâ¿¿ëæ, OBJ ìîäóëü ¿¿ñãýõ áà òýäãýýðèéã íýãòãýæ ìàøèíû íýã ïðîãðàì ¿¿ñãýíý. C:gt;TLINK m1.OBJ+m2.OBJ+ . . . +mK.OBJ, m.EXE m1.OBJ . . . TLINK m.EXE mK.OBJ Íýãýíò áýëýí áîëñîí ïðîãðàìûã äàðààõ êîìàíäààð øóóä áèåë¿¿ëíý. C:gt;m.EXE ýñâýë C:gt;m 52. EXTRN x:WORD ; ñåãìåíòèéí ãàäíà áàéðëàñàí A SEGMENT EXTRN y:WORD ; À ñåãìåíò äîòîð áàéðëàñàí . . . A ENDS B SEGMENT EXTRN z:WORD ;  ñåãìåíò äîòîð áàéðëàñàí . . . B ENDS . . . ASSUME ES:A,DS:B . . . INC x ; DS:x INC x[BP] ; SS:x[BP] INC y ; ES:y INC y[BP] ; ES:y[BP] INC z ; DS:z INC z[BP] ; DS:z[BP] 53. Ñàíàìæ: PUBLIC äèðåêòèâ õóâüñàã÷èéã ñåãìåíòëýõýä ¿¿ðýãã¿é ó÷èð õààíà ÷ áàéðëàæ áîëîõ áà ìîäóëèéí ýõýíä áàéðëàõ íü ÿìàð íýð ýíý ìîäóëèàñ ýêñïîðòëîãäîæ áàéíà âý, ÿìàð íýð åðºíõèé áàéíà âý ãýäýã íü òîäîðõîé õàðàãäàæ áàéäàã. - Ãàäààä íýðèéã çºâ ñåãìåíòëýõ íü àñóóäëûí çºâõºí íýã òàë íü þì. ª.õ ýíý íü êîìàíäûã çºâ õºðâ¿¿ëýëò õèéõýä àøèãëàãäàõ áîëîõîîñ çºâ áèåë¿¿ëýõ íºõöëèéã õàíãàõã¿é. Æèøýý àâ÷ ¿çüå. ; --- m1 --- ; --- m2 --- A SEGMENT PUBLIC x EXTRN x:WORD B SEGMENT y DW 0 x DW ? A ENDS B ENDS . . . . . . ASSUME DS:A Õýðýâ m1 ìîäóëüä x:=y ¿éëäëèéã ã¿éöýòãýõ ãýâýë: MOV AX,y MOV x,AX êîìàíäóóäûí äàðààëàë áè÷èæ áîëîõ óó, º.õ äýýðõè ¿éëäëèéã çºâ õèéõ ¿¿ ãýäýã àñóóäàë ãàðíà. 54. MOV AX,y êîìàíä çºâ áèåëíý. Ó÷èð íü y õóâüñàã÷ m1 ìîäóëüä áàéãàà À ñåãìåíòýíä òîäîðõîéëîãäñîí. Õàðèí MOV x,AX êîìàíä áóðóó áèåëíý. Ó÷èð íü õ õóâüñàã÷ m2 ìîäóëüä áàéãàà  ñåãìåíòýä òîäîðõîéëîãäñîí òóë DS ðåãèñòðýýð ñåãìåíòëýãäýõã¿é. Èéìä SEG ïðåôèêñ àøèãëàí äàðààõ ìàÿãààð m1 ìîäóëüä øèéäýæ ºãíº. ; --- m1 --- . . . MOV AX,y ; AX y PUSH DS ; DS stack MOV BX,SEG x ; BX segment(x) MOV DS,BX ; DS BX MOV x,AX ; x AX POP DS ; reset DS . . . 57. çºâõºí êîä ñåãìåíòð¿¿ õàíääàã áàéõààð óðüä÷èëàí òîîöîîëîãäñîí áàéõ ¸ñòîé. Èéìä DS ðåãèñòðò CS-èéí óòãûã ºãºõ êîìàíäûí äàðààëëûã äàðààõ ìàÿãààð áè÷âýë çºâ þì. PUSH CS POP DS Áèä ºìíº ýíý ¿éëäëèéã êîä ñåãìåíò CODE íýðòýé áàéõ ¿åä äàðààõ ìàÿãààð áè÷èæ áàéñàí. MOV AX,CODE MOV DS,AX COM ôàéëûí õóâüä èíãýæ áè÷âýë áóðóó áîëíî. ̺í COM ôàéëûí õóâüä CS,DS,ES,SS ðåãèñòð¿¿äèéí óòãà öºìººðºº ïðîãðàì óíøèãäñàí òýð ñåãìåíòèéí óòãààð òîãòîîãääîã. Ïðîãðàì ñåãìåíòèéí ýõýíä áàéðëàäàã áîë ñòåê ñåãìåíòèéí òºãñãºëä áàéðëàíà. EXE ôàéëûí õóâüä CS,IP áà SS,SP ðåãèñòð¿¿äèéí óòãà ôàéëûí òîëãîéä ºãºãäºíº. Õàðèí DS,ES ðåãèñòð¿¿äèéí óòãà ïðîãðàì à÷ààëàãäàõ ¿åä òîãòîîãääîã. COM ôàéëûí êîìàíäûí ýõíèé øèëæëýã 100Í áàéäàã áîë EXE ôàéëûí õóâüä ÿìàð÷ áàéæ áîëíî. ª.õ END start ìàÿãààð øèëæëýãèéã òîäîðõîéëíî. 58. EXE ôàéëûã COM ôàéëä õºðâ¿¿ëýõ ÄÎÑ ñèñòåìä EXE2BIN ïðîãðàì áàéäàã. Ýíý ïðîãðàìààð EXE ôàéëûã COM ôàéëä õºðâ¿¿ëäýã. Ãýâ÷ á¿õ EXE ôàéëûã õºðâ¿¿ëæ ÷àäàõã¿é. Õàðèí DEBUG ïðîãðàìûã àøèãëàí ÿìàð÷ EXE ôàéëûûã õºðâ¿¿ëæ áîëäîã. Ýíý àðãûã àâ÷ ¿çüå. SAMPLE.ASM ãýæ íýðëýñýí õÿëáàð ïðîãðàì àâúÿ. PAGE ,132 TITLE EXE COM CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100H LEA DX,MSG MOV AH,9H INT 21H INT 20H MSG DB ‘TEST PROGRAM’,10,13,’$’ CODE ENDS END 59. Ýíý ïðîãðàì COM ôàéëä õºðâ¿¿ëýãäýõýýð çîõèîãäñîí áàéíà. COM ôàéëä õºðâ¿¿ëýõèéí òóëä äàðààõ ¿éëäë¿¿äèéã ã¿éöýòãýíý. - TASM SAMPLE.ASM; - TLINK SAMPLE.OBJ; - RENAME SAMPLE.EXE SAMPLE.COM - DEBUG SAMPLE.COM - Ïðîãðàìûã 100 øèëæëýãýýñ ýõýëñýí áàéõààð 纺íº. M 400 1000 100 400-ààñ ýõýëñýí 1000 óðòòàé ïðîãðàìûã 100-ä 纺õ - Ïðîãðàìûí óðòûã òîäîðõîéëîõ U 100 D 100 - Ïðîãðàìûí óðòûã CX ðåãèñòðò õèéõ R CX CX 0380 ; õóó÷èí óòãà íü :120 ; ïðîãðàìûí óðòûã 120 ãýæ àâ÷ áàéíà - Ôàéëûã äèñêýíä áè÷èõ W ; 120 áàéòûã äèñêýíä áè÷íý - DEBUG-ààñ ãàðàõ Q Èíãýæ ¿¿ññýí SAMPLE.COM ïðîãðàìûã øóóä àæèëëóóëæ áîëíî. C:>SAMPLE TEST PROGRAM ¿ãèéã äýëãýöýíä áè÷èæ, ÄÎÑ-ä óäèðäëàãà øèëæèíý.