Скачиваний:
9
Добавлен:
01.05.2014
Размер:
122.89 Кб
Скачать
`¬`¤ѓ« ў  20. ЏаЁ¬Ґал ўлзЁб«ЁвҐ«м­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп`*
--------------------------------------------------------------------------

‚ б«Ґ¤го饬 а §¤Ґ«Ґ ЇаЁўҐ¤Ґ­л ЇаЁ¬Ґал Їа®Ја ¬¬ ўлзЁб«ЁвҐ«м­®Ј® е а ЄвҐа 
¤«п Їа®жҐбб®а  i486, ­ ЇЁб ­­лҐ ­   бᥬЎ«ҐаҐ ASM386/486. ќвЁ ЇаЁ¬Ґал
Ё««обваЁагов ­ҐЄ®в®алҐ Ї®«Ґ§­лҐ ЇаЁҐ¬л ¤«п а §а Ў®вЄЁ ўлзЁб«ЁвҐ«м­ле
Їа®Ја ¬¬­ле Їа®¤гЄв®ў Ё бЁб⥬ ­  ®б­®ўҐ Їа®жҐбб®а  i486.


`¤`Є20.1 ЏаЁ¬Ґа гб«®ў­®Ј® ўҐвў«Ґ­Ёп`*

Љ Є 㦥 ®Ўб㦤 «®бм ў ѓ« ўҐ 15, а §«Ёз­лҐ зЁб«®ўлҐ Є®¬ ­¤л ў®§¤Ґ©бвўгов ­ 
ЎЁвл Є®¤  гб«®ўЁп б«®ў  б®бв®п­Ёп ¬®¤г«п ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў о饩
в®зЄ®©, е®вп бгйҐбвўгҐв ¬­®¦Ґбвў® бЇ®б®Ў®ў ¤«п в®Ј®, зв®Ўл ॠ«Ё§®ў вм
гб«®ў­®Ґ ўҐвў«Ґ­ЁҐ, б«Ґ¤го饥 §  ба ў­Ґ­ЁҐ¬. „ «ҐҐ ЇаЁўҐ¤Ґ­ ®б­®ў­®©
Ї®¤е®¤:

- ‚лЇ®«­Ёвм ба ў­Ґ­ЁҐ.
- ‘®еа ­Ёвм б«®ў® б®бв®п­Ёп. (‘«®ў® б®бв®п­Ёп ¬®¤г«п ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б
Ї« ў о饩 в®зЄ®© ¬®¦­® б®еа ­Ёвм Їаאַ ў ॣЁбвॠAX.)
- Џа®ўҐаЁвм ЎЁвл Є®¤  гб«®ўЁп.
- ЏҐаҐ©вЁ Ї® १г«мв вг.

Ќ  ђЁбг­ЄҐ 20-1 ЇаҐ¤бв ў«Ґ­ да Ј¬Ґ­в Їа®Ја ¬¬л, Є®в®ал© Ё««обваЁагҐв, Є Є
¬®¦­® ба ў­Ёвм ¤ў  ­ е®¤пйЁҐбп ў Ї ¬пвЁ ўҐйҐб⢥­­лҐ зЁб«  ¤ў®©­®Ј®
д®а¬ в  (Ї®¤®Ў­ п Їа®Ја ¬¬  ¬®¦Ґв Ўлвм ЁбЇ®«м§®ў ­  б Є®¬ ­¤®© FTST).
—Ёб« , Є®в®алҐ ба ў­Ёў овбп ў н⮬ да Ј¬Ґ­вҐ, ­ §ў ­л A Ё B. ЋЇҐа жЁп
ба ў­Ґ­Ёп вॡгҐв § Јаг§ЄЁ зЁб«  A ў ўҐаиЁ­г ॣЁбва®ў®Ј® б⥪  ¬®¤г«п
®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў о饩 в®зЄ®©,   § вҐ¬ ба ў­Ґ­Ёп ҐЈ® б зЁб«®¬ B,
ўлЇ®«­пп ЇаЁ н⮬ ®ЇҐа жЁо ў®ббв ­®ў«Ґ­Ёп Ё§ б⥪ . Џ®б«Ґ 祣® б«®ў®
б®бв®п­Ёп § ЇЁблў Ґвбп ў ॣЁбва AX. A Ё B Ё¬Ґов зҐвлॠў®§¬®¦­ле
Ї®ап¤Є ,   ЎЁвл C3, C2 Ё C0 Є®¤  гб«®ўЁп гЄ §лў ов, Є Є®© Ё§ нвЁе Ї®ап¤Є®ў
гбв ­®ў«Ґ­. ’аЁ ЎЁв  а бЇ®« Ј овбп ў ўҐае­Ґ¬ Ў ©вҐ б«®ў  б®бв®п­Ёп ¬®¤г«п
®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў о饩 в®зЄ®© в Є, зв®Ўл ᮮ⢥вбвў®ў вм д« Ј ¬
­г«п, зҐв­®бвЁ Ё ЇҐаҐ­®б  (ZF, PF Ё CF), Є®Ј¤  Ў ©в § ЇЁблў Ґвбп ў® д« ЈЁ.
‚® да Ј¬Ґ­вҐ Їа®Ја ¬¬л д« ЈЁ ZF, PF Ё CF ॣЁбва  EFLAGS гбв ­ ў«Ёў овбп ў
§­ зҐ­Ёп ЎЁв®ў C3, C2 Ё C0 б«®ў  б®бв®п­Ёп,   § вҐ¬ ЁбЇ®«м§гҐвбп ®ЇҐа жЁп
гб«®ў­®Ј® ЇҐаҐе®¤  ¤«п в®Ј®, зв®Ўл Їа®ўҐаЁвм д« ЈЁ. ђҐ§г«мвЁагой п
Їа®Ја ¬¬  ®зҐ­м Є®¬Ї Єв­  Ё § ЇЁблў Ґвбп ўбҐЈ® «Ёим ў бҐ¬м Є®¬ ­¤.
Љ®¬ ­¤  FXAM ®Ў­®ў«пҐв ўбҐ зҐвлॠЎЁв  Є®¤  гб«®ўЁп. Ќ  ђЁбг­ЄҐ 20-2
Ї®Є § ­®, Є Є в Ў«Ёж  ЇҐаҐе®¤®ў ¬®¦Ґв Ўлвм ЁбЇ®«м§®ў ­  ¤«п в®Ј®, зв®Ўл
®ЇаҐ¤Ґ«Ёвм е а ЄвҐа Їа®б¬®в७­ле ўҐ«ЁзЁ­. ’ Ў«Ёж  ЇҐаҐе®¤®ў (FXAM_TBL)
ᮤҐа¦Ёв 16 ¬Ґв®Є, Ї® ®¤­®© ¤«п Є ¦¤®Ј® ў®§¬®¦­®Ј® Є®¤  гб«®ўЁп. ЋЎа вЁвҐ
ў­Ё¬ ­ЁҐ, зв® зҐвлॠ§­ зҐ­Ёп ᮤҐа¦ в ®¤­® Ё ⮦Ґ - "EMPTY" (Їгбв®).
ЏҐаўлҐ ¤ў  §­ зҐ­Ёп Є®¤  гб«®ўЁп ᮮ⢥вбвўгов Ї®§ЁжЁЁ "EMPTY". „ў  ¤агЈЁҐ
§­ зҐ­Ёп ў в Ў«ЁжҐ, Є®в®алҐ б®¤Ґа¦ в "EMPTY", ­ЁЄ®Ј¤  ­Ґ Ўг¤гв
ЁбЇ®«м§®ў ­л Їа®жҐбб®а®¬ i486 Ё«Ё ¬ вҐ¬ вЁзҐбЄЁ¬ б®Їа®жҐбб®а®¬ 387(TM), ­®
¬®Јгв Ўлвм ЁбЇ®«м§®ў ­л ЇаЁ ўлЇ®«­Ґ­ЁЁ Їа®Ја ¬¬л ­  б®Їа®жҐбб®аҐ 80287.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і . і
і A DQ ? і
і B DQ ? і
і . і
і . і
і FLD A ; ‡ Јаг¦ Ґв A ў ўҐаиЁ­г б⥪  FPU і
і FCOMP B ; ‘а ў­Ґ­ЁҐ A:B, ўлв «ЄЁў ­ЁҐ A і
і FSTSW AX ; ‘®еа ­пҐв १г«мв в ў ॣЁбвॠAX і
і ; і
і ; Љ®¤л гб«®ўЁп ᮤҐа¦ вбп ў ॣЁбвॠ–Џ“ AX і
і ; (ђҐ§г«мв вл ба ў­Ґ­Ёп) і
і ; ‡ Јаг§Є  Є®¤®ў гб«®ўЁп ў® д« ЈЁ і
і ; і
і SAHF і
і ; і
і ; €бЇ®«м§гҐв гб«®ў­лҐ ЇҐаҐе®¤л ¤«п в®Ј®, зв®Ўл і
і ; ®ЇаҐ¤Ґ«Ёвм Є Є гЇ®а冷祭л A Ё B і
і ; і
і JP A_B_UNORDERED ; ’ҐбвЁа®ў ­ЁҐ ЎЁв  C2 (PF) і
і JB A_LESS ; ’ҐбвЁа®ў ­ЁҐ ЎЁв  C0 (CF) і
і JE A_EQUAL ; ’ҐбвЁа®ў ­ЁҐ ЎЁв  C3 (ZF) і
і A_GREATHER: ; C0 (CF) = 0, C3 (ZF) = 0 і
і . і
і . і
і A_EQUAL: ; C0 (CF) = 0, C3 (ZF) = 1 і
і . і
і . і
і A_LESS: ; C0 (CF) = 1, C3 (ZF) = 0 і
і . і
і . і
і A_UNORDERED: ; C2 (PF) = 1 і
і . і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ђЁбг­®Є 20-1. “б«®ў­®Ґ ‚Ґвў«Ґ­ЁҐ ЇаЁ ‘а ў­Ґ­ЁЁ

”а Ј¬Ґ­в Їа®Ја ¬¬л ўлЇ®«­пҐв Є®¬ ­¤г FXAM Ё б®еа ­пҐв б«®ў® б®бв®п­Ёп.
‡ вҐ¬ Ё¤Ґв ¬ ­ЁЇг«пжЁп ЎЁв ¬Ё Є®¤  гб«®ўЁп ¤«п ®Є®­з вҐ«м­®Ј® ўлў®¤  зЁб« 
ў ॣЁбва AX, Є®в®а®Ґ а ў­® Є®¤г гб«®ўЁп, г¬­®¦Ґ­­®¬г ­  2. ЏаЁ н⮬
ўЄ«оз Ґвбп ®Ў­г«Ґ­ЁҐ ­ҐЁбЇ®«м§гҐ¬ле ЎЁв®ў ў Ў ©вҐ, Є®в®ал© б®¤Ґа¦Ёв Є®¤,
Їа®Ёб室Ёв б¤ўЁЈ ЎЁв  C3 ўЇа ў® в Є, зв®Ўл ®­ Ўл« б®бҐ¤­Ё¬ б ЎЁв®¬ C2, Ё
§ вҐ¬ Їа®Ёб室Ёв б¤ўЁЈ Є®¤  ¤«п в®Ј®, зв®Ўл г¬­®¦Ёвм ҐЈ® ­  2. Џ®«г祭­®Ґ
§­ зҐ­ЁҐ ЁбЇ®«м§гҐвбп Є Є Ё­¤ҐЄб, Ї® Є®в®а®¬г ўлЎЁа Ґвбп ®¤­  Ё§ ¬Ґв®Є Ё§
в Ў«Ёжл ЇҐаҐе®¤®ў FXAM TBL (г¬­®¦Ґ­ЁҐ Є®¤  гб«®ўЁп вॡгҐвбп Ё§-§  2-е
Ў ©в­®© ¤«Ё­л Є ¦¤®Ј® §­ зҐ­Ёп ў в Ў«ЁжҐ). Љ®¬ ­¤  ЎҐ§гб«®ў­®Ј® ЇҐаҐе®¤ 
JMP ­ Їа ў«пҐв Їа®жҐбб®а зҐаҐ§ в Ў«Ёжг ЇҐаҐе®¤®ў Є Їа®жҐ¤гаҐ, Є®в®а п
ᮤҐа¦Ёв Їа®Ја ¬¬г (­Ґ Ї®Є § ­­го ў ЇаЁ¬ҐаҐ) ¤«п ®Ўа Ў®вЄЁ Є ¦¤®Ј®
ў®§¬®¦­®Ј® १г«мв в  Є ¬ ­¤л FXAM.


`¤`Є20.2 ЏаЁ¬Ґал ®Ўа Ў®вЄЁ ЁбЄ«о祭Ё©`*

‘гйҐбвўгҐв ¬­®¦Ґбвў® Ї®¤е®¤®ў ¤«п ­ ЇЁб ­Ёп ®Ўа Ў®взЁЄ®ў ЁбЄ«озЁвҐ«м­ле
бЁвг жЁ©. Ћ¤Ё­ Ї®«Ґ§­л© ЇаЁҐ¬ - н⮠ᤥ« вм Їа®жҐ¤гаг ®Ўа Ў®вЄЁ
ЁбЄ«оз祭Ё© Ё§ ваҐе з б⥩: "Їа®«®Ј ", "⥫ " Ё "нЇЁ«®Ј ". ќв  Їа®жҐ¤га 
ўл§лў Ґвбп зҐаҐ§ ЇаҐалў ­ЁҐ ­®¬Ґа 16.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і і
і ; ’ Ў«Ёж  ЇҐаҐе®¤®ў ¤«п Їа®жҐ¤гал Їа®ўҐаЄЁ і
і ; і
і FXAM_TBL DD POS_UNNORM, POS_NAN, NEG_UNNORM, NEG_NAN, і
і & POS_NORM, POS_INFINITY, NEG_NORM, і
і & NEG_INFINITY, POS_ZERO, EMPTY, NEG_ZERO, і
і & EMPTY, POS_DENORM, EMPTY, NEG_DENORM, EMPTY і
і . і
і . і
і ; Џа®ўҐаЁвм ST Ё б®еа ­Ёвм १г«мв в (Є®¤л гб«®ўЁп) і
і ; і
і FXAM і
і XOR EAX, EAX ; ЋзЁбвЁвм ॣЁбва EAX і
і FSTSW AX і
і ; і
і ; ‚лзЁб«Ґ­ЁҐ ᬥ饭Ёп ў в Ў«ЁжҐ ЇҐаҐе®¤®ў і
і ; і
і AND AX, 0100011100000000B ; ЋзЁбвЁвм ўбҐ ЎЁвл і
і ; Єа®¬Ґ C3, C2-C0 і
і SHR EAX, 6 ; ‘¤ўЁ­гвм C2-C0 Є Є (000XXX00) і
і SAL AH, 5 ; “бв ­®ўЁвм C3 Є Є (00X00000) і
і OR AL, AH ; ‘«Ёвм C3 Ё C2-C0 (00XXXX00) і
і XOR AH, AH ; “¤ «Ёвм бв аго Є®ЇЁо C3 і
і ; і
і ; ЏҐаҐ©вЁ Є Їа®жҐ¤гॠЇ® Є®¤г гб«®ўЁп і
і ; і
і JMP FXAM_TBL[EAX] і
і ; і
і ; ЊҐвЄЁ в Ў«Ёжл ЇҐаҐе®¤ , Ї® ®¤­®© ¤«п ®Ўа Ў®вЄЁ і
і ; Є ¦¤®Ј® ў®§¬®¦­®Ј® १г«мв в  FXAM і
і ; і
і POS_UNNORM: і
і . і
і POS_NAN: і
і . і
і NEG_UNNORM: і
і . і
і NEG_NAN: і
і . і
і POS_NORM: і
і . і
і POS_INFINITY: і
і . і
і NEG_NORM: і
і . і
і NEG_INFINITY: і
і . і
і POS_ZERO: і
і . і
і EMPTY: і
і . і
і NEG_ZERO: і
і . і
і POS_DENORM: і
і . і
і NEG_DENORM: і
і . і
і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

ђЁбг­®Є 20-2. “б«®ў­®Ґ ‚Ґвў«Ґ­ЁҐ ЇаЁ ЋЇҐа жЁЁ FXAM

ЏаЁ ЇҐаҐ¤ зҐ гЇа ў«Ґ­Ёп ­  Їа®жҐ¤гаг ®Ўа Ў®вЄЁ ЁбЄ«о祭Ёп, ўбҐ ЇаҐалў ­Ёп
§ ЇаҐй овбп  ЇЇ а в­л¬ бЇ®б®Ў®¬. Џа®«®Ј ўлЇ®«­пҐв ўбҐ дг­ЄжЁЁ, Є®в®алҐ
¤®«¦­л Ўлвм § йЁйҐ­л ®в ў®§¬®¦­®Ј® ЇаҐалў ­Ёп Ў®«ҐҐ ўлб®ЄЁ¬ ЇаЁ®аЁвҐв®¬.
ЋЎлз­® нв® б®еа ­Ґ­ЁҐ ॣЁбва®ў Ё ЇҐаҐ¤ з  ¤Ё Ј­®бвЁзҐбЄ®© Ё­д®а¬ жЁЁ Ё§
¬®¤г«п ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў ой© в®зЄ®© ў Ї ¬пвм. Љ®Ј¤  ЄаЁвЁзҐбЄЁ©
Їа®жҐбб Ўг¤Ґв § ўҐа襭, Їа®«®Ј ¬®¦Ґв а §аҐиЁвм ЇаҐалў ­Ёп ¤«п в®Ј®, зв®Ўл
Ї®§ў®«Ёвм ®Ўа Ў®взЁЄ ¬ ЇаҐалў ­Ё© б Ў®«ҐҐ ўлб®ЄЁ¬ ЇаЁ®аЁвҐв®¬ ўлЇ®«­Ёвмбп
а ­миҐ ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ёп.
’Ґ«® ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ёп Їа®б¬ ваЁў Ґв ¤Ё Ј­®бвЁзҐбЄго Ё­д®а¬ жЁо Ё
ॠЈЁагҐв ­  в®, зв® ­Ґ®Ўе®¤Ё¬® б в®зЄЁ §аҐ­Ёп Їа®Ја ¬¬­®Ј® Їа®¤гЄв . ќв 
ॠЄжЁп ¬®¦Ґв Ё¬Ґвм ¤Ё Ї §®­ ®в ЇаҐалў ­Ёп ўлЇ®«­Ґ­Ёп ¤«п в®Ј®, зв®Ўл
ўл¤ вм б®®ЎйҐ­ЁҐ, ¤® Ї®ЇлвЄЁ г« ¤Ёвм ­ҐЇ®« ¤Єг Ё Їа®¤®«¦Ёвм ­®а¬ «м­®Ґ
ўлЇ®«­Ґ­ЁҐ.
ќЇЁ«®Ј, б®Ўб⢥­­®, ўлЇ®«­пҐв ¤Ґ©бвўЁп ®Ўа в­лҐ Їа®«®Јг, ў®§ўа й п
Їа®жҐбб®а ў б®бв®п­ЁҐ, ЇаЁ Є®в®а®¬ ¬®¦­® Ўл«® Ўл ў®§®Ў­®ўЁвм ­®а¬ «м­®Ґ
ўлЇ®«­Ґ­ЁҐ. ќЇЁ«®Ј ­Ґ ¤®«¦Ґ­ § Јаг¦ вм ­Ґ¬ бЄЁа®ў ­­л© д« Ј ЁбЄ«о祭Ёп ў
¬®¤г«м ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў о饩 в®зЄ®© Ё«Ё Ї®вॡ®ў вм ­Ґ¬Ґ¤«Ґ­­®
¤агЈ®© ЁбЄ«озЁвҐ«м­®© бЁвг жЁЁ.
Ќ  аЁбг­Є е ®в ђЁбг­Є  20-3 ¤® ђЁбг­Є  20-5 Ї®Є § ­л бЄҐ«Ґв­лҐ б奬л
Ёб室­ле Є®¤®ў ­   бᥬЎ«ҐаҐ ASM386/486 ваҐе ®Ўа Ў®взЁЄ®ў ЁбЄ«озЁвҐ«м­ле
бЁвг жЁ©. ЏаЁ н⮬ ¤Ґ¬®­бваЁагҐвбп Є Є ¬®Јгв Ўлвм ­ ЇЁб ­л Їа®«®Ј Ё нЇЁ«®Ј
ў а §«Ёз­ле бЁвг жЁпе,   ­  ¬ҐбвҐ, Ј¤Ґ ¤®«¦­® Ўлвм Ї®¬ҐйҐ­® § ўЁбп饥 ®в
ЇаЁ¬Ґ­Ґ­Ёп ⥫® ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ёп, бв®пв Є®¬¬Ґ­в аЁЁ.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і і
і SAVE_ALL PROC і
і ; і
і ; ‘®еа ­Ёвм ॣЁбвал, § ­ҐбвЁ і
і ; ®в®Ўа ¦Ґ­ЁҐ б®бв®п­Ёп FPU ў б⥪ і
і ; і
і PUSH EBP і
і MOV EBP, ESP і
і SUB ESP, 108 і
і ; і
і ; ‘®еа ­Ёвм Ї®«­®Ґ б®бв®п­ЁҐ FPU, а §аҐиЁвм ЇаҐалў ­Ёп і
і ; і
і FNSAVE [EBP-108] і
і STI і
і ; і
і ; „ «ҐҐ б«Ґ¤гҐв Їа®Ја ¬¬  ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ё© і
і ; ў § ўЁбЁ¬®бвЁ ®в 楫Ё ®Ўа Ў®вЄЁ і
і ; і
і ; ЋзЁбвЁвм д« ЈЁ ЁбЄ«о祭Ё© ў б«®ўҐ б®бв®п­Ёп і
і ; (Є®в®а®Ґ ­ е®¤Ёвбп ў Ї ¬пвЁ) і
і ; ‚®ббв ­®ўЁвм ¬®¤ЁдЁжЁа®ў ­­®Ґ ®в®Ўа ¦Ґ­ЁҐ б®бв®п­Ёп і
і ; і
і MOV BYTE PTR [EBP-104], 0H і
і FRSTOR [EBP-108] і
і ; і
і ; Ћбў®Ў®¤Ёвм б⥪, ў®ббв ­®ўЁвм ॣЁбвал і
і ; і
і MOVE ESP, EBP і
і . і
і . і
і POP EBP і
і ; і
і ; ‚Ґа­гвмбп Є ЇаҐаў ­­л¬ ўлзЁб«Ґ­Ёп¬ і
і ; і
і IRET і
і SAVE_ALL ENDP і
і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

ђЁбг­®Є 20-3. ЋЎа Ў®взЁЄ €бЄ«о祭Ёп Џ®«­®Ј® ‘®бв®п­Ёп


ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і і
і SAVE_ENVIRONMENT PROC і
і ; і
і ; ‘®еа ­Ёвм ॣЁбвал, § ­ҐбвЁ і
і ; ®Єа㦥­ЁҐ FPU ў б⥪ і
і ; і
і PUSH EBP і
і і
і MOV EBP, ESP і
і SUB ESP, 28 і
і ; і
і ; ‘®еа ­Ёвм ®Єа㦥­ЁҐ FPU, а §аҐиЁвм ЇаҐалў ­Ёп і
і ; і
і FNSTENV [EBP-28] і
і STI і

і ; і
і ; „ «ҐҐ б«Ґ¤гҐв Їа®Ја ¬¬  ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ё© і
і ; ў § ўЁбЁ¬®бвЁ ®в 楫Ё ®Ўа Ў®вЄЁ і
і ; і
і ; ЋзЁбвЁвм д« ЈЁ ЁбЄ«о祭Ё© ў б«®ўҐ б®бв®п­Ёп і
і ; (Є®в®а®Ґ ­ е®¤Ёвбп ў Ї ¬пвЁ) і
і ; ‚®ббв ­®ўЁвм ¬®¤ЁдЁжЁа®ў ­­®Ґ ®в®Ўа ¦Ґ­ЁҐ ®Єа㦥­Ёп і
і ; і
і MOV BYTE PTR [EBP-24], 0H і
і FLDENV [EBP-28] і
і ; і
і ; Ћбў®Ў®¤Ёвм б⥪, ў®ббв ­®ўЁвм ॣЁбвал і
і ; і
і MOVE ESP, EBP і
і POP EBP і
і ; і
і ; ‚Ґа­гвмбп Є ЇаҐаў ­­л¬ ўлзЁб«Ґ­Ёп¬ і
і ; і
і IRET і
і SAVE_ENVIRONMENT ENDP і
і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ђЁбг­®Є 20-4. ЋЎа Ў®взЁЄ €бЄ«о祭Ёп ‘®Єа йҐ­­®Ј® ‚६Ґ­Ё Ћ¦Ё¤ ­Ёп


’ҐЄбвл ­  ђЁбг­Є е 20-3 Ё 20-4 ®зҐ­м Ї®е®¦Ё; Ёе ®в«ЁзЁҐ § Є«оз Ґвбп в®«мЄ®
ў ўлЎ®аҐ Є®¬ ­¤ ¤«п б®еа ­Ґ­Ёп Ё ў®ббв ­®ў«Ґ­Ёп б®бв®п­Ёп ¬®¤г«п ®Ўа Ў®вЄЁ
®ЇҐа жЁ© б Ї« ў о饩 в®зЄ®©. ‚лЎ®а §¤Ґбм § Є«оз Ґвбп ў Ї®ўл襭­®©
¤Ё Ј­®бвЁзҐбЄ®© Ё­д®а¬ жЁЁ, ЇаҐ¤®бв ў«пҐ¬®© Є®¬ ­¤®© FNSAVE, Ё Ў®«ҐҐ
Ўлбвал¬ ўлЇ®«­Ґ­ЁҐ¬ Є®¬ ­¤л FNSTENV. „«п вҐе ЇаЁ«®¦Ґ­Ё©, Є®в®алҐ
згўб⢨⥫м­л Є ўаҐ¬Ґ­Ё ®¦Ё¤ ­Ёп ЇаҐалў ­Ёп Ё«Ё Є®в®ал¬ ­Ґ ­ ¤®
Їа®б¬ ваЁў вм ᮤҐа¦Ё¬®Ґ ॣЁбва®ў, Є®¬ ­¤  FNSTENV б®Єа й Ґв
Їа®¤®«¦ЁвҐ«м­®бвм "ЄаЁвЁзҐбЄ®© §®­л", ў вҐзҐ­ЁҐ Є®в®а®© Їа®жҐбб®а ­Ґ ўЁ¤Ёв
вॡ®ў ­Ёп ¤агЈЁе ЇаҐалў ­Ё©.
Џ®б«Ґ ўлЇ®«­Ґ­Ёп ⥫  ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ёп, нЇЁ«®Ј ЇаЁЈ®в ў«Ёў Ґв
Їа®жҐбб®а ¤«п в®Ј®, зв®Ўл Їа®¤®«¦Ёвм ўлЇ®«­Ґ­ЁҐ ®в в®зЄЁ ЇаҐалў ­Ёп (в®
Ґбвм, Є®¬ ­¤л, б«Ґ¤го饩 §  в®©, Є®в®а п ᮧ¤ «  ­Ґ¬ бЄЁа®ў ­­®Ґ
ЁбЄ«о祭ЁҐ). ЋЎа вЁвҐ ў­Ё¬ ­ЁҐ, зв® д« ЈЁ ЁбЄ«о祭Ёп ў Ї ¬пвЁ, Є®в®алҐ
§ Јаг¦ Ґвбп ў ¬®¤г«м ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў о饩 в®зЄ®©, ®Ўа й овбп ў
­г«м ¤«п ЇҐаҐ§ Јаг§ЄЁ (д ЄвЁзҐбЄЁ, ў нвЁе ЇаЁ¬Ґа е ®Ў­г«пҐвбп ўбҐ
®в®Ўа ¦Ґ­ЁҐ б«®ў  б®бв®п­Ёп).
ЏаЁ¬Ґал ­  ђЁбг­Є е 20-3 Ё 20-4 ЇаҐ¤Ї®« Ј ов, зв® б ¬ ®Ўа Ў®взЁЄ
ЁбЄ«о祭Ёп ­Ґ Ўг¤Ґв ЇаЁзЁ­®© ¤агЈ®© ­Ґ¬ бЄЁа㥬®Ј® ЁбЄ«о祭Ёп. ’ ¬, Ј¤Ґ
нв® ў®§¬®¦­®, ¬®¦­® ЇаЁ¬Ґ­пвм ®ЎйЁ© Ї®¤е®¤, Ї®Є § ­­л© ­  ђЁбг­ЄҐ 20-5.
Ћб­®ў­®© ЇаЁҐ¬ - б®еа ­Ёвм Ї®«­®Ґ б®бв®п­ЁҐ ¬®¤г«п ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б
Ї« ў о饩 в®зЄ®© Ё § вҐ¬ § Јаг§Ёвм ­®ў®Ґ гЇа ў«по饥 б«®ў® ў Їа®«®ЈҐ.
ЋЎа й Ґ¬ ў иҐ ў­Ё¬ ­ЁҐ ­  в®, зв® ­ ¤® Ўлвм ®зҐ­м ®бв®а®¦­л¬ ЇаЁ
а §а Ў®вЄҐ ®Ўа Ў®взЁЄ®ў ЁбЄ«о祭Ё© нв®Ј® вЁЇ  ¤«п в®Ј®, зв®Ўл гЎҐаҐзм
®Ўа Ў®взЁЄ ®в ЎҐбЄ®­Ґз­ле ®Ўа йҐ­Ё©.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і і
і . і
і . і
і . і
і LOCAL_CONTROL DW ? ; €­ЁжЁ «Ё§Ёа®ў ­® і
і . і
і . і
і . і
і REENTRANT PROC і
і ; і
і ; ‘®еа ­Ёвм ॣЁбвал, § ­ҐбвЁ і
і ; ®в®Ўа ¦Ґ­ЁҐ б®бв®п­Ёп FPU ў б⥪ і
і ; і
і PUSH EBP і
і . і
і . і
і . і
і MOV EBP, ESP і
і SUB ESP, 108 і
і ; і
і ; ‘®еа ­Ёвм Ї®«­®Ґ б®бв®п­ЁҐ FPU, § Јаг§Ёвм ­®ў®Ґ і
і ; гЇа ў«по饥 б«®ў®, а §аҐиЁвм ЇаҐалў ­Ёп і
і ; і
і FNSAVE [EBP-108] і
і FLDCW LOCAL_CONTROL і
і STI і
і . і
і . і

і . і
і ; і
і ; „ «ҐҐ б«Ґ¤гҐв Їа®Ја ¬¬  ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ё© і
і ; ў § ўЁбЁ¬®бвЁ ®в 楫Ё ®Ўа Ў®вЄЁ і
і ; ѓҐ­ҐаЁа㥬®Ґ §¤Ґбм ­Ґ¬ бЄЁа®ў ­­®Ґ ЁбЄ«о祭ЁҐ і
і ; Ўг¤Ґв ЇаЁзЁ­®© ўл§®ў  ®Ўа Ў®взЁЄ  ЁбЄ«о祭Ё©. і
і ; …б«Ё ­Ґ®Ўе®¤Ё¬  «®Є «м­ п Ї ¬пвм, в® ¬®¦­® і
і ; а бЇ®«®¦Ёвм ¤ ­­лҐ ў б⥪Ґ. і
і . і
і . і
і . і
і ; ЋзЁбвЁвм д« ЈЁ ЁбЄ«о祭Ё© ў б«®ўҐ б®бв®п­Ёп і
і ; (Є®в®а®Ґ ­ е®¤Ёвбп ў Ї ¬пвЁ) і
і ; ‚®ббв ­®ўЁвм ¬®¤ЁдЁжЁа®ў ­­®Ґ ®в®Ўа ¦Ґ­ЁҐ б®бв®п­Ёп і
і ; і
і MOV BYTE PTR [EBP-104], 0H і
і FRSTOR [EBP-108] і
і ; і
і ; Ћбў®Ў®¤Ёвм б⥪, ў®ббв ­®ўЁвм ॣЁбвал і
і ; і
і MOVE ESP, EBP і
і . і
і . і
і POP EBP і
і ; і
і ; ‚Ґа­гвмбп ў в®зЄг, Ј¤Ґ Їа®Ё§®и«® ЇаҐалў ­ЁҐ і
і ; і
і IRET і
і REENTRANT ENDP і
і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

ђЁбг­®Є 20-5. ђҐҐ­вҐа ЎҐ«м­л© ЋЎа Ў®взЁЄ €бЄ«о祭Ё©


`¤`Є20.3 ЏаЁ¬Ґа ЇҐаҐў®¤  зЁб«  б Ї« ў о饩 в®зЄ®© ў бЁ¬ў®«м­л© ўЁ¤ `*

‚лзЁб«ЁвҐ«м­лҐ Їа®Ја ¬¬л ¤®«¦­л д®а¬Ёа®ў вм бў®Ё १г«мв вл ¤«п в®Ј®,
зв®Ўл ®­Ё Ўл«Ё ў®бЇаЁ­Ё¬ Ґ¬л Ё зЁв Ґ¬л Ї®«м§®ў вҐ«Ґ¬ Їа®Ја ¬¬л. ‚
Ў®«миЁ­б⢥ б«гз Ґў, зЁб«®ўлҐ १г«мв вл ўлў®¤пвбп Є Є бва®ЄЁ бЁ¬ў®«®ў
ASCII ¤«п в®Ј®, зв®Ўл Ёе ¬®¦­® Ўл«® ®вЇҐз в вм Ё«Ё Їа®б¬®ваҐвм ­  ¤ЁбЇ«ҐҐ.
ќв®в ЇаЁ¬Ґа Ї®Є §лў Ґв, Є Є ўҐ«ЁзЁ­  б Ї« ў о饩 в®зЄ®© ¬®¦Ґв Ўлвм
ЇҐаҐўҐ¤Ґ­  ў ¤ҐбпвЁз­го бва®Єг ASCII бЁ¬ў®«®ў. ”г­ЄжЁп, Ї®Є § ­­ п ­ 
ђЁбг­ЄҐ 20-6, ¬®¦Ґв Ўлвм ўл§ў ­  Ё§ Їа®Ја ¬¬ ­  п§лЄ е PL/M-386/486,
Pascal386/486, FORTRAN-386/486 Ё«Ё ASM386/486.
ЏаЁ ­ ЇЁб ­ЁЁ Їа®Ја ¬¬л ®Ўа й «®бм ў­Ё¬ ­ЁҐ ᪮॥ ­  Єа вЄ®бвм, бЄ®а®бвм
Ё в®з­®бвм ўлЇ®«­Ґ­Ёп, 祬 ­  ¬ ЄбЁ¬Ё§ жЁо зЁб«  §­ з йЁе жЁда. ‘¤Ґ« ­ 
Ї®ЇлвЄ  ®бв ўЁвм жҐ«лҐ ў Ёе б®Ўб⢥­­ле ®Ў« бвпе ¤«п в®Ј®, зв®Ўл
ЇаҐ¤®вўа вЁвм б«гз ©­лҐ ®иЁЎЄЁ ЇаЁ ЇҐаҐў®¤Ґ зЁбҐ«.
€бЇ®«м§гп зЁб«  ў ўҐйҐб⢥­­®¬ д®а¬ вҐ а биЁаҐ­­®© в®з­®бвЁ, нв 
Ї®¤Їа®Ја ¬¬  ¤®бвЁЈ Ґв ў ­ Ёег¤иҐ¬ б«гз Ґ в®з­®бвЁ ваЁ Ґ¤Ё­Ёжл ў 16-⮬
¤ҐбпвЁз­®¬ а §а拉 ¤«п ­ҐжҐ«Ґ«®зЁб«Ґ­­ле ўҐ«ЁзЁ­ Ё«Ё 楫ле зЁбҐ«, Ў®«миЁе
祬 10**(18). ќв® ¤ў®©­ п в®з­®бвм. …б«Ё зЁб«® Ё¬ҐҐв ¤ҐбпвЁз­л© Ї®а冷Є,
¬Ґ­миЁ© 祬 100, в®з­®бвм б®бв ў«пҐв ®¤­  Ґ¤Ё­Ёж  ў 17-⮬ ¤ҐбпвЁз­®¬
а §а拉.
Ѓ®«ҐҐ ўлб®Є п в®з­®бвм ¬®¦Ґв Ўлвм ¤®бвЁЈ­гв  ЇаЁ Ў®«миЁе § ва в е ­ 
Їа®Ја ¬¬Ёа®ў ­ЁҐ, 㢥«ЁзҐ­ЁЁ а §¬Ґа  Їа®Ја ¬¬л Ў®«ҐҐ ­Ё§Є®© нд䥪⨢­®бвЁ.


`¤`Є20.3.1 ‘®бв ў«пойЁҐ з бвЁ дг­ЄжЁЁ `*

ЏҐаҐў®¤ зЁбҐ« ॠ«Ё§гҐвбп ваҐ¬п ®в¤Ґ«м­л¬Ё ¬®¤г«п¬Ё. ѓ« ў­го а Ў®вг
ўлЇ®«­пҐ¬ ¬®¤г«м FLOATING TO ASCII (—Ёб«® б Ї« ў о饩 в®зЄ®© ў
ASCII-бва®Єг). „агЈЁҐ ¬®¤г«Ё ЇаҐ¤бв ў«Ґ­л ®в¤Ґ«м­®, Ї®в®¬г зв® ®­Ё Ё¬Ґов
Ў®«ҐҐ ®ЎйҐҐ ­ §­ зҐ­ЁҐ. Ћ¤Ё­ Ё§ ­Ёе, GET POWER 10 (‚§пвм б⥯Ґ­м 10-вЁ),
ЁбЇ®«м§гҐвбп в Є¦Ґ Ё Ї®¤Їа®Ја ¬¬®© ЇҐаҐў®¤  зЁбҐ« Ё§ ASCII ўЁ¤  ў д®а¬ в б
Ї« ў о饩 в®зЄ®©. „агЈ®© ¬ «Ґ­мЄЁ© ¬®¤г«м, TOP STATUS (‘®бв®п­ЁҐ ўҐаиЁ­л
б⥪ ), Ё¤Ґ­вЁдЁжЁагҐв в®, зв® ­ е®¤Ёвбп ў ўҐаиЁ­Ґ зЁб«®ў®Ј® ॣЁбва®ў®Ј®
б⥪ .


`¤`Є20.3.2 ‘®Ј« иҐ­Ёп Ї® ЁбЄ«о祭Ёп¬ `*

ЌҐ®Ўе®¤Ё¬® ЇаҐ¤®вўа вЁвм дг­ЄжЁо ®в ЈҐ­ҐаЁа®ў ­Ёп ў­гваЁ ­ҐҐ
ЁбЄ«озЁвҐ«м­ле бЁвг жЁ©. ЏаЁ­Ё¬ овбп «оЎлҐ зЁб«®ўлҐ §­ зҐ­Ёп, ЇаЁ н⮬
в®«мЄ® ў®§¬®¦­лҐ ЁбЄ«о祭Ёп § ­Ё¬ ов б⥪ зЁб«®ўле ॣЁбва®ў.
‹оЎ®Ґ §­ зҐ­ЁҐ, Ї®б« ­­®Ґ ў зЁб«®ў®© б⥪, Їа®ўҐапҐвбп ­  бгйҐбвў®ў ­ЁҐ,
вЁЇ (NaN Ё«Ё ЎҐбЄ®­Ґз­®бвм) Ё б®бв®п­ЁҐ (¤Ґ­®а¬ «м­®Ґ, ­®«м, §­ Є). ђ §¬Ґа
бва®ЄЁ вҐбвЁагҐвбп ЇаЁ ¬Ё­Ё¬ «м­®¬ Ё ¬ ЄбЁ¬ «м­®¬ §­ зҐ­ЁЁ. …б«Ё ўҐаиЁ­ 
ॣЁбва®ў®Ј® б⥪  Їгбв  Ё«Ё а §¬Ґа бва®ЄЁ б«ЁиЄ®¬ ¬ «, дг­ЄжЁп ў®§ўа й Ґв
Є®¤ ®иЁЎЄЁ.
ЏҐаҐЇ®«­Ґ­ЁҐ Ё ®ваЁж вҐ«м­®Ґ ЇҐаҐЇ®«­Ґ­ЁҐ ЇаЁ ®зҐ­м Ў®«миЁе Ё«Ё ®зҐ­м
¬ «Ґ­мЄЁе зЁб« е ЇаҐ¤®вўа и овбп ў­гваЁ дг­ЄжЁЁ.

ђЁбг­®Є 20-6. Џ®¤Їа®Ја ¬¬  ЏҐаҐў®¤  —ЁбҐ« б Џ« ў о饩 ’®зЄ®© ў ASCII ‚Ё¤

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і і
і і
і SOURCE і
і і
і +1 $title('ЏҐаҐў®¤ зЁб«  б Ї« ў о饩 в®зЄ®© ў ASCII ўЁ¤') і
і і
і і
і name floating_to_ascii і
і і
і public floating_to_ascii і
і extrn get_power_10:near, tos_status:near і
і ; і
і ; ќв  Ї®¤Їа®Ја ¬¬  ЇҐаҐў®¤Ёв зЁб«® б Ї« ў о饩 в®зЄ®© і
і ; Ё§ ўҐаиЁ­л б⥪  FPU ў бва®Єг вЁЇ  ASCII Ё ®в¤Ґ«пҐв і
і ; б⥯Ґ­м 10, ¬ бив ЎЁагп §­ зҐ­ЁҐ (ў ¤ў®Ёз­®¬ ўЁ¤Ґ). і
і ; Њ ЄбЁ¬ «м­ п ¤«Ё­  бва®ЄЁ бЁ¬ў®«®ў ॣ㫨агҐвбп і
і ; Ї а ¬Ґв஬, Є®в®ал© ¤®«¦Ґ­ Ўлвм Ў®«миҐ 1. і
і ; ЌҐ-­®а¬ «м­лҐ §­ зҐ­Ёп, ¤Ґ­®а¬ «м­лҐ §­ зҐ­Ёп Ё ЇбҐў¤® і
і ; -­г«Ё ЇҐаҐў®¤пвбп Є®а४⭮. Ћ¤­ Є®, ­Ґ-­®а¬ «м­лҐ і
і ; ўҐ«ЁзЁ­л Ё ЇбҐў¤®-­г«Ё Ў®«ҐҐ ­Ґ Ї®¤¤Ґа¦Ёў овбп і
і ; Їа®жҐбб®а®¬ i486 (ў ᮮ⢥вбвўЁЁ б® бв ­¤ а⮬ IEEE) Ё і
і ; ў­гв७­Ґ ­Ґ ЈҐ­ҐаЁаговбп. ‚®§ўа й Ґ¬®Ґ §­ зҐ­ЁҐ і
і ; гЄ §лў Ґв бЄ®«мЄ® ¤ў®Ёз­ле а §а冷ў в®з­®бвЁ Ўл«® і
і ; Ї®вҐап­® ў ­Ґ-­®а¬ «м­ле Ё«Ё ¤Ґ­®а¬ «м­ле §­ зҐ­Ёпе. і
і ; ’ Є¦Ґ гЄ §лў Ґвбп Ё ўҐ«ЁзЁ­  ¬ ­вЁббл ЇбҐў¤®-­г«п і
і ; (¤ў®Ёз­л¬ Ї®ап¤Є®¬). –Ґ«лҐ зЁб«  ¬Ґ­миЁҐ 10**18 і
і ; ЇҐаҐў®¤пвбп в®з­®, Ґб«Ё ЇаЁ­Ё¬ ой п бва®Є  ASCII і
і ; бЁ¬ў®«®ў ᮤҐа¦Ёв ¤®бв в®з­®Ґ Є®«ЁзҐбвў® Ї®§ЁжЁ© ¤«п і
і ; жЁда нвЁе зЁбҐ«. ‚ Їа®вЁў­®¬ б«гз Ґ §­ зҐ­ЁҐ і
і ; ЇҐаҐў®¤Ёвмбп ў ­ гз­го ­®в жЁо. і
і ; і
і ; ‚ § ўЁбЁ¬®бвЁ ®в १г«мв в  Ї®¤Їа®Ја ¬¬  ўл¤ Ґв і
і ; б«Ґ¤гойЁҐ §­ зҐ­Ёп: і
і ; і
і ; 0 ЇҐаҐў®¤ ўлЇ®«­Ґ­, а §¬Ґа бва®ЄЁ ®ЇаҐ¤Ґ«Ґ­ і
і ; 1 ­Ґ¤®ЇгбвЁ¬лҐ  аЈг¬Ґ­вл і
і ; 2 в®з­л© 楫®зЁб«Ґ­­л© ЇҐаҐў®¤, а §¬Ґа бва®ЄЁ і
і ; ®ЇаҐ¤Ґ«Ґ­ і
і ; 3 ­Ґ®ЇаҐ¤Ґ«Ґ­­®бвм і
і ; 4 + NaN (­Ґ-зЁб«®) і
і ; 5 - NaN і
і ; 6 + ЃҐбЄ®­Ґз­®бвм і
і ; 7 - ЃҐбЄ®­Ґз­®бвм і
і ; 8 ўбваҐзҐ­ ЇбҐў¤®-­®«м, а §¬Ґа бва®ЄЁ ®ЇаҐ¤Ґ«Ґ­ і
і ; і
і ; €­вҐадҐ©б ¤«п ўл§®ў  Ё§ PLM-386/486 і
і ; і
і ; floating_to_ascii: і
і ; procedure (number, denormal_ptr, string_ptr, size_ptr, і
і ; field_size, power_ptr) word external; і
і ; declare (denormal_ptr, string_ptr, power_ptr, size_ptr) і
і ; pointer; і
і ; declare field_size word; і
і ; string_size based size_ptr word; і
і ; declare number real; і
і ; declare denormal integer based denormal_ptr; і
і ; і
і і
і ; declare power integer based power_ptr; і
і ; end floating_to_ascii; і
і ; і
і ; ‚Ґ«ЁзЁ­  б Ї« ў о饩 в®зЄ®© ¤®«¦­  Ўлвм ­  ўҐаиЁ­Ґ і
і ; б⥪  FPU. ќв  Ї®¤Їа®Ја ¬¬  вॡгҐв ваЁ бў®Ў®¤­лҐ і
і ; ॣЁбва  ў б⥪Ґ Ё Ї®б«Ґ ®ва Ў®вЄЁ ўлв «ЄЁў Ґв і
і ; ЇҐаҐ¤ ў Ґ¬лҐ §­ зҐ­Ёп Ё§ б⥪ . Џ®«г祭­ п бва®Є  і
і ; Ўг¤Ґв Ё¬Ґвм ­ з «м­л© бЁ¬ў®« «ЁЎ® "+", «ЁЎ® "-", і
і ; гЄ §лў п ­  §­ Є ўҐ«ЁзЁ­л. ‡ вҐ¬ б«Ґ¤гов ¤ҐбпвЁз­лҐ і
і ; жЁдал ў ASCII ўЁ¤Ґ. —Ёб«®ў®Ґ §­ зҐ­ЁҐ бва®ЄЁ вЁЇ  і
і ; ASCII Ўг¤Ґв а ў­® (ASCII ‘’ђЋЉЂ)*10**ЏЋђџ„ЋЉ. …б«Ё і
і ; ¤ ­­®Ґ зЁб«® Ўл«® ­г«Ґ¬, в® бва®Є  Ўг¤Ґв ᮤҐа¦ вм і
і ; в®«мЄ® §­ Є Ё ®¤Ё­ бЁ¬ў®« 0. ‚Ґ«ЁзЁ­  а §¬Ґа  бва®ЄЁ і
і ; (string_size) гЄ §лў Ґв ­  Ї®«­го ¤«Ё­г бва®ЄЁ бЁ¬ў®«®ў, і
і ; ўЄ«оз п бЁ¬ў®« §­ Є . ‘ва®Є  (0) ўбҐЈ¤  Ўг¤Ґв і
і ; ᮤҐа¦ вм §­ Є. ‚®§¬®¦­®, зв® а §¬Ґа бва®ЄЁ Ўг¤Ґв і
і ; ¬Ґ­миҐ а §¬Ґа  Ї®«п. ќв® Ўлў Ґв ЇаЁ ­г«пе Ё 楫ле і
і ; зЁб« е. ЏбҐў¤®-­®«м ўл¤ Ґв ®б®Ўл© Є®¤ ў®§ўа в . ЏаЁ і
і ; ¤Ґ­®а¬ «м­ле зЁб« е гЄ §лў Ґвбп б⥯Ґ­м ¤ўге і
і ; ЇаҐ¤бв ў«Ґ­­®Ј® §­ зҐ­Ёп. ‘⥯Ґ­м ¤ҐбпвЁ Ё бва®Є  Ўг¤гв і
і ; в ЄЁ¬Ё ¦Ґ, Є Є Ґб«Ё Ўл ўҐ«ЁзЁ­  Ўл«  Ўл Їа®бвл¬ ­г«Ґ¬. і
і ; і

і ; ќв  Ї®¤Їа®Ја ¬¬  в®з­® ўл¤ Ґв ¤ҐбпвЁз­лҐ жҐ«лҐ ¤® 18 і
і ; жЁда. –Ґ«лҐ ўҐ«ЁзЁ­л Ё¬Ґов ¤ҐбпвЁз­л© Ї®Є § вҐ«м і
і ; б⥯Ґ­Ё ў бва®ЄҐ Ё§ ­г«Ґ©. ЏаЁ ­ҐжҐ«ле ўҐ«ЁзЁ­ е і
і ; в®з­®бвм १г«мв в  § Є«о祭  ў ¤ўге Ї®б«Ґ¤­Ёе і
і ; ¤ҐбпвЁз­ле жЁда е (¤ў®©­ п в®з­®бвм). „«п і
і ; ¬ бив ЎЁа®ў ­Ёп ўҐ«ЁзЁ­л ў ¤Ё Ї §®­Ґ, ЇаЁҐ¬«Ґ¬®¬ ¤«п і
і ; ¤ ­­ле вЁЇ  BCD, ЁбЇ®«м§говбп Є®¬ ­¤л ў®§ўҐ¤Ґ­Ёп ў і
і ; б⥯Ґ­м. „«п ЇҐаҐў®¤  ЁбЇ®«м§гҐвбп ०Ё¬ ®ЄагЈ«Ґ­Ёп, і
і ; ¤Ґ©бвўгойЁ© ЇаЁ ўе®¤Ґ ў Ї®¤Їа®Ја ¬¬г. і
і ; і
і ; ‘«Ґ¤гойЁҐ ॣЁбвал ­Ґ ўЁ¤­л: і
і ; і
і ; eax ebx ecx edx esi edi eflags і
і ; і
і ; ЋЇаҐ¤Ґ«Ґ­ЁҐ б⥪ . і
і ; і
і ebp_save equ dword ptr [ebp] і
і es_save equ ebp_save + size ebp_save і
і return_ptr equ es_save + size es_save і
і power_ptr equ return_ptr + size return_ptr і
і field_size equ power_ptr + size power_ptr і
і size_ptr equ field_size + size size_ptr і
і string_ptr equ size_ptr + size size_ptr і
і denormal_ptr equ string_ptr + size string_ptr і
і і
і parms_size equ size power_ptr + size field_size + і
і & size size_ptr + size string_ptr + і
і & size denormal_ptr і
і ; і
і ; ЋЇаҐ¤Ґ«Ґ­ЁҐ ЁбЇ®«м§гҐ¬ле Є®­бв ­в. і
і ; і
і BCD_DIGITS equ 18 ; Љ®«ЁзҐбвў® жЁда ў ўҐ«ЁзЁ­Ґ вЁЇ  BCD і
і WORD_SIZE equ 4 і
і BCD_SIZE equ 10 і
і MINUS equ 1 ; ЋЇаҐ¤Ґ«Ґ­ЁҐ ўл¤ ў Ґ¬ле §­ зҐ­Ё© і
і NAN equ 4 ; ‚лЎа ­лҐ §¤Ґбм в®з­лҐ ўҐ«ЁзЁ­л - і
і INFINITY equ 6 ; ў ¦­л. Ћ­Ё ¤®«¦­л ᮮ⢥вбвў®ў вм і
і INDEFINITE equ 3 ; ў®§¬®¦­л¬ ўл¤ ў Ґ¬л¬ §­ зҐ­Ёп¬ Ё і
і PSEUDO_ZERO equ 8 ; вҐбвЁа®ў вмбп ў ⮬ ¦Ґ Ї®ап¤ЄҐ, Є Є і
і INVALID equ -2 ; Ї®Є § ­® ў нв®© Їа®Ја ¬¬Ґ. і
і ZERO equ -4 і
і DENORMAL equ -6 і
і UNNORMAL equ -8 і
і NORMAL equ 0 і
і EXACT equ 2 і
і ; і
і ; ЋЇаҐ¤Ґ«Ґ­ЁҐ Ї®«®¦Ґ­Ёп ўаҐ¬Ґ­­®© ®Ў« бвЁ еа ­Ґ­Ёп. і
і ; і
і power_two equ word ptr [ebp - WORD_SIZE] і
і bcd_value equ tbyte ptr power_two - BCD_SIZE і
і bcd-byte equ byte ptr bcd_value і
і fraction equ bcd_value і
і і
і lokal_size equ size power_two + size bcd_value і
і ; і
і ; ‚뤥«Ёвм ¤®бв в®з­л© ®ЎкҐ¬ б⥪  ¤«п і
і ; ўаҐ¬Ґ­­ле १г«мв в®ў. і
і ; і
і stack stackseg (lokal_size+6) ; ‚뤥«Ёвм Їа®бва ­бвў® б⥪  і
і ; ¤«п «®Є «м­ле ¤ ­­ле. і
і +1 $eject і
і і
і code segment public er і
і extrn power_table:qword і
і ; і
і ; Љ®­бв ­вл, ЁбЇ®«м§гҐ¬лҐ нв®© дг­ЄжЁҐ©. і
і ; і
і even ; ЋЇвЁ¬Ё§Ёа®ў вм ¤® 16 жЁда. і
і const10 dw 10 ; Џ®¤аҐЈг«Ёа®ў вм §­ зҐ­ЁҐ ¤«п і
і ; ; б«ЁиЄ®¬ Ў®«миЁе BCD. і
і ; і
і ; ЏҐаҐўҐбвЁ ЎЁвл C3, C2, C1 Ё C0 ў і
і ; §­ з йЁҐ д« ЈЁ Ё ўҐ«ЁзЁ­л, ЁбЇ®«м§гп і
і ; Їа®жҐ¤гаг tos_status. і
і ; і
і status_table db UNNORMAL, NAN, UNNORMAL+MINUS, і
і & NAN+MINUS, NORMAL, INFINITY, і
і & NORMAL+MINUS, INFINITY+MINUS, і
і & ZERO, INVALID, ZERO+MINUS, INVALID, і
і & DENORMAL, INVALID, DENORMAL+MINUS, INVALID і
і floting_to_ascii proc і
і і
і call tos_status ; Џ®б¬®ваҐвм ­  б®бв®п­ЁҐ ST(0) і

і ; і
і ; ‚§пвм ¤ҐбЄаЁЇв®а Ё§ в Ў«Ёжл і
і ; і
і movzx eax, status_table[eax] і
і cmp al,INVALID ; ST(0) Їгбв? і
і jne not_empty і
і ; і
і ; ST(0) - Їгбв! ‚®§ўа й Ґв §­ зҐ­ЁҐ б®бв®п­Ёп. і
і ; і
і ret parms_size і
і ; і
і ; “¤ «Ёвм ЎҐбЄ®­Ґз­®бвм Ё§ б⥪  Ё ўл©вЁ. і
і ; і
і found_infinity: і
і fstp st(0) ; Ћбв ўЁвм fstp і
і jmp short exit_proc і
і ; і
і ; „«Ё­  бва®ЄЁ б«ЁиЄ®¬ ¬ « ! і
і ; ‚л¤ Ґв Є®¤ ­Ґ¤®ЇгбвЁ¬®бвЁ. і
і ; і
і small_string: і
і mov al,INVALID і
і exit_proc: і
і leave ; ‚®ббв ­®ўЁвм б⥪ і
і і
і pop es і
і ret parms_size і
і ; і
і ; ‚ ST(0) ­ е®¤Ёвбп NaN Ё«Ё і
і ; ­Ґ®ЇаҐ¤Ґ«Ґ­­®бвм. ‘®еа ­Ёвм §­ зҐ­ЁҐ і
і ; ў Ї ¬пвЁ Ё Їа®б¬®ваҐвм ¤а®Ў­®Ґ Ї®«Ґ і
і ; ¤«п в®Ј®, зв®Ўл ®в«ЁзЁвм і
і ; ­Ґ®ЇаҐ¤Ґ«Ґ­­®бвм ®в ®Ўлз­®Ј® NaN. і
і ; і
і NAN_or_indefinite: і
і fstp fraction ; „«п Їа®ўҐаЄЁ - г¤ «Ёвм §­ зҐ­ЁҐ і
і ; Ё§ б⥪ . і
і test al,MINUS ; Џ®б¬®ваҐвм ЎЁв §­ Є . і
і fwait ; “ЎҐ¤Ёвмбп ў ўлЇ®«­Ґ­ЁЁ б®еа ­Ґ­Ёп. і
і jz exit_proc ; …б«Ё Ї®«®¦ЁвҐ«м­л© §­ Є, в® ­Ґ і
і ; ¬®¦Ґв Ўлвм ­Ґ®ЇаҐ¤Ґ«Ґ­­®бвмо. і
і і
і mov ebx,0C0000000H ; Џ®¤ ўЁвм ўҐае­ЁҐ 32 а §ап¤  ¤а®Ў­®© і
і ; з бвЁ. і
і і
і ; ‘а ў­Ёвм а §ап¤л 63-32 і
і sub ebx,dword ptr fraction + 4 і
і і
і ; ђ §ап¤л 31-0 ¤®«¦­л Ўлвм ­г«п¬Ё і
і or ebx,dword ptr fraction і
і jnz exit_proc і
і і
і ; “бв ­®ўЁвм ўл¤ ў Ґ¬®Ґ §­ зҐ­ЁҐ ­  і
і ; ­Ґ®ЇаҐ¤Ґ«Ґ­­®бвм і
і mov al,INDEFINITE і
і jmp exit_proc і
і ; і
і ; ‚뤥«Ёвм ¬Ґбв® ў б⥪Ґ ¤«п «®Є «м­ле ЇҐаҐ¬Ґ­­ле і
і ; Ё гбв ­®ўЁвм Ї а ¬Ґва  ¤аҐб жЁЁ. і
і ; і
і not_empty: і
і push es ; ‘®еа ­Ёвм а Ў®зЁ© ॣЁбва і
і enter local_size,0 ; “бв ­®ўЁвм  ¤аҐб жЁо б⥪  і
і і
і ; Џа®ўҐаЁвм, ¤®бв в®з­® «Ё ¬Ґбв  ў бва®ЄҐ і
і mov ecx,field_size і
і cmp ecx,2 і
і jl small_string і
і і
і dec ecx ; “бв ­®ўЁвм бЁ¬ў®« §­ Є  і
і і
і ; Џ®б¬®ваҐвм, ¬®¦Ґв Ўлвм бва®Є  б«ЁиЄ®¬ Ў®«ми п ¤«п вЁЇ  BCD і
і cmp ecx,BCD_DIGITS і
і jbe size_ok і
і і
і ; €­ зҐ гбв ­®ўЁвм ¬ ЄбЁ¬ «м­л© а §¬Ґа бва®ЄЁ і
і mov ecx,BCD_DIGITS і
і size_ok: і
і cmp al,INFINITY ; Њ®¦Ґв Ўлвм ЎҐбЄ®­Ґз­®бвм? і
і і
і ; ‚®§ўа вЁвм §­ зҐ­ЁҐ б®бв®п­Ёп ¤«п + Ё«Ё - ЎҐбЄ®­Ґз­®бвЁ і
і jge found_infinity і
і і

і cmp al,NAN ; Њ®¦Ґвм Ўлвм NaN Ё«Ё і
і jge NAN_or_indefinite ; ­Ґ®ЇаҐ¤Ґ«Ґ­­®бвм і
і і
і ; і
і ; “бв ­®ўЁвм ўл¤ ў Ґ¬®Ґ §­ зҐ­ЁҐ Ї® 㬮«з ­Ёо і
і ; Ё Їа®ўҐаЁвм, ­®а¬ «Ё§®ў ­® «Ё зЁб«®. і
і ; і
і fabs ; €бЇ®«м§®ў вм в®«мЄ® Ї®«®¦ЁвҐ«м­лҐ §­ зҐ­Ёп і
і ; і
і ; ЃЁв §­ Є  ў ॣЁбвॠAL ᮤҐа¦Ёв ЁбвЁ­­л© §­ Є ўҐ«ЁзЁ­л. і
і ; і
і xor edx,edx ; Џ®¤Ј®в®ўЁвм Є®­бв ­вг 0 і
і mov edi,denormal_ptr ; ЋЎ­г«Ёвм бзҐвзЁЄ ¤Ґ­®а¬ «м­ле зЁбҐ« і
і mov [edi],dx і
і mov ebx,power_ptr ; ЋЎ­г«Ёвм §­ зҐ­ЁҐ б⥯Ґ­Ё ¤ҐбпвЁ і
і mov [ebx],dx і
і mov dl,al і
і and dl,1 і
і add dl,EXACT і
і cmp al,ZERO ; Џа®ўҐаЁвм ­  ­®«м і
і jae convert_integer ; ЏҐаҐ©вЁ Їа®Ја ¬¬г ў®§ўҐ¤Ґ­Ёп ў і
і ; б⥯Ґ­м, Ґб«Ё §­ зҐ­ЁҐ а ў­® ­г«о. і
і і
і fstp fraction і
і fwait і
і mov al,bcd_byte + 7 і
і or byte ptr bcd_byte +7,80h і
і fld fraction і
і fxtract і
і test al,80h і
і jnz normal_value і
і і
і fld1 і
і fsub і
і ftst і
і fstsw ax і
і sahf і
і jnz set_unnormal_count і
і ; і
і ; Ќ ©¤Ґ­ ЇбҐў¤®-­®«м і
і ; і
і fldlg2 ; ЋжҐ­Ёвм б⥯Ґ­м ¤ҐбпвЁ і
і add dl,PSEUDO_ZERO - EXACT і
і fmulp st(2),st і
і fxch ; ‚§пвм б⥯Ґвм ¤ҐбпвЁ і
і fistp word ptr [ebx] ; “бв ­®ўЁвм б⥯Ґ­м ¤ҐбпвЁ і
і jmp convert_integer і
і і
і set_unnormal_count: і
і fxtract ; ‚§пвм Ёб室­го ¤а®Ўм, і
і ; Ё ­®а¬ «Ё§®ў вм. і
і fxch ; ‚§пвм бзҐвзЁЄ ­Ґ-­®а¬ «м­ле зЁбҐ« і
і fchs і
і fistp word ptr [edi] ; “бв ­®ўЁвм бзҐвзЁЄ і
і ; ­Ґ-­®а¬ «м­ле зЁбҐ« і
і і
і ; і
і ; ‚лзЁб«Ёвм ¤ҐбпвЁз­го ўҐ«ЁзЁ­г ў¬Ґб⥠б нвЁ¬ зЁб«®¬ і
і ; ў­гваЁ ®¤­®Ј® Ї®ап¤Є . і
і ; і
і ; ‚ᥣ¤  ЇаЁ ®ЄагЈ«Ґ­ЁЁ Ўг¤Ґв ЇаЁбгвбвў®ў вм ®иЁЎЄ  і
і ; Ё§-§  Ї®вҐаЁ в®з­®бвЁ. ‚ १г«мв вҐ, ¬л і
і ; ЇаҐ¤­ ¬ҐаҐ­­® ЇаЁ ўлзЁб«Ґ­ЁЁ Ї®ап¤Є  ­Ґ бв «Ё і
і ; а бб¬ ваЁў вм LOG10 ®в §­ зҐ­Ёп ¤а®ЎЁ. ’ Є Є Є і
і ; ¤а®Ўм ўбҐЈ¤  Ў®«миҐ Ё«Ё а ў­  1 Ё ¬Ґ­миҐ ¤ўге, в® і
і ; LOG10 ®в нв®© ¤а®ЎЁ ­Ґ Ё§¬Ґ­пҐв ®б­®ў­®© в®з­®бвЁ і
і ; дг­ЄжЁЁ. „«п в®Ј®, зв®Ўл Ї®«гзЁвм ¤ҐбпвЁз­л© і
і ; Ї®а冷Є ўҐ«ЁзЁ­л, ­ ¤® Їа®бв® г¬­®¦Ёвм б⥯Ґ­м і
і ; ¤ўге ­  LOG10(2) Ё ®ЄагЈ«Ёвм १г«мв в б і
і ; ®вбҐзҐ­ЁҐ¬ ¤® 楫®Ј®. і
і ; і
і normal_value: і
і fstp fraction ; „«п ¤ «м­Ґ©иҐЈ® ЁбЇ®«м§®ў ­Ёп і
і ; б®еа ­Ёвм Ї®«Ґ ¤а®ЎЁ. і
і fist power_twq ; ‘®еа ­Ёвм б⥯Ґ­м ¤ўге і
і fldlg2 ; ‚§пвм LOG10(2) і
і ; ’ҐЇҐам ¬®¦­® ЎҐ§®Ї б­® ЁбЇ®«м§®ў вм і
і ; power_two і
і fmul ; Џ®¤Ј®в®ўЁвм LOG10 ®в Ї®ап¤Є  зЁб«  і
і fistp word ptr [ebx] ; ‡¤Ґбм ¬®¦Ґв Ўлвм ЇаЁ¬Ґ­Ґ­ «оЎ®© і
і ; ०Ё¬ ®ЄагЈ«Ґ­Ёп і
і ; і
і ; Џа®ўҐаЁвм, зв®Ўл ўҐ«ЁзЁ­  зЁб«  і
і ; Ё­вҐаЇаҐвЁа®ў « бм Є Є 楫®Ґ. і

і ; і
і ; CX Ё¬ҐҐв ¬ ЄбЁ¬ «м­® Ї®§ў®«Ґ­­®Ґ Є®«ЁзҐбвў® ¤ҐбпвЁз­ле жЁда. і
і ; і
і fwait ; Ћ¦Ё¤ вм ¤®ЇгбвЁ¬®© б⥯Ґ­Ё ¤ҐбпвЁ і
і ; і
і ; ‚®§ўҐбвЁ ¤Ґбпвм ў б⥯Ґ­м ўҐ«ЁзЁ­л §­ зҐ­Ёп і
і ; і
і movsx si,word ptr [ebx] і
і sub esi,ecx ; Џ®¤Ј®в®ўЁвм ў AX ­Ґ®Ўе®¤Ё¬л© і
і ; Є®нддЁжЁҐ­в ¬ бив ЎЁа®ў ­Ёп. і
і ja adjust_result ; ЏҐаҐ©вЁ, Ґб«Ё зЁб«® ­Ґ Ї®¤е®¤Ёв і
і ; і
і ; —Ёб«® ¬Ґ¦¤г 1 Ё 10**(field_size - а §¬Ґа Ї®«п) і
і ; Џа®ўҐаЁвм ­  楫®зЁб«Ґ­­®бвм і
і ; і
і fild power_two ; ‚®ббв ­®ўЁвм ­ з «м­®Ґ §­ зҐ­ЁҐ і
і sub dl,NORMAL-EXACT ; ЏҐаҐўҐбвЁ ў в®з­®Ґ ўл¤ ў Ґ¬®Ґ і
і ; §­ зҐ­ЁҐ і
і fld farction і
і fscale ; Џ®¤Ј®в®ўЁвм Ї®«­го ўҐ«ЁзЁ­г, ў нв®© і
і ; Є®¬ ­¤Ґ ®­  ­Ґ Ї®авЁвбп і
і fst st(1) ; ‘Є®ЇЁа®ў вм §­ зҐ­ЁҐ ¤«п ба ў­Ґ­Ёп і
і frndint ; Џа®ўҐаЁвм ­  楫®зЁб«Ґ­­®бвм і
і fcomp ; ‘а ў­Ёвм §­ зҐ­Ёп і
і fstsw ax ; ‘®еа ­Ёвм б®бв®п­ЁҐ і
і sahf ; C3 = 1, §­ зЁв нв® Ўл«  楫®Ґ зЁб«® і
і і
і jnz convert_integer і
і і
і fstp st(0) ; “¤ «Ёвм ­ҐжҐ«®зЁб«Ґ­­®Ґ §­ зҐ­ЁҐ і
і add dl,NORMAL-EXACT ; ‚®ббв ­®ўЁвм ­ з «м­­®Ґ ўл¤ ў Ґ¬®Ґ і
і ; §­ зҐ­ЁҐ і
і ; і
і ; Њ бив ЎЁа®ў вм зЁб«® ў­гваЁ ¤Ё Ї §®­ , і
і ; Ї®§ў®«Ґ­­®Ј® д®а¬ в®¬ BCD. ЋЇҐа жЁп і
і ; ¬ бив ЎЁа®ў ­Ёп ўл¤ Ґв зЁб«® ў­гваЁ ®¤­®Ј® і
і ; ¤ҐбпвЁз­®Ј® Ї®ап¤Є  ўҐ«ЁзЁ­л ­ ЁЎ®«м襣® і
і ; ¤ҐбпвЁз­®Ј® зЁб« , ЇаҐ¤бв ўЁ¬®Ј® ¤«п ¤ ­­®© ¤«Ё­л і
і ; бва®ЄЁ. і
і ; і
і ; ‚Ґ«ЁзЁ­  б⥯Ґ­Ё ¤ҐбпвЁ ¤«п ¬ бив ЎЁа®ў ­Ёп і
і ; ­ е®¤Ёвбп ў ॣЁбвॠSI. і
і ; і
і adjust_result: і
і mov eax,esi ; Џ®¤Ј®в®ўЁвм ¤«п ў®§ўҐ¤Ґ­Ёп ў і
і ; б⥯Ґ­м і
і mov word ptr [ebx],ax ; “бв ­®ўЁвм ­ з «м­го ўҐ«ЁзЁ­г і
і ; б⥯Ґ­Ё ¤ҐбпвЁ і
і neg eax ; ‚лзҐбвм Ґ¤Ё­Ёжг ¤«п Є ¦¤®Ј® Ї®ап¤Є  і
і ; ўҐ«ЁзЁ­л, ­  Є®в®ал© ¬ бив ЎЁагҐвбп і
і ; §­ зҐ­ЁҐ. і
і call get_power_10 ; Љ®нддЁжЁҐ­в ¬ бив ЎЁа®ў ­Ёп і
і ; ЇаҐ¤бв ў«пҐвбп Є Є Ї®а冷Є Ё ¤а®Ўм. і
і fld fraction ; ‚§пвм ¤а®Ўм і
і fmul ; Љ®¬ЎЁ­Ёа®ў вм ¤а®ЎЁ і
і mov esi,ecx ; ‚®§ўҐбвЁ ¤Ґбпвм ў ¬ ЄбЁ¬ «м­го і
і ; б⥯Ґ­м і
і shl esi,3 ; „«п в®Ј®, зв®Ўл §­ зҐ­ЁҐ BCD і
і ; ўе®¤Ё«® ў бва®Єг і
і fild power_two ; Љ®¬ЎЁ­Ёа®ў вм б⥯Ґ­м ¤ўге і
і faddp st(2),st і
і fscale ; Џ®¤Ј®в®ўЁвм Ї®«­®Ґ §­ зҐ­ЁҐ, і
і ; Ї®а冷Є ®бв «бп ­Ґ ва®­гвл¬ і
і fstp st(1) ; “¤ «Ёвм Ї®а冷Є і
і ; і
і ; Џа®ўҐам⥠гбв ­®ў«Ґ­­®Ґ §­ зҐ­ЁҐ Ї® в Ў«ЁжҐ і
і ; в®з­ле б⥯Ґ­Ґ© ¤ҐбпвЁ. ‘㬬 а­лҐ ®иЁЎЄЁ ®жҐ­ЄЁ і
і ; ўҐ«ЁзЁ­л Ё б⥯Ґ­­®© дг­ЄжЁЁ ¬®Јгв ЇаЁўҐбвЁ Є і
і ; ⮬г, зв® §­ зҐ­ЁҐ ®¤­®Ј® Ї®ап¤Є  ўҐ«ЁзЁ­л Ўг¤Ґв і
і ; «ЁЎ® б«ЁиЄ®¬ ¬ «Ґ­мЄ®Ґ, «ЁЎ® б«ЁиЄ®¬ Ў®«м讥 ¤«п і
і ; Ї®«п вЁЇ  BCD. „«п гбва ­Ґ­Ёп нв®© Їа®Ў«Ґ¬л і
і ; Їа®вҐбвЁаг©вҐ Ї®«г祭­®Ґ §­ зҐ­ЁҐ - пў«пҐвбп «Ё і
і ; ®­® б«ЁиЄ®¬ Ў®«миЁ¬ Ё«Ё б«ЁиЄ®¬ ¬ «Ґ­мЄЁ¬. ‡ вҐ¬ і
і ; ®вॣ㫨аг©вҐ ҐЈ® Ё §­ зҐ­ЁҐ б⥯Ґ­Ё ¤ҐбпвЁ. і
і ; і
і test_power: і
і ; і
і ; ‘а ў­ЁвҐ б в®з­®© б⥯Ґ­мо. €бЇ®«м§г©вҐ б«Ґ¤гойго і
і ; б⥯Ґ­м ЇаЁ 㬥­м襭ЁЁ CX ­  Ґ¤Ё­Ёжг. і
і ; і
і fcom power_table[esi]+type power_table і
і fstsw ax ; ЌҐ ­ ¤® ¦¤ вм і
і sahf ; …б«Ё C3=C0=0, в® б«ЁиЄ®¬ Ў®«м讥 і
і jb test_for-small і

і fidiv const10 ; €­ зҐ гбв ­®ўЁвм §­ зҐ­ЁҐ і
і and dl,not EXACT ; “¤ «Ёвм д« Ј в®Ј®, зв® зЁб«® в®з­®Ґ і
і inc word ptr [ebx] ; “бв ­®ўЁвм §­ зҐ­ЁҐ б⥯Ґ­Ё ¤ҐбпвЁ і
і jmp short in_range ; ЏҐаҐўҐбвЁ §­ зҐ­ЁҐ ў 楫®Ґ вЁЇ  BCD і
і і
і test_for_small: і
і fcom power_table[esi] ; Џа®ўҐаЁвм ®в­®бЁвҐ«м­л© а §¬Ґа і
і і
і fstsw ax ; ЌҐ ¦¤ вм і
і sahf ; …б«Ё C0 = 0, в® ST(0) Ў®«миҐ Ё«Ё і
і ; а ўҐ­ ­Ё¦иҐ© Ја ­ЁжҐ і
і jc in_range ; ЏҐаҐўҐбвЁ §­ зҐ­ЁҐ ў 楫®Ґ вЁЇ  BCD і
і fimul const10 ; Џ®¤®Ј­ вм §­ зҐ­ЁҐ Ї®¤ ¤Ё Ї §®­ і
і dec word ptr [ebx] ; Џ®¤®Ўа вм §­ зҐ­ЁҐ б⥯Ґ­Ё ¤ҐбпвЁ і
і in_range: і
і frndint ; Џ®¤Ј®в®ўЁвм 楫®Ґ §­ зҐ­ЁҐ і
і ; і
і ; “⢥তҐ­ЁҐ: 0 <= TOS <= 999,999,999,999,999,999 і
і ; —Ёб«® TOS Ўг¤Ґв в®з­® ЇаҐ¤бв ў«Ґ­® і
і ; 18-о жЁда ¬Ё ў д®а¬ вҐ BCD. і
і ; і
і convert_integer: і
і fbstp bcd_value ; ‘®еа ­Ёвм зЁб«® ў д®а¬ вҐ BCD і
і ; і
і ; ЏаЁ б®еа ­Ґ­ЁЁ д®а¬ в  BCD гбв ­®ўЁвм ॣЁбвал і
і ; ¤«п ЇҐаҐў®¤  ў ASCII ўЁ¤. і
і ; і
і mov esi,BCD_SIZE-2 ; €­ЁжЁ «Ё§Ёа®ў вм §­ зҐ­ЁҐ і
і ; Ё­¤ҐЄб  BCD і
і mov cx,0f04h ; “бв ­®ўЁвм бзҐвзЁЄ б¤ўЁЈ  Ё ¬ бЄг і
і mov ebx,1 ; “бв ­®ўЁвм ­ з «м­л© а §¬Ґа ASCII і
і ; Ї®«п ¤«п §­ Є  і
і mov edi,string_ptr ; ‚§пвм  ¤аҐб ­ з «  ASCII бва®ЄЁ і
і mov ax,ds ; ‘Є®ЇЁа®ў вм DS ў ES і
і mov es,ax і
і cld ; “бв ­®ўЁвм ०Ё¬  ўв®¬ вЁзҐбЄ®Ј® і
і ; ¤®Ў ў«Ґ­Ёп Ґ¤Ё­Ёжл і
і mov al,'+' ; ЋзЁбвЁвм Ї®«Ґ §­ Є  і
і test dl,MINUS ; Џа®ўҐаЁвм ­  ®ваЁж вҐ«м­®Ґ §­ зҐ­ЁҐ і
і jz positive_result і
і і
і mov al,'-' і
і positive_result: і
і stosb ; “бв ­®ўЁвм гЄ § вҐ«м бва®ЄЁ ­  і
і ; Ї®б«Ґ¤­Ё© §­ Є і
і and dl,not MINUS ; ‚лЄ«озЁвм ЎЁв §­ Є  і
і fwait ; Ћ¦Ё¤ вм ®Є®­з ­Ёп Є®¬ ­¤л fbstp і
і ; і
і ; €бЇ®«м§гҐ¬лҐ ॣЁбвал: і
і ; і
і ; AH: Ў ©в б® §­ зҐ­ЁҐ¬ вЁЇ  BCD і
і ; AL: §­ зҐ­ЁҐ бва®ЄЁ ASCII і
і ; DX: ў®§ўа й Ґ¬®Ґ §­ зҐ­ЁҐ і
і ; CH: ¬ бЄ  BCD = 0fh і
і ; CL: бзҐвзЁЄ б¤ўЁЈ  BCD = 4 і
і ; BX: иЁаЁ­  Ї®«п бва®ЄЁ ASCII і
і ; ESI: Ё­¤ҐЄб Ї®«п BCD і
і ; DI: гЄ § вҐ«м Ї®«п бва®ЄЁ BCD і
і ; DS, ES:  ¤аҐб ᥣ¬Ґ­в  бва®ЄЁ ASCII і
і ; і
і ; “¤ «Ёвм ­ з «м­лҐ ­г«Ё Ё§ зЁб« . і
і ; і
і ; і
і skip_leading_zeroes: і
і mov ah,bcd_byte[esi] ; ‚§пвм Ў ©в BCD і
і mov al,ah ; ‘Є®ЇЁа®ў вм §­ зҐ­ЁҐ і
і shr al,cl ; ‚§пвм ўҐае­оо Ї® Ї®ап¤Єг жЁдаг і
і and al,0fh ; “бв ­®ўЁвм д« Ј ­г«п і
і jnz enter_odd ; ‚л©вЁ Ё§ жЁЄ« , Ґб«Ё ў ­ з «Ґ і
і ; ®Ў­ а㦥­л ­Ґ ­г«Ё і
і і
і mov al,ah ; ‚§пвм б­®ў  Ў ©в BCD і
і and al,0fh ; ‚§пвм ­Ё¦­оо Ї® Ї®ап¤Єг жЁдаг і
і jnz enter-even ; ‚л©вЁ Ё§ жЁЄ« , Ґб«Ё ®Ў­ а㦥­л і
і ; ­Ґ­г«ҐўлҐ жЁдал і
і і
і dec esi ; “¬Ґ­миЁвм Ё­¤ҐЄб BCD і
і jns skip_leading_zeroes і
і ; і
і ; ‚бп ¬ ­вЁбб  б®бв®Ёв Ё§ ­г«Ґ© і
і ; і
і mov al,'0' ; “бв ­®ўЁвм ­ з «м­л© ­®«м і
і stosb і

і inc ebx ; “ўҐ«ЁзЁвм ¤«Ё­г бва®ЄЁ і
і jmp short exit_with_value і
і ; і
і ; ’ҐЇҐам а биЁа塞 бва®Єг жЁда ¬Ё ®в і
і ; 0 ¤® 9 Ї® ®¤­®© жЁдॠ­  Ў ©в і
і ; і
і digit_loop: і
і mov ah,bcd_byte[esi] ; ‚§пвм Ў ©в BCD і
і mov al,ah і
і shr al,cl ; ‚§пвм ўҐае­оо Ї® Ї®ап¤Єг жЁдаг і
і enter_odd: і
і add al,'0' ; ЏҐаҐўҐбвЁ ў ASCII і
і stosb ; ‡ ­ҐбвЁ жЁдаг ў бва®Єг ASCII і
і mov al,ah ; ‚§пвм ­Ё¦­оо Ї® Ї®ап¤Єг жЁдаг і
і and al,0fh і
і inc ebx ; “ўҐ«ЁзЁвм бзҐвзЁЄ а §¬Ґа  Ї®«п і
і enter-even: і
і add al,'0' ; ЏҐаҐўҐбвЁ ў ASCII і
і stosb ; ‡ ­ҐбвЁ жЁдаг ў бва®Єг ASCII і
і inc ebx ; “ўҐ«ЁзЁвм бзҐвзЁЄ а §¬Ґа  Ї®«п і
і dec esi ; ЏҐаҐ©вЁ Є б«Ґ¤го饬㠡 ©вг BCD і
і jns digit_loop і
і ; і
і ; ЏҐаҐў®¤ § Є®­зҐ­. “бв ­®ўЁвм а §¬Ґа і
і ; бва®ЄЁ Ё ®бв в®Є і
і ; і
і exit_with_value: і
і mov edi,size_ptr і
і mov word ptr [edi],bx і
і mov eax,edx ; “бв ­®ўЁвм ўл¤ ў Ґ¬®Ґ §­ зҐ­ЁҐ і
і jmp exit_proc і
і і
і floating_to_ascii endp і
і code ends і
і end і
і і
і і
і +1 $title(‚лзЁб«Ёвм §­ зҐ­ЁҐ 10**AX) і
і і
і ; ќв  Ї®¤Їа®Ја ¬¬  ўлзЁб«пҐв §­ зҐ­ЁҐ б⥯Ґ­Ё і
і ; 10**EAX. ’®з­л© १г«мв в ўл¤ Ґвбп ¤«п §­ зҐ­Ё© ў і
і ; ¤Ё Ї §®­Ґ 0 <= EAX < 19. ‚ᥠॣЁбвал Їа®§а з­л і
і ; Ё §­ зҐ­ЁҐ ўл¤ Ґвбп ў TOS Є Є ¤ў  зЁб« : Ї®а冷Є і
і ; ў ST(1) Ё ¤а®Ўм ў ST(0). ‚Ґ«ЁзЁ­  Ї®ап¤Є  ¬®¦Ґв і
і ; ЇаҐўли вм ­ ЁЎ®«миЁ© Ї®а冷Є зЁб«  ў а биЁаҐ­­®¬ і
і ; ўҐйҐб⢥­­®¬ д®а¬ вҐ. ‚ Їа®Ја ¬¬Ґ ЁбЇ®«м§говбп і
і ; ваЁ б⥪®ўле ॣЁбва . і
і ; і
і name get_power_10 і
і public get_power_10, power_table і
і і
і stack stackseg 8 і
і і
і code segment public er і
і ; і
і ; €бЇ®«м§®ў вм в®з­лҐ §­ зҐ­Ёп ®в 1.0 ¤® 1E18. і
і ; і
і even ; ЋЇвЁ¬Ё§Ёа®ў вм 16-вЁ ЎЁв®ўл© ¤®бвгЇ і
і power_table dq 1.0,1e1,1e2,1e3 і
і і
і dq 1e4,1e5,1e6,1e7 і
і і
і dq 1e8,1e9,1e10,1e11 і
і і
і dq 1e12,1e13,1e14,1e15 і
і і
і dq 1e16,1e17,1e18 і
і і
і get_power_10 proc і
і cmp eax,18 ; Џа®ўҐаЁвм ¤Ё Ї §®­ 0 <= AX < 19 і
і ja out_of_range і
і і
і fld power_table[eax*8] ; ‚§пвм в®з­®Ґ §­ зҐ­ЁҐ і
і fxtract ; Ћв¤Ґ«Ёвм б⥯Ґ­м Ё і
і ; ¤а®Ў­го з бвм і
і ret ; Ћбв ўЁвм fxtract і
і ; і
і ; ‚лзЁб«Ёвм §­ зҐ­ЁҐ, ЁбЇ®«м§гп Є®¬ ­¤г ў®§ўҐ¤Ґ­Ёп і
і ; ў б⥯Ґ­м. €бЇ®«м§говбп б«Ґ¤гойЁҐ ᮮ⭮襭Ёп: і
і ; і
і ; 10**X = 2**(log2(10)*X) і
і ; 2**(I+F) = 2**I * 2**F і
і ; і

і ; …б«Ё ST(1) = I Ё ST(0) = 2**F, в® Є®¬ ­¤  fscale і
і ; ўл¤ Ґв 2**(I+F). і
і ; і
і out_of_range: і
і і
і fldl2t ; TOS = LOG2(10) і
і enter 4,0 і
і і
і ; ‘®еа ­Ёвм §­ зҐ­ЁҐ б⥯Ґ­Ё ¤ҐбпвЁ, P і
і ; і
і mov [ebp-4],eax і
і і
і ; TOS, X = LOG2(10)*P = LOG2(10**P) і
і ; і
і fimul dword ptr [ebp-4] і
і fld1 ; “бв ­®ўЁвм TOS = -1.0 і
і fchs і
і fld st(1) ; ‘Є®ЇЁа®ў вм §­ зҐ­ЁҐ б⥯Ґ­Ё Ї® і
і ; ®б­®ў ­Ёо ¤ў  і
і frndint ; TOS = I; -ЎҐбЄ®­Ґз­®бвм < I <= X, і
і ; Ј¤Ґ I - 楫®Ґ і
і ; ђҐ¦Ё¬ ®ЄагЈ«Ґ­Ёп ­Ґ Ё¬ҐҐв §­ зҐ­Ёп і
і fxch st(2) ; TOS = X, ST(1) = -1.0 і
і ; ST(2) = I і
і fsub st,st(2) ; TOS, F = X-I: і
і ; -1.0 < TOS <= 1.0 і
і і
і ; ‚®ббв ­®ўЁвм ­ з «м­л© ०Ё¬ гЇа ў«Ґ­Ёп в®з­®бвмо і
і pop eax і
і f2xm1 ; TOS = 2**(F) - 1.0 і
і leave ; ‚®ббв ­®ўЁвм б⥪ і
і fsubr ; Џ®¤Ј®в®ўЁвм 2**(F) і
і ret ; Ћбв ўЁвм fsubr і
і і
і get_power_10 endp і
і і
і code ends і
і end і
і і
і +1 $title(ЋЇаҐ¤Ґ«Ґ­ЁҐ ᮤҐа¦Ё¬®Ј® ॣЁбва  TOS) і
і ; і
і ; ќв  Ї®¤Їа®Ја ¬¬  ўл¤ Ґв §­ зҐ­ЁҐ ®в 0 ¤® 15 ў і
і ; ॣЁбва EAX ў ᮮ⢥вбвўЁЁ б ᮤҐа¦ ­ЁҐ¬ ўҐаиЁ­л і
і ; б⥪  FPU. ‚ᥠॣЁбвал Їа®§а з­л, Ї®н⮬㠮訡ЄЁ і
і ; ЁбЄ«о祭л. ‚л¤ ў Ґ¬®Ґ §­ зҐ­ЁҐ ᮮ⢥вбвўгҐв і
і ; ЎЁв ¬ C3, C2, C1 Ё C0 Є®¬ ­¤л FXAM. і
і ; і
і name tos_status і
і public tos_status і
і і
і stack stackseg 6 і
і і
і code segment public er і
і і
і tos_status proc і
і fxam ; ‚§пвм б®бв®п­ЁҐ ॣЁбва  TOS і
і fstsw ax ; ‚§пвм ⥪г饥 б®бв®п­ЁҐ і
і mov al,ah ; Џ®«®¦Ёвм ЎЁвл 10-8 ў ЎЁвл 2-0 і
і and eax,4007h ; Њ бЄЁа®ў вм ЎЁвл C3, C2, C1 Ё C0 і
і shr ah,3 ; Џ®«®¦Ёвм ЎЁв C3 ў ЎЁв 11 і
і or al,ah ; Џ®«®¦Ёвм ЎЁв C3 ў ЎЁв 3 і
і mov ah,0 ; ЋзЁбвЁвм ў®§ўа й Ґ¬®Ґ §­ зҐ­ЁҐ і
і ret і
і і
і tos_status endp і
і і
і code ends і
і end і
і і
і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ


`¤`Є20.3.3 ‘ЇҐжЁ «м­лҐ Є®¬ ­¤л `*

”г­ЄжЁЁ ®ЇҐаЁагов а §«Ёз­л¬Ё зЁб«®ўл¬Ё Є®¬ ­¤ ¬Ё, вЁЇ ¬Ё ¤ ­­ле Ё
гЇа ў«пов в®з­®бвмо. Џ®Є § ­­лҐ Є®¬ ­¤л пў«повбп Є®¬ ­¤ ¬Ё ¤«п
 ўв®¬ вЁзҐбЄ®Ј® ЇҐаҐў®¤  зЁбҐ« ў BCD ўЁ¤ (¤ў®Ёз­®- ¤ҐбпвЁз­л© Є®¤). ЏаЁ
н⮬ ўлзЁб«пҐвбп 10-вЁ Єа в­®Ґ §­ зҐ­ЁҐ 楫®зЁб«Ґ­­®© ўҐ«ЁзЁ­л, ®ЇҐа жЁЁ
ўлЇ®«­повбп ®¤­®ўаҐ¬Ґ­­®, гбв ­ ў«Ёў Ґвбп бЁ­еа®­Ё§ жЁп ¤ ­­ле Ё
ЁбЇ®«м§гҐвбп ®аЁҐ­вЁа®ў ­­®Ґ ®ЄагЈ«Ґ­ЁҐ ў ¬®¤г«Ґ ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б
Ї« ў о饩 в®зЄ®©.

ЃҐ§ вЁЇ  ¤ ­­ле а биЁаҐ­­®© в®з­®бвЁ Ё ўбв஥­­®© нЄбЇ®­Ґ­жЁ «м­®©
дг­ЄжЁЁ, ­Ґ ¬®¦Ґв Ўлвм ¤®бвЁЈ­гв  ¤ў®©­ п в®з­®бвм нв®© дг­ЄжЁЁ ЇаЁ
бЄ®а®бвЁ Ё а §¬ҐаҐ ЇаЁўҐ¤Ґ­­®Ј® ЇаЁ¬Ґа .
”г­ЄжЁп Ў §ЁагҐвбп ­  зЁб«®ў®¬ вЁЇҐ ¤ ­­ле BCD ¤«п ЇҐаҐў®¤  Ё§ ¤ў®Ёз­®Ј® б
Ї« ў о饩 в®зЄ®© ў ¤ҐбпвЁз­®Ґ. Ћб­®ў­ п а Ў®в  § Є«оз Ґвбп ў
¬ бив ЎЁа®ў ­ЁЁ §­ зҐ­Ёп б Ї« ў о饩 в®зЄ®© ¤® ЇаЁҐ¬«Ґ¬®Ј® ®Ја ­ЁзҐ­­®Ј®
¤Ё Ї §®­  §­ зҐ­Ё© вЁЇ  BCD. „«п в®, зв®Ўл ­ ЇҐз в вм १г«мв в Ё§ 9-вЁ
жЁда, ­Ґ®Ўе®¤Ё¬® в®з­® Їа®ўҐбвЁ ¬ бив ЎЁа®ў ­ЁҐ ¤ ­­®© ўҐ«ЁзЁ­л ў 楫®Ґ
¬Ґ¦¤г 10**(8) Ё 10**(9). Ќ ЇаЁ¬Ґа, зЁб«® +0.123456789 вॡгҐв Є®нддЁжЁҐ­в 
¬ бив ЎЁа®ў ­Ёп Ї®ап¤Є  10**(9) ¤«п в®Ј®, зв®Ўл Ї®«гзЁвм зЁб«®
+123456789.0, Є®в®а®Ґ ¬®¦Ґв еа ­Ёвмбп ў 9-вЁ жЁда е вЁЇ  BCD. Љ®нддЁжЁҐ­в
¬ бив ЎЁа®ў ­Ёп ¤®«¦Ґ­ Ўлвм в®з­®© б⥯Ґ­мо 10-вЁ ¤«п в®Ј®, зв®Ўл
ЇаҐ¤®вўа вЁвм Ё§¬Ґ­Ґ­Ёп жЁда ЇаЁ ЇҐз вЁ.
ќвЁ Ї®¤Їа®Ја ¬¬л ¤®«¦­л Їа ўЁ«м­® ЇҐаҐў®¤Ёвм ўбҐ §­ зҐ­Ёп, в®з­®
ЇаҐ¤бв ўЁ¬лҐ ў ¤ҐбпвЁз­®¬ ўЁ¤Ґ, ў Ї®«Ґ, § ¤ ­­®Ј® а §¬Ґа . –Ґ«®зЁб«Ґ­­лҐ
§­ зҐ­Ёп, Є®в®алҐ Ї®¤е®¤пв Ї®¤ ¤ ­­л© а §¬Ґа бва®ЄЁ, ­Ґв ­Ґ®Ўе®¤Ё¬®бвЁ
¬ бив ЎЁа®ў вм,   ¬®¦­® ба §г б®еа ­пвм ў д®а¬Ґ BCD. ЌҐжҐ«®зЁб«Ґ­­лҐ
§­ зҐ­Ёп, в®з­® ЇаҐ¤бв ўЁ¬лҐ ў ¤ҐбпвЁз­®¬ ўЁ¤Ґ ў ЇаҐ¤Ґ« е а §¬Ґа  бва®ЄЁ,
в Є¦Ґ ЇҐаҐў®¤пвбп в®з­®. Ќ ЇаЁ¬Ґа, зЁб«® 0.125 в®з­® ЇаҐ¤бв ўЁ¬® Є Є ў
¤ў®Ёз­®¬ ўЁ¤Ґ, в Є Ё ў ¤ҐбпвЁз­®¬. „«п в®Ј®, зв®Ўл ЇҐаҐўҐбвЁ нв® §­ зҐ­ЁҐ
б Ї« ў о饩 в®зЄ®© ў ¤ҐбпвЁз­л© ўЁ¤, ­ ¤® ўлЎа вм Є®нддЁжЁҐ­в
¬ бив ЎЁа®ў ­Ёп 1000. ‚ १г«мв вҐ Ї®«гзЁ¬ зЁб«® 125. ЏаЁ ¬ бив ЎЁа®ў ­ЁЁ
ўҐ«ЁзЁ­, дг­ЄжЁп ¤®«¦­  ®бв ў«пвм б«Ґ¤ в ¬, Ј¤Ґ Ўг¤Ґв а бЇ®« Ј вмбп
¤ҐбпвЁз­ п в®зЄ  ў Є®­Ґз­®¬ ¤ҐбпвЁз­®¬ §­ зҐ­ЁЁ.


`¤`Є20.3.4 ЋЇЁб ­ЁҐ ®ЇҐа жЁЁ`*

ЏҐаҐў®¤ зЁб«  б Ї« ў о饩 в®зЄ®© ў ¤ҐбпвЁз­л© ASCII ўЁ¤ Їа®ў®¤Ёвбп ў ваЁ
®б­®ў­ле и Ј : ®ЇаҐ¤Ґ«Ґ­ЁҐ ўҐ«ЁзЁ­л зЁб« , ¬ бив ЎЁа®ў ­ЁҐ ҐЈ® ¤«п
ЇаҐ¤бв ў«Ґ­Ёп ў ўЁ¤Ґ BCD Ё ЇҐаҐў®¤ ¤ ­­ле вЁЇ  BCD ў ¤ҐбпвЁз­го бЁ¬ў®«м­го
ASCII § ЇЁбм.
ЋЇаҐ¤Ґ«Ґ­ЁҐ ўҐ«ЁзЁ­л १г«мв в  вॡгҐв ­ е®¦¤Ґ­Ёп в Є®Ј® §­ зҐ­Ёп зЁб« 
X, ЇаЁ Є®в®а®¬ ­ иҐ зЁб«® Ўл«® Ўл ЇаҐ¤бв ўЁ¬® ў ўЁ¤Ґ I x 10**(X), Ј¤Ґ 1.0
у I < 10.0. Њ бив ЎЁа®ў ­ЁҐ зЁб«  вॡгҐв ҐЈ® г¬­®¦Ґ­Ёп ­  Є®нддЁжЁҐ­в
¬ бив ЎЁа®ў ­Ёп 10**(S) в Є, зв®Ўл १г«мв в Ўл« 楫л¬, ­Ґ ᮤҐа¦ йЁ¬
¤ҐбпвЁз­ле жЁда Ў®«миҐ, 祬 ®вўҐ¤Ґ­® ¤«п нв®Ј® ¬Ґбв  ў бва®ЄҐ бЁ¬ў®«®ў
ASCII.
Џ®б«Ґ ¬ бив ЎЁа®ў ­Ёп, ®ЄагЈ«Ґ­Ёп Ё ЇҐаҐў®¤  ў вЁЇ BCD зЁб«®
ЇаҐ¤бв ў«пҐвбп ў д®а¬Ґ, 㤮Ў­®© ¤«п ЇҐаҐў®¤  ў ¤ҐбпвЁз­л© ASCII ўЁ¤ «оЎл¬
Їа®Ја ¬¬­л¬ ®ЎҐбЇҐзҐ­ЁҐ¬.
ђҐ «Ё§ жЁп ўбҐе нвЁе ваҐе и Ј®ў вॡгҐв ЇаҐ¤Ґ«м­®Ј® ў­Ё¬ ­Ёп Є ¤Ґв «п¬.
„«п ­ з «  ®Ўа вЁвҐ ў­Ё¬ ­ЁҐ, зв® ­Ґ Є ¦¤ п ўҐ«ЁзЁ­  б Ї« ў о饩 в®зЄ®©
Ё¬ҐҐв зЁб«®ў®Ґ §­ зҐ­ЁҐ. Џ®¤Їа®Ја ¬¬®© ЇҐаҐў®¤  ¬®Јгв Ўлвм ўбваҐзҐ­л Ё
в ЄЁҐ ўҐ«ЁзЁ­л Є Є ЎҐбЄ®­Ґз­®бвм, ­Ґ®ЇаҐ¤Ґ«Ґ­­®бвм Ё«Ё NaN. Џ®н⮬г нв 
Ї®¤Їа®Ја ¬¬  ¤®«¦­  㬥вм ®Ї®§­ ў вм нвЁ ўҐ«ЁзЁ­л Ё ®¤­®§­ з­® ®ЇаҐ¤Ґ«пвм
Ёе.
’ Є¦Ґ ЇаЁбгвбвўгов ®б®ЎлҐ б«гз Ё зЁб«®ўле §­ зҐ­Ё©. ЌҐ­®а¬ «м­лҐ ўҐ«ЁзЁ­л
Ё¬Ґов зЁб«®ў®Ґ §­ зҐ­ЁҐ Ё ¤®«¦­л Ўлвм ®в«ЁзЁ¬л дг­ЄжЁҐ©, в Є Є Є ®­Ё
гЄ §лў ов ­  в®, зв® Ўл«  Ї®вҐап­  в®з­®бвм ў Їа®жҐбᥠЇа®ўҐ¤Ґ­Ёп
ЇаҐ¤иҐбвўгойЁе ўлзЁб«Ґ­Ё©.
ЋЇаҐ¤Ґ«Ёў, зв® зЁб«® Ё¬ҐҐв зЁб«®ў®Ґ §­ зҐ­ЁҐ Ё ­®а¬ «Ё§®ў ­® (ЇаЁ
­Ґ®Ўе®¤Ё¬®бвЁ гбв ­®ўЄ  ᮮ⢥вбвўгойЁе д« Ј®ў бЁЈ­ «Ё§ЁагҐв ўл§ў ­­®©
Їа®Ја ¬¬Ґ, зв® нв® ­Ґ­®а¬ «м­®Ґ зЁб«®), ¬®¦­® ¬ бив ЎЁа®ў вм ўҐ«ЁзЁ­г ў
¤Ё Ї §®­Ґ вЁЇ  BCD.


`¤`Є20.3.5 Њ бив ЎЁа®ў ­ЁҐ ўҐ«ЁзЁ­ `*

„«п в®Ј®, зв®Ўл ¬ бив ЎЁа®ў вм зЁб«®, ­Ґ®Ўе®¤Ё¬® ®ЇаҐ¤Ґ«Ёвм ҐЈ® ўҐ«ЁзЁ­г.
„®бв в®з­® ўлзЁб«Ёвм ўҐ«ЁзЁ­г б в®з­®бвмо ¤® 1 Ґ¤Ё­Ёжл Ё«Ё ЇаЁ Єа в­®¬ 10
Є®нддЁжЁҐ­вҐ, г¬­®¦Ґ­­л¬ ­  вॡ㥬го ўҐ«ЁзЁ­г. Џ®б«Ґ ¬ бив ЎЁа®ў ­Ёп
зЁб«  Їа®ў®¤Ёвбп Їа®ўҐаЄ  ¤«п в®Ј®, зв®Ўл Ї®б¬®ваҐвм Ї®Ї « «Ё १г«мв в ў
®¦Ё¤ Ґ¬л© ¤Ё Ї §®­. …б«Ё ­Ґв, ⮠१г«мв в ¬®¦Ґв Ўлвм ЁбЇа ў«Ґ­ ­  ®¤Ё­
¤ҐбпвЁз­л© Ї®а冷Є ўўҐае Ё«Ё ў­Ё§ ®в вॡ㥬®© ўҐ«ЁзЁ­л. Џ®¤бв஥з­л© вҐбв
Ї®б«Ґ ¬ бив ЎЁа®ў ­Ёп ­Ґ®Ўе®¤Ё¬ ¤«п гбва ­Ґ­Ёп ­ҐЁ§ЎҐ¦­®© ­Ґв®з­®бвЁ ў
¬ бив ЎЁа®ў ­­®¬ §­ зҐ­ЁЁ.
’ Є Є Є ®жҐ­Є  §­ зҐ­Ёп ¤«п Є®нддЁжЁҐ­в  ¬ бив ЎЁа®ў ­Ёп ¤®«¦­  Ўлвм
¤®бв в®з­® Ў«Ё§Є®©, в® ЁбЇ®«м§гҐвбп Ўлбвал© ЇаЁҐ¬ ¬ бив ЎЁа®ў ­Ёп.
‚Ґ«ЁзЁ­  ®жҐ­Ёў Ґвбп г¬­®¦Ґ­ЁҐ¬ б⥯Ґ­Ё 2, Є®в®а п ЇаҐ¤бв ў«пҐв Ё§ ᥡп
­Ґб¬ҐйҐ­­л© Ї®а冷Є зЁб«  б Ї« ў о饩 в®зЄ®©, ᮮ⢥вб⢥­­® б зЁб«®¬
log(10) ®в 2. ЋЄагЈ«Ґ­ЁҐ १г«мв в  ¤® 楫®Ј® ¤ Ґв ®жҐ­Єг ¤®бв в®з­®©
в®з­®бвЁ. €Ј­®аЁагп ¤а®ЎЁ, §­ зҐ­ЁҐ ў १г«мв вҐ ¬®¦Ґв Ё¬Ґвм ¬ ЄбЁ¬ «м­го
®иЁЎЄг 0.32.
€бЇ®«м§гп §­ зҐ­ЁҐ ўҐ«ЁзЁ­л Ё а §¬Ґа зЁб«®ў®© бва®ЄЁ, ¬®¦­® ўлзЁб«Ёвм
Є®нддЁжЁҐ­в ¬ бив ЎЁа®ў ­Ёп. ‚ Їа®жҐ¤гॠЇҐаҐў®¤  зЁб«  ўлзЁб«Ґ­ЁҐ
Є®нддЁжЁҐ­в  ¬ бив ЎЁа®ў ­Ёп пў«пҐвбп б ¬®© ­Ґв®з­®© ®ЇҐа жЁҐ©. „«п нв®Ј®
ЁбЇ®«м§гҐвбп ᮮ⭮襭ЁҐ 10**(X) = 2**(X * log(10) 2) Ё Є®¬ ­¤  F2XM1.
‚ ᮮ⢥вбвўЁЁ б ®Ја ­ЁзҐ­Ёп¬Ё ­  ¤Ё Ї §®­ §­ зҐ­Ё©, а §аҐиҐ­­ле Є®¬ ­¤®©
F2XM1, §­ зҐ­ЁҐ б⥯Ґ­Ё 2 а §ЎЁў Ґвбп ­  楫го Ё ¤а®Ў­го Є®¬Ї®­Ґ­вл.
‘®®в­®иҐ­ЁҐ 2**(I + F) = 2**(I) x 2**(F) Ї®§ў®«пҐв ЁбЇ®«м§®ў вм Ё­бвагЄжЁо
FSCALE ¤«п в®Ј®, зв®Ўл ЇҐаҐЄ®¬ЎЁ­Ёа®ў вм §­ зҐ­ЁҐ 2**(F), ўлзЁб«Ґ­­®Ґ
Є®¬ ­¤®© F2XM1, Ё з бвм 2**(I).

`¤`Є20.3.5.1 ЌҐв®з­®бвм ЇаЁ ¬ бив ЎЁа®ў ­ЁЁ`*

ЏаЁ ўлзЁб«Ґ­ЁЁ Є®нддЁжЁҐ­в  ¬ бив ЎЁа®ў ­Ёп ў®§­ЁЄ Ґв ­Ґв®з­®бвм Ё§-§ 
®бв в®з­ле ­г«Ґ©, Ї®¬ҐйҐ­­ле ў ¤а®Ў­®© ўҐ«ЁзЁ­Ґ б⥯Ґ­Ё 2 ЇаЁ ®в¤Ґ«Ґ­ЁЁ
§­ зЁ¬ле ЎЁв®ў 楫®© з бвЁ. „«п Є ¦¤®Ј® 楫®Ј® §­ зЁ¬®Ј® ЎЁв  ў §­ зҐ­ЁЁ
б⥯Ґ­Ё 2, ®в¤Ґ«Ґ­­ле ®в ¤а®Ў­ле ЎЁв®ў, ў ¤а®Ў­®© з бвЁ вҐапҐвбп ®¤Ё­ ЎЁв
в®з­®бвЁ ЇаЁ § Ї®«­Ґ­ЁЁ ­г«п¬Ё ¬Ґ­ҐҐ §­ з йЁе ЎЁв®ў.
„® 14 ЎЁв®ў ¬®¦Ґв Ўлвм Ї®вҐап­® ў ¤а®Ў­®© з бвЁ, в Є Є Є ­ ЁЎ®«ми п
¤®ЇгбвЁ¬ п ўҐ«ЁзЁ­  Ї®ап¤Є  зЁб«  б Ї« ў о饩 в®зЄ®© б®бв ў«пҐв 2**(14) -
1. ќвЁ ЎЁвл ­ҐЇ®б।б⢥­­® Ё 㬥­ми ов в®з­®бвм ўлзЁб«Ґ­Ёп Є®нддЁжЁҐ­в 
¬ бив ЎЁа®ў ­Ёп, 祬 Ё ўл§лў ов 㬥­м襭ЁҐ в®з­®бвЁ б ¬®Ј® §­ зҐ­Ёп зЁб« .
„«п зЁбҐ« ў ¤Ё Ї §®­Ґ 10**(с30) ¬ ЄбЁ¬ «м­®Ґ зЁб«® ЎЁв®ў в®з­®бвЁ,
Ї®вҐап­­ле ЇаЁ ўлЇ®«­Ґ­ЁЁ ¬ бив ЎЁа®ў ­Ёп, ¤®бвЁЈ Ґв 8-¬Ё.


`¤`Є20.3.5.2 ЏаҐ¤гЇаҐ¦¤Ґ­ЁҐ ЇҐаҐЇ®«­Ґ­Ё© Ё ®ваЁж вҐ«м­ле ЇҐаҐЇ®«­Ґ­Ё© `*

„а®Ў­ п з бвм зЁб«  Ё Ї®Є § вҐ«м ®в¤Ґ«Ґ­л ¤агЈ ®в ¤агЈ  ¤«п в®Ј®, зв®Ўл
Ё§ЎҐ¦ вм ЇҐаҐЇ®«­Ґ­Ё© Ё ®ваЁж вҐ«м­ле ЇҐаҐЇ®«­Ґ­Ё© ЇаЁ ўлзЁб«Ґ­ЁЁ
¬ би ЎЁа®ў ­­®© ўҐ«ЁзЁ­л. Ќ ЇаЁ¬Ґа, ¤«п в®Ј®, зв®Ўл Їа®Ё§ўҐбвЁ
¬ бив ЎЁа®ў ­ЁҐ зЁб«  10**(-4932) ¤® 10**(8), вॡгҐвбп Є®нддЁжЁҐ­в
¬ бив ЎЁа®ў ­Ёп 10**(4950), Є®в®ал© ­Ґ ¬®¦Ґв Ўлвм ЇаҐ¤бв ў«Ґ­ Їа®жҐбб®а®¬
i486.
Ћв¤Ґ«Ёў Ї®Є § вҐ«м Ё ¤а®Ўм, ®ЇҐа жЁп ¬ бив ЎЁа®ў ­Ёп Ўг¤Ґв Їа®бв®
бЄ« ¤лў вм Ї®Є § вҐ«Ё ®в¤Ґ«м­® ®в г¬­®¦Ґ­Ёп ¤а®ЎҐ©. ќв   аЁд¬ҐвЁзҐбЄ п
®ЇҐа жЁп ўЄ«оз Ґв ¬ «лҐ жҐ«лҐ зЁб« , «ҐЈЄ® ЇаҐ¤бв ўЁ¬лҐ Їа®жҐбб®а®¬ i486.


`¤`Є20.3.5.3 ЋЄ®­з вҐ«м­ п ॣ㫨஢Є  `*

‚®§¬®¦­®, зв® б⥯Ґ­­ п дг­ЄжЁп Get Power 10 ¬®¦Ґв ўл¤ вм १г«мв в
¬ бив ЎЁа®ў ­Ёп ўҐ«ЁзЁ­л в Є, зв® Ї®«гзЁвбп зЁб«®, Ё¬Ґо饥 Ў®«миҐ
а §а冷ў, 祬 ¬®¦Ґв Ўлвм ЇаҐ¤бв ў«Ґ­® ў бва®ЄҐ ASCII бЁ¬ў®«®ў. Ќ ЇаЁ¬Ґа,
¬ бив ЎЁа®ў ­ЁҐ зЁб«  9.9999999999999999 x 10**(4900) б Є®нддЁжЁҐ­в®¬
1.00000000000000010 x 10**(-4883) ¤ «® Ўл ў १г«мв вҐ зЁб«®
1.00000000000000009 x 10**(18). € Є®нддЁжЁҐ­в ¬ бив ЎЁа®ў ­Ёп
ᮮ⢥вбвўгҐв в®з­®бвЁ ¬®¤г«п ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў о饩 в®зЄ®© Ё
१г«мв в ᮮ⢥вбвўгҐв в®з­®бвЁ ЇҐаҐў®¤ , ­® зЁб«® ­Ґ ¬®¦Ґв Ўлвм
ЇаҐ¤бв ў«Ґ­® ў д®а¬ вҐ BCD. ‚®в Ї®зҐ¬г ­Ґ®Ўе®¤® Ї®б«Ґ ¬ бив ЎЁа®ў ­Ёп
Їа®ўҐбвЁ вҐбвЁа®ў ­ЁҐ ўҐ«ЁзЁ­л १г«мв в . ђҐ§г«мв в ¬®¦­® г¬­®¦Ёвм Ё«Ё
а §¤Ґ«Ёвм ­  10, ў § ўЁбЁ¬®бвЁ ®в в®Ј®, пў«пҐвбп «Ё १г«мв в
ᮮ⢥вб⢥­­® б«ЁиЄ®¬ ¬ «л¬ Ё«Ё б«ЁиЄ®¬ Ў®«миЁ¬.


`¤`Є20.3.6 ‚л室­®© д®а¬ в `*

„«п ¬ ЄбЁ¬ «м­®© ЈЁЎЄ®бвЁ ўл室­®Ј® д®а¬ в , Ї®§ЁжЁп ¤ҐбпвЁз­®© в®зЄЁ
гЄ §лў Ґвбп ¤ў®Ёз­л¬ жҐ«л¬ зЁб«®¬, ­ §лў Ґ¬л¬ §­ зҐ­ЁҐ¬ Ї®Є § вҐ«п
б⥯Ґ­Ё. …б«Ё Ї®Є § вҐ«м б⥯Ґ­Ё а ўҐ­ ­г«о, в® ¤ҐбпвЁз­ п в®зЄ 
ЇаҐ¤Ї®« Ј Ґвбп бЇа ў  ®в б ¬®© Їа ў®© жЁдал. Џ®Є § вҐ«м б⥯Ґ­Ё Ў®«миЁ©
­г«п Ї®Є §лў Ґв, Є Є ¬­®Ј® ®бв в®з­ле ­г«Ґ© ­Ґ Ї®Є §лў Ґвбп. „«п Є ¦¤®©
Ґ¤Ё­ЁжҐ ­Ё¦Ґ ­г«п ¤ҐбпвЁз­ п в®зЄ  ў бва®ЄҐ б¤ўЁЈ Ґвбп ­ «Ґў®.
Џ®б«Ґ¤­Ё© и Ј ЇҐаҐў®¤  зЁб«  - нв® б®еа ­Ёвм १г«мв в ў ўЁ¤Ґ BCD Ё
гЄ § вм, Ј¤Ґ ­ е®¤Ёвбп ¤ҐбпвЁз­ п в®зЄ . ‘ва®Є  вЁЇ  BCD § вҐ¬
а бЇ Є®ўлў Ґвбп ў ¤ҐбпвЁз­го бва®Єг Ё§ ASCII бЁ¬ў®«®ў. ‡­ Є
гбв ­ ў«Ёў Ґвбп ў ᮮ⢥вбвўЁЁ б® §­ Є®¬ ®аЁЈЁ­ «м­®Ј® §­ зҐ­Ёп.


`¤`Є20.4 ЏаЁ¬Ґал ваЁЈ®­®¬ҐваЁзҐбЄЁе ўлзЁб«Ґ­Ё© `*

‚ н⮬ ЇаЁ¬ҐаҐ ¬®¤Ґ«ЁагҐвбп ЄЁ­Ґ¬ вЁЄ  агЄЁ а®Ў®в  Ї® Ј®¬®ЈҐ­­л¬ ¬ ваЁж ¬
ЇаҐ®Ўа §®ў ­Ё© а §¬Ґа®¬ 4 x 4, ЇаҐ¤«®¦Ґ­­л¬ „Ґ­ ўЁв®¬ Ё • а⥭ЎҐаЈ®¬
(1,2). ЏҐаҐ¤ в®з­лҐ Ё Ї®ў®а®в­лҐ ®в­®иҐ­Ёп ¬Ґ¦¤г ᬥ¦­л¬Ё §ўҐ­мп¬Ё агЄЁ
®ЇЁб ­л б Ї®¬®ймо нвЁе ¬ ваЁж, ЁбЇ®«м§гп ¬ ваЁз­л© ¬Ґв®¤ D-H. „«п Є ¦¤®Ј®
§ўҐ­  Ї®бв஥­  Ј®¬®ЈҐ­­ п ¬ ваЁж  ЇаҐ®Ўа §®ў ­Ё© а §¬Ґа®¬ 4 x 4, Є®в®а п
ЇаҐ¤бв ў«пҐв Є®®а¤Ё­ в­го бЁб⥬㠧ўҐ­  (L(i)) ў ᮥ¤Ё­Ґ­ЁЁ (J(i)) ў
ᮮ⢥вбвўЁЁ б ЇаҐ¤л¤г饩 Є®®а¤Ё­ в­®© бЁб⥬®© (J(i-1),L(i-1)).

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 1. J.Denavit and R.S.Hartenberg,
"A Kinematic Notation for Lower-Pair Mechanisms Based on Matrices." J.
Applied Mechanics, June 1955, pp. 215-221

2. C.S.George Lee, "Robert Arm Kinematics, Dinamics, and Control." IEEE
Computer, Dec. 1982.

‘«Ґ¤гойЁҐ зҐвлॠЈҐ®¬ҐваЁзҐбЄЁҐ ўҐ«ЁзЁ­л Ї®«­®бвмо ®ЇЁблў ов ¤ўЁ¦Ґ­ЁҐ
«оЎ®© Ї ал ᮥ¤Ё­Ґ­ЁҐ/§ўҐ­® (J(i),L(i)), Є Є Ї®Є § ­® ­  ђЁбг­ЄҐ 20-7.

вҐв (i) = “Ј®« ¬Ґ¦¤г ®бмо x(i) Ё ®бмо x(i-1) ЇаЁ Ї®ў®а®вҐ ў®ЄагЈ ®бЁ
z(i-1) Їа®вЁў з б®ў®© бв५ЄЁ. d(i) = ђ ббв®п­ЁҐ ®в (i-1)-®© Є®®а¤Ё­ в­®©
бЁбвҐ¬л ў¤®«м ®бЁ z(i-1) ¤® ®бЁ x(i). a(i) = ђ ббв®п­ЁҐ ¤® i-®©
Є®®а¤Ё­ в­®© бЁбвҐ¬л ®в ®бЁ z(i-1) ў¤®«м ®бЁ -x(i).  «мд (i) = “Ј®« ¬Ґ¦¤г
®бмо z(i) Ё ®бмо z(i-1) ЇаЁ Ї®ў®а®вҐ ў®ЄагЈ ®бЁ x(i) Їа®вЁў з б®ў®©
бв५ЄЁ.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і і
і і
і zi-1 xi-1 і
і yi-1 і 90 / і
і \ ГДДДДДД\ / і
і \ і /\ вҐв  і
і \ і / \ і
і \ і / * і
і \ і / і
і ‘Ћ…„€Ќ…Ќ€… i-1 Г Д Д Д Д Д Д Д Д Д Д ДДВДД і
і і і і
і і і і
і і і і
і  «мд i і і і
і \ і і і
і \ і і
і \ * <ДДДіДДД\ di і
і \ і \ 90 і
і zi \ і і і і
і \ yi \ і і і і
і \ / \ і і і і
і \ / \ і і і і
і \ / \ і і і і
і ДДДДДДДДДДДДДДДДДБДДДДДДБДДДДДДДДДДДДД xi ДДБДД і
і ‘Ћ…„€Ќ…Ќ€…i+1 і
і і
і ГДДДДДД ai ДДДДДДґ і
і 240486/103 і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ђЁбг­®Є 20-7. Ћв­®иҐ­Ёп ЊҐ¦¤г ‘¬Ґ¦­л¬Ё ‡ўҐ­мп¬Ё


Њ ваЁж  ЇаҐ®Ўа §®ў ­Ё© A(i)(i-1) вЁЇ  D-H ¤«п ᬥ¦­ле Є®®а¤Ё­ в­ле
гз бвЄ®ў ®в ᮥ¤Ё­Ґ­Ёп (i-1) ¤® ᮥ¤Ё­Ґ­Ёп (i) ўлзЁб«пҐвбп Є Є:

A(i)(i-1) = T(z,d) x T(z,вҐв ) x T(x,a) x T(x, «мд )
Ј¤Ґ:
T(z,d) ЇаҐ¤бв ў«пҐв ЇҐаҐ¤ зг ў¤®«м ®бЁ z(i-1)
T(z,вҐв ) ЇаҐ¤бв ў«пҐв Ї®ў®а®в гЈ«  вҐв  ў®ЄагЈ ®бЁ z(i-1)
T(x,a) ЇаҐ¤бв ў«пҐв ЇҐаҐ¤ зг ў¤®«м ®бЁ x(i)
T(x, «мд ) ЇаҐ¤бв ў«пҐв Ї®ў®а®в гЈ«   «мд  ў®ЄагЈ ®бЁ x(i)

A(i)(i-1) =

і COSвҐв(i) -COS «д(i)SINвҐв(i) SIN «д(i)SINвҐв(i) COSвҐв(i) і
і і
і SINвҐв(i) COS «д(i)COSвҐв(i) -SIN «д(i)COSвҐв(i) SINвҐв(i) і
і і
і 0 SIN «д(i) COS «д(i) d(i) і
і і
і 0 0 0 1 і

Љ®¬Ї®§Ёв­ п Ј®¬®ЈҐ­­ п ¬ ваЁж  T, Є®в®а п ЇаҐ¤бв ў«пҐв б®Ў®© Ї®§ЁжЁо Ё
®аЁҐ­в жЁо Ї ал ᮥ¤Ё­Ґ­ЁҐ/§ўҐ­® Ї® ®в­®иҐ­Ёо Є ®б­®ў­®© бЁб⥬Ґ,
Ї®«гз Ґвбп Ї®б«Ґ¤®ў вҐ«м­л¬ г¬­®¦Ґ­ЁҐ¬ ¬ ваЁж ЇаҐ®Ўа §®ў ­Ё© вЁЇ  D-H ¤«п
ᬥ¦­ле Є®®а¤Ё­ в­ле гз бвЄ®ў.

T(i)(0) = A(1)(0) x A(2)(1) x ... x A(i)(i-1)
ЏаЁ¬Ґа Їа®Ја ¬¬л ­  ђЁбг­ЄҐ 20-8 Ё««обваЁагҐв, Є Є ¬®¦­® ўлЇ®«­Ёвм
ЇҐаҐ¤ в®з­л© Їа®жҐбб, ЁбЇ®«м§гп ў®§¬®¦­®бвЁ ®Ўа Ў®вЄЁ ®ЇҐа жЁ© б Ї« ў о饩
в®зЄ®© Їа®жҐбб®а  i486. Џа®Ја ¬¬  б®бв®Ёв Ё§ ¤ўге Ј« ў­ле Їа®жҐ¤га. ЏҐаў п
Їа®жҐ¤га  TRANS PROC ЁбЇ®«м§гҐвбп ¤«п ўлзЁб«Ґ­Ёп н«Ґ¬Ґ­в®ў ў Є ¦¤®©
¬ ваЁжҐ A(i)(i-1) вЁЇ  D-H. ‚в®а п Їа®жҐ¤га  MATRIXMUL PROC ­ е®¤Ёв
Їа®Ё§ўҐ¤Ґ­ЁҐ ¤ўге Ї®б«Ґ¤®ў вҐ«м­ле ¬ ваЁж вЁЇ  D-H.


ђЁбг­®Є 20-8. ЏаЁ¬Ґа ЉЁ­Ґ¬ вЁЄЁ ђгЄЁ ђ®Ў®в 

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і і
і і
і Name ROT_MATRIX_CAL і
і ; і
і ; ќв®в ЇаЁ¬Ґа Ё««обваЁагҐв ЁбЇ®«м§®ў ­ЁҐ Є®¬ ­¤ б і
і ; Ї« ў о饩 в®зЄ®© Їа®жҐбб®а  i486 Ё з бвЁз­® і
і ; дг­ЄжЁо FSINCOS, Є®в®а п ¤ Ґв §­ зҐ­Ёп бЁ­гб  Ё і
і ; Є®бЁ­гб  ®¤­®ўаҐ¬Ґ­­®. Џа®Ја ¬¬  ўлзЁб«пҐв і
і ; Є®¬Ї®§Ёв­лҐ ¬ ваЁжл, Ї® Є®в®ал¬ а Ў®в Ґв ¬Ґе ­Ё§¬ і
і ; ЇҐаҐ¤ зЁ. і
і ; і
і ; ‚ н⮬ ЇаЁ¬ҐаҐ а бᬮв७  в®«мЄ® ЄЁ­Ґ¬ вЁЄ  і
і ; а®Ў®в . і

і ; і
і ; …б«Ё Є®¬Ї®§Ёв­ п ¬ ваЁж , гЇ®¬п­гв п ўлиҐ, і
і ; § ¤ Ґвбп Є Є: і
і ; T1n = A1 x A2 x ... x An, в® і
і ; T1n ­ е®¤Ёвбп ўл§®ў®¬ Їа®жҐ¤га trans_proc Ё і
і ; matrixmul_proc, Ї®Є  ўбҐ ¬ ваЁжл ­Ґ Ўг¤гв і
і ; ЇҐаҐ¬­®¦Ґ­л. і
і ; і
і ; Џа®жҐ¤га  trans_proc ўлзЁб«пҐв н«Ґ¬Ґ­вл Є ¦¤®© і
і ; ¬ ваЁжл A(A1,.....An), Ї®Є  Їа®жҐ¤га  і
і ; matrixmul_proc ўлЇ®«­пҐв г¬­®¦Ґ­ЁҐ ¬ ваЁжл Ai Ё і
і ; Ai+1. „«п г¬­®¦Ґ­Ёп Їа®жҐ¤га  matrixmul_proc і
і ; ЁбЇ®«м§гҐв Їа®жҐ¤гал matrix_row Ё matrix_elem. і
і ; і
і ; ЋЇаҐ¤Ґ«Ёвм б⥪®ў®Ґ Їа®бва ­бвў® і
і ; і
і trans_stack stackseg 400 і
і і
і ; ЋЇаҐ¤Ґ«Ґ­ЁҐ ¬ ваЁз­®© бвагЄвгал ¤«п ЇҐаҐ¤ в®з­ле і
і ; ¬ ваЁж а §¬Ґа®¬ 4x4 і
і і
і a_matrix struc і
і a11 dq ? і
і a12 dq ? і
і a13 dq ? і
і a14 dq ? і
і a21 dq ? і
і a22 dq ? і
і a23 dq ? і
і a24 dq ? і
і a31 dq 0h і
і a32 dq ? і
і a33 dq ? і
і a34 dq ? і
і a41 dq 0h і
і a42 dq 0h і
і a43 dq 0h і
і a44 dq 1h і
і a_matrix ends і
і ; і
і ; ЏаҐ¤Ї®« Ј Ґ¬, зв® ®¤­® ᮥ¤Ё­Ґ­ЁҐ еа ­Ёвбп ў і
і ; ®¤®© Ї®§ЁжЁЁ Ё, б«Ґ¤®ў вҐ«м­®, Ё¬ҐҐв ¤ў  ­ Ў®а  і
і ; Ї а ¬Ґва®ў. Ћ¤­ Є®, ў®§¬®¦­® Ё Ў®«м襥 Є®«ЁзҐбвў® і
і ; ᮥ¤Ё­Ґ­Ё©. і
і ; і
і alp_deg struc і
і alpha_deg1 dd ? і
і alpha_deg2 dd ? і
і alp_deg ends і
і ; і
і tht_deg struc і
і theta_deg1 dd ? і
і theta_deg2 dd ? і
і tht_deg ends і
і ; і
і A_array struc і
і A1 dq ? і
і A2 dq ? і
і A_array ends і
і ; і
і D_array struc і
і D1 dq ? і
і D2 dq ? і
і D_array ends і
і ; і
і ; ‘ҐЈ¬Ґ­в ¤ ­­ле - trans_data і
і ; і
і trans_data segment rw public і
і Amx a_matrix<> і
і Bmx a_matrix<> і
і Tmx a_matrix<> і
і ALPHA_DEG alp_deg<> і
і THETA_DEG tht_deg<> і
і A_VECTOR A_array<> і
і D_VECYOR D_array<> і
і ZERO dd 0 і
і d180 dd 180 і
і NUM_JOINT equ 1 і
і NUM_ROW equ 4 і
і NUM_COL equ 4 і
і REVERSE DB 1H і
і trans_data ends і
і і

і assume ds:trans_data, es:trans_data і
і ; і
і ; ‘ҐЈ¬Ґ­в trans_code ᮤҐа¦Ёв Їа®жҐ¤гал ¤«п і
і ; ўлзЁб«Ґ­Ёп н«Ґ¬Ґ­в®ў ¬ ваЁжл Ё г¬­®¦Ґ­Ёп ¬ ваЁж. і
і ; і
і trans_code segment er public і
і truns_proc proc far і
і ; і
і ; ‚лзЁб«Ёвм гЈ«л  «мд  Ё вҐв  ў а ¤Ё ­ е Ё§ Ёе §­ зҐ­Ё© і
і ; ў Ја ¤гб е і
і ; і
і fldpi і
і fdiv d180 і
і ; і
і ; “¬­®¦Ёвм ­  ЏЁ/180 і
і ; і
і fld st і
і fmul qword ptr ALPHA_DEG[ecx*8] і
і fxch st(1) і
і fmul qword ptr THETA_DEG[ecx*8] і
і ; і
і ; ’Ґв  (ў а ¤Ё ­ е) ў ST і
і ; Ё  «мд  (ў а ¤Ё ­ е) ў ST(1) і
і ; і
і ; ‚лзЁб«Ґ­ЁҐ н«Ґ¬Ґ­в®ў ¬ ваЁжл і
і ; і
і ; a11 = COS вҐв  і
і ; a12 = -COS  «мд * SIN вҐв  і
і ; a13 = SIN  «мд  * SIN вҐв  і
і ; a14 = A * COS вҐв  і
і ; a21 = SIN вҐв  і
і ; a22 = COS  «мд  * COS вҐв  і
і ; a23 = -SIN  «мд  * COS вҐв  і
і ; a24 = A * SIN вҐв  і
і ; a32 = SIN  «мд  і
і ; a33 = COS  «мд  і
і ; a34 = D і
і ; a31 = a41= a42 = a43 = 0.0 і
і ; a44 = 1 і
і ; і
і ; ђҐЈЁбва EBX ᮤҐа¦Ёв ᬥ饭ЁҐ ¤«п ¬ ваЁжл і
і ; і
і fsincos ; COS вҐв  ў ST і
і ; SIN вҐв  ў ST(1) і
і fld st ; г¤ў®Ёвм COS вҐв  і
і fst [ebx].a11 ; COS вҐв  ў a11 і
і fmul qword ptr A_VECTOR[ecx*8] і
і fstp [ebx].a14 ; A * COS вҐв  ў a14 і
і fxch st(1) ; SIN вҐв  ў ST і
і fst [ebx].a21 ; SIN вҐв  ў a21 і
і fld st ; г¤ў®Ёвм SIN вҐв  і
і fmul qword ptr A_VECTOR[ecx*8] і
і fstp [ebx].a24 ; A * SIN вҐв  ў a24 і
і fld st(2) ;  «мд  ў ST і
і fsincos ; COS  «мд  ў ST і
і ; SIN  «мд  ў ST(1) і
Соседние файлы в папке INTEL486