FAQ (Всякие мелочи), страница 3
Описание файла
Файл "FAQ" внутри архива находится в папке "Всякие мелочи". Текстовый-файл из архива "Всякие мелочи", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "системное программирование" в общих файлах.
Просмотр 3 страницы текстового-файла онлайн
finit ; èíèöèàëèçàöèÿ ñîïðîöà
fild data1 ; çàãðóçêà data1
fiadd data2 ; ñêëàäûâàíèå ñ data2
fist _result ; ñîõðàíåíèå ðåçóëüòàòà â
; _result
ret
data1 dw 1
data2 dw 200
_result dw ?
end
Òåïåðü íåìíîãî òåîðèè.
Ïðèìåð êîìàíäû:
fild
^^^^
||++
|||
||+-- 'ld' - load, çàãðóçêà ÷èñëà â ñòåê ñîïðîöåññîðà
|+--- 'i' - integer, îçíà÷àåò, ÷òî ðàáîòàåì ñ ÖÅËÛÌÈ äàííûìè (
| åùå âàðèàíòû - '', òî åñòü fld, íàïðèìåð - çàãðóçêà âåùåñòâåííîãî
| ÷èñëà â ñîïðîöåññîð, 'b', ò.å. fbld - çàãðóçêà BCD ÷èñëà)
+---- 'f' - îáîçíà÷àåò, ÷òî ýòî êîìàíäà ñîïðîöåññîðà
Ïðèìåðû êîìàíä:
fld data1 ; çàãðóçêà âåùåñòâåííîãî ÷èñëà èç ïàìÿòè
; ïî àäðåñó data1 â ñîïðîöåññîð
fist _result ; ñîõðàíåíèå ÷èñëà êàê öåëîãî â ïàìÿòü ïî
; àäðåñó _result (ïðè íåîáõîäèìîñòè îíî
îêðóãëÿåòñÿ -
; ýòî äåëàåò ñàì ñîïðîö)
fistp _result ; òî æå ñàìîå, íî ïðè ñîõðàíåíèè ÷èñëà îíî
; âûòàëêèâàåòñÿ èç ñòåêà ñîïðîöà
fsqrt ; âû÷èñëåíèå êâàäðàòíîãî êîðíÿ èç st0, òî
; åñòü àðãóìåíò áåðåòñÿ èç ñòåêà, òóäà æå è
; ïîìåùàåòñÿ çíà÷åíèå êîðíÿ
fcos, fsin ; âû÷èñëÿåò êîñèíóñ è ñèíóñ óãëà, çàäàííîãî
; â ñòåêå ñîïðîöà. Óãîë äîëæåí áûòü â
; _ðàäèàíàõ_.
fsincos ; îäíîâðåìåííî âû÷èñëÿåò è sin è cos, â
; st0 ïîìåùàåòñÿ sin, â st1 - cos.
Âîîáùå äëÿ ïîíèìàíèÿ ìåõàíèçìà ðàáîòû âîçüìèòå Turbo Debugger:
F10/View/Numeric processor:
Çäåñü âèäíî, ÷òî â ñòåêå ñîïðîöà íàõîäèòñÿ ÷èñëî 300 :)
+=[x]=80486 IPTR=54CE3 OPCODE=706 OPTR=54CEE==2=[][]=+
|Valid ST(0) 300 | im=1 | ie=0 |
|Empty ST(1) | dm=1 | de=0 |
|Empty ST(2) | zm=1 | ze=0 |
|Empty ST(3) | om=1 | oe=0 |
|Empty ST(4) | um=1 | ue=0 |
|Empty ST(5) | pm=1 | pe=0 |
|Empty ST(6) |iem=0 | ir=0 |
|Empty ST(7) | pc=3 | cc=0 |
| | rc=0 | st=7 |
| | ic=0 | |
+xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+ ======+=====-+
Âûïîëíÿåì:
cs:0107 D9FA fsqrt
+=[x]=80486 IPTR=54CE7 OPCODE=1FA OPTR=54BE0==2=[][]=+
|Valid ST(0) 17.320508075688773 | im=1 | ie=0 |
|Empty ST(1) | dm=1 | de=0 |
|Empty ST(2) | zm=1 | ze=0 |
|Empty ST(3) | om=1 | oe=0 |
|Empty ST(4) | um=1 | ue=0 |
|Empty ST(5) | pm=1 | pe=1 |
|Empty ST(6) |iem=0 | ir=0 |
|Empty ST(7) | pc=3 | cc=0 |
| | rc=0 | st=7 |
| | ic=0 | |
+xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+ ======+=====-+
Ïîëó÷èëè âåùåñòâåííîå ÷èñëî â ñòåêå ñîïðîöåññîðà. Ñîõðàíèì åãî â ïàìÿòè
ïî àäðåñó ds:[110] êàê öåëîå:
cs:0109 DF1E1001 fistp word ptr[0110]
Ñìîòðèì ñîäåðæèìîå:
ds:0110 11 00 FF 16 57 9A A5 1B
^^^^^ âîí îí íàø ðåçóëüòàò :)
---------------------------------------- ------------------------------------
Q23: Íàðîä, êàê îáîéòè "Relative jump out of range"?
A: Ïîñòàâü äèðåêòèâó .386 èëè äàæå áîëüøå - .586, íàïpèìåp - è
íàñëàæäàéñÿ... ;) À ïî óìîë÷àíèþ èñïîëüçóåòñÿ 8086. Ó íåãî òîëüêî jmp
short åñòü.
A2: À åñëè âñå æå ïpèñïè÷èëî ïèñàòü ïîä ïpîöåññîp ìåíåå 386, òî ìîæíî
âîñïîëüçîâàòüñÿ äèðåêòèâîé 'jumps':
JUMPS
....
CMP ÷åãî íàäî
JZ êóäà íàäî
....
NOJUMPS
È ýòî àâòîìàòîì ïîñòpîèò êîíñòpóêöèþ, ïîäîáíóþ ýòîé:
CMP ÷åãî íàäî
JNZ @2
JMP êóäà_íàäî
@2:
Äèpåêòèâà JUMPS çàìåíÿåò âñå êîpîòêèå ïåpåõîäû íà òàêóþ
êîíñòpóêöèþ, â ñëó÷àå íåîáõîäèìîñòè. Ïîýòîìó ïîëüçîâàòüñÿ åé ìîæíî
âñåãäà.
---------------------------------------- ------------------------------------
Q25: À ÷òî òàêîå CMOS è êàê ñ íåé ðàáîòàòü?
A: Ñåé÷àñ ïîä òåðìèíîì CMOS (â ðàìêàõ êîìïüþòåðùèêîâ) ïîíèìàþò 64 (óæå
ãîâîðÿò, ÷òî 128) áàéò ýíåðãîíåçàâèñèìîé ïàìÿòè.
PC êëàññà AT èìåþò ïèòàåìûå îò áàòàðåéêè ÷àñû ðåàëüíîãî âðåìåíè
(RTC) è 64 áàéòà ïîñòîÿííîé CMOS-ïàìÿòè.
Ýòà ïàìÿòü ñîäåðæèò ðàçíîîáðàçíóþ èíôîðìàöèþ, âêëþ÷àþùóþ òåêóùèå
äàòó è âðåìÿ, ñâåäåíèÿ î êîíôèãóðàöèè ìàøèíû è áàéò ñòàòóñà çàêðûòèÿ
ñèñòåìû (ýòîò áàéò èñïîëüçóåòñÿ ìåõàíèçìîì, ïîçâîëÿþùèì ìàøèíå AT
ðåñòàðòîâàòü ïîñëå âûïîëíåíèÿ ñáðîñà ïðîöåññîðà, âûâîäÿùåãî èç
çàùèùåííîãî ðåæèìà).
Ðàáîòàòü ñ íåé íàäî òàê:
×òîáû ïðî÷èòàòü áàéò èç CMOS, âûïîëíèòå êîìàíäó OUT 70H, àäðåñ;
çàòåì âûïîëíèòå IN 71H. ×òîáû çàïèñàòü áàéò â CMOS, âûïîëíèòå OUT 70H,
àäðåñ; çàòåì OUT 71H, çíà÷åíèå.
Ïðèìåð: ;------- ïðî÷èòàòü òèï óñòàíîâëåííîãî òâåðäîãî äèñêà
mov al,12H
out 70H,al ;âûáðàòü àäðåñ CMOS 12H
jmp $+2 ;òðåáóåòñÿ íåáîëüøàÿ çàäåðæêà
in al,71H ;òåïåðü â AL òèï óñòðîéñòâà (0-15)
Àäðåñà 10H..20H çàùèùåíû êîíòðîëüíîé ñóììîé, ÷òî ïîçâîëÿåò
îáíàðóæèòü èçíîñ áàòàðåéêè èëè ïîð÷ó èíôîðìàöèè â çàïèñè êîíôèãóðàöèè.
Êîíòðîëüíàÿ ñóììà - ýòî ïðîñòî 16-áèòîâàÿ ñóììà çàùèùàåìûõ áàéò ïàìÿòè.
---------------------------------------- ------------------------------------
Q26: Òóò òàêîå äåëî, â ïðîöåäóðàõ ó ìåíÿ ÷àñòî ìåòêè îäèíàêîâûå, èëè
âñòàâëÿþ èç ðàçíûõ ñâîèõ èñõîäíèêîâ êóñêè, tasm ðóãàåòñÿ, ìîë, ìåòêè
îäèíàêîâûå :( Ïðèõîäèòñÿ âñå èïðàâëÿòü... ×òî ñäåëàòü-òî ìîæíî? È âîîáùå
êàê ìîæíî óäîáíî ñäåëàòü ðàáîòó ñ ìåòêàìè?
A: Åñòü äâà ñïîñîáà, îäèí ïðîñòîé, äðóãîé õèòðûé :)
Ñïîñîá ïðîñòîé: ñòàâèì â íà÷àëå èñõîäíèêà locals @@ è âñå ìåòêè,
íà÷èíàþùèåñÿ ñ ñèìâîëîâ '@@' áóäóò _ëîêàëüíûìè_, òî åñòü ñóùåñòâîâàòü â
ïðåäåëàõ îäíîé ïðîöåäóðû è íå âûçûâàòü êîíôëèêòà ñ îäèíàêîâûìè èìåíàìè.
Ñïîñîá õèòðûé: ó tasm'à åñòü òàêîé ðåæèì ðàáîòû, ïðè êîòîðîì ñóùåñòâóþò
ìåòêè òèïà @@,@b,@f (@b è @f ñîîòâåòñòâåííî ïåðåõîäÿò íà áëèæíþþ ìåòêó
@@ íàçàä, ëèáî âïåðåä), ýòîò ðåæèì âêëþ÷àåòñÿ ñëîâàìè 'masm' è 'quirks'
(îáÿçàòåëüíû îáå äèðåêòèâû, èíà÷å ðàáîòàòü íå áóäåò!). Ðàáîòàåò òàê:
+------------+
@@:| |
+ nop |
nop |
jmp @b -+
nop
jmp @f -+
@@:+ nop |
+------------+
---------------------------------------- ------------------------------------
Q27: À êàê íàïå÷àòàòü ÷èñëî â øåñòíàäöàòåðè÷íîì âèäå?
A: Ìîæíî ñäåëàòü òàê:
(ðåçóëüòàò ïîìåùÿåòñÿ â es:di)
byte2hex proc near
push cx
mov cx,2
@@L1: rol dl,4