FAQ (Всякие мелочи), страница 2
Описание файла
Файл "FAQ" внутри архива находится в папке "Всякие мелочи". Текстовый-файл из архива "Всякие мелочи", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "системное программирование" в общих файлах.
Просмотр 2 страницы текстового-файла онлайн
out dx,al ;ìëàäøèé áàéò ñ÷åò÷èêà
mov al,bh
out dx,al ;ñòàðøèé áàéò ñ÷åò÷èêà
Done:
pop dx ;âîññòàíîâèòü ðåãèñòðû
pop bx
pop ax
ret
Sound endp
Âûêëþ÷åíèå çâóêà:
No_Sound proc near
push ax
in al,61h ;ïîðò ÐÂ
and al,not 3 ;ñáðîñ áèòîâ 0-1
out 61h,al
pop ax
ret
No_Sound endp
---------------------------------------- ------------------------------------
Q10: ×òî ëó÷øå - ñòàíäàðòíûå èëè óïðîùåííûå äèðåêòèâû îïðåäåëåíèÿ ñåãìåíòîâ?
A: Îäíîçíà÷íî ïðîùå - óïðîùåííûå. ×òî ëó÷øå - ðåøàåòñÿ èíäèâèäóàëüíî.
Èñïîëüçîâàíèå ñòàíäàðòíûõ äèðåêòèâ èìååò ñìûñë èëè â ïåäàãîãè÷åñêèõ
öåëÿõ, èëè ïðè íàëè÷èè ïðè÷èí, òðåáóþùèõ èñïîëüçîâàíèÿ èìåííî ñòàíäàðòíûõ
äèðåêòèâ. Íàïðèìåð, íåîáõîäèìîñòü èñïîëüçîâàíèÿ ñïåöèàëüíûõ èìåí
ñåãìåíòîâ, ñïåöèàëüíûõ àòðèáóòîâ è îñîáîé ãðóïïèðîâêè. Ïîñëåäíåå
îïÿòü-òàêè âîâñå íå îçíà÷àåò, ÷òî óïðîùåííûå äèðåêòèâû íå ìîãóò áûòü
èñïîëüçîâàíû. Íàïðèìåð:
.MODEL LARGE
MyGroup group MySpecialSeg,$LibTable
MySpecialSeg segment word public use16 'DATA'
...
ends
$LibTable segment para common use16 'DATA'
...
ends
.DATA
.CODE
end
Ïîýòîìó âïîëíå ðàçóìíûì âèäèòñÿ èñïîëüçîâàíèå óïðîùåííûõ äèðåêòèâ,
ñîâìåùåííîå (ïðè íåîáõîäèìîñòè) ñ èñïîëüçîâàíèåì ñòàíäàðòíûõ.
---------------------------------------- -----------------------------------
Q11: Äëÿ ÷åãî íóæíà êîìàíäà LEA. Òî æå ñàìîå ìîæåò è OFFSET, äà è Tasm çàìåíÿåò
LEA íà MOV...OFFSET.
A: MOV...OFFSET êîðî÷å LEA, ïîýòîìó â ðåæèìå SMART tasm çàìåíÿåò LEA íà MOV
äëÿ òåõ ñëó÷àåâ, êîãäà ýòî âîçìîæíî:
lea di,Array
mov di,offset Array
Íî òàêàÿ çàìåíà âîçìîæíà íå âñåãäà:
lea di,Array[si+bx.FieldName]
Ëîãèêà ðàáîòû LEA â äàííîì ñëó÷àå ýêâèâàëåíòíà òàêîìó ôðàãìåíòó:
mov di,offset Array
add di,si
add di,bx
add di,FieldName
Ðåçóëüòàò ýòîãî ôðàãìåíòà íå ìîæåò áûòü âû÷èñëåí íà ýòàïå êîìïèëÿöèè
èç-çà íåèçâåñòíûõ âåëè÷èí, à ñëåäîâàòåëüíî, LEA â äàííîì ñëó÷àå íå ìîæåò
áûòü çàìåíåíà êîìàíäîé MOV...OFFSET
---------------------------------------- -----------------------------------
Q12: mov ax,@data
mov ds,ax
Îòêóäà ïðîãðàììà óçíàåò àäðåñ ñåãìåíòà? Ïîñëå êîìïèëÿöèè ñòîèò mov ax,1.
À â îòëàä÷èêå ïîÿâëÿåòñÿ ñðàçó íóæíûé àäðåñ: mov ax,140Fh
Êòî åãî òóäà ïðîïèñûâàåò?
A: Ò.ê. EXE ìîæåò áûòü çàãðóæåí ïî ðàçëè÷íûì àäðåñàì, âìåñòî ÿâíûõ çíà÷åíèé
cåãìåíòîâ â EXE óêàçàíû íîìåðà 16-áàéòíûõ ïàðàãðàôîâ [0...FFFF] ýòèõ
cåãìåíòîâ, íà÷èíàÿ îò íà÷àëà îáðàçà EXE. Çàãðóç÷èê, ïîñëå ñ÷èòûâàíèÿ îáðàçà
EXE â ïàìÿòü, èñïîëüçóÿ èíôîðìàöèþ â çàãîëîâêå EXE, íàõîäèò ññûëêè íà
ÿâíûå çíà÷åíèÿ ñåãìåíòîâ è ïðèáàâëÿåò ê çíà÷åíèþ ïàðàãðàôà, óêàçàííîå
íåïîñðåäñòâåííî â êîìàíäå, ðåàëüíîå çíà÷åíèå ñåãìåíòà, íà÷èíàÿ ñ êîòîðîãî
çàãðóæåí EXE.
Íàïðèìåð, îáðàç EXE ñ÷èòàí â ïàìÿòü, íà÷èíàÿ ñ àäðåñà 140Eh:0 Ïîñëå
êîððåêòèðîâêè çíà÷åíèé ñåãìåíòîâ âìåñòî mov ax,1 ïîëó÷àåòñÿ mov ax,140F
---------------------------------------- -----------------------------------
Q13: Êàê ñäåëàòü COM ñ îòëàäî÷íîé èíôîðìàöèåé, ïîíèìàåìîé TD ?
A: comdbg.bat TEST
tasm /zi %1
tlink /v %1,%1,,,
tdstrip -s -c %1.exe
---------------------------------------- ------------------------------------
Q14: Íå ïîëó÷àåòñÿ! COM åñòü, TDS åñòü, à TD îòëàäî÷íóþ èíôîðìàöèþ íå âèäèò:
"Program has no symbol table"
A: Ó TDS âðåìÿ ìåíüøå, ÷åì ó COM - òàêîå áûâàåò â Âèíäå.
Âîñïîëüçóéòåñü óòèëèòîé touch èç NWDOS (â MS DOS îíà ïîõóæå)
touch %1.tds
---------------------------------------- -----------------------------------
Q15: Êàê ðàñ÷èòàòü êîëè÷åñòâî ïàìÿòè, íåîáõîäèìîå äëÿ ðåçèäåíòà?
A: FirstFreeByteSeg - PspSeg + ((FirstFreeByteOffs+15) div 16)
Resident macro FirstFreeByteSeg,FirstFreeByteOffs
mov dx,FirstFreeByteSeg
sub dx,[PspSeg]
mov ax,FirstFreeByteOffs
dec ax
shr ax,4
inc ax
add dx,ax
mov ah,31h
mov al,[ErrorLevel]
int 21h
endm
Resident seg Install,<offset Install>
---------------------------------------- -----------------------------------
Q16: Íå ìîãó çàïóñòèòü äî÷åðíþþ çàäà÷ó ôóíêöèåé 4Bh
Q17: Íå âûäåëÿåòñÿ ïàìÿòü ïî ôóíêöèè 48h
A: Íåò ñâîáîäíîé ïàìÿòè.
---------------------------------------- -----------------------------------
Q18: Äà âðîäå âñå åñòü, ïî÷åìó íå âûäåëÿåò-òî?
A: Äà ïîòîìó ÷òî îíà óæå òåáå âûäåëåíà, òåïåðü åå îñòàëîñü òîëüêî ñæàòü.
---------------------------------------- -----------------------------------
Q19: Êàê ñæàòü áëîê ïàìÿòè, çàíèìàåìûé ïðîãðàììîé?
A: Ñæèìàòü åå ñëåäóåò ÷åðåç ôóíêöèþ DOS 4Ah. Àëãîðèòì òîò æå, ÷òî è ó
ìàêðîñà Resident:
ShrinkMem macro FreeSeg,FreeOffs
mov bx,FreeSeg
sub bx,[PspSeg]
mov ax,FreeOffs
dec ax
shr ax,4
inc ax
add bx,ax
mov ah,4Ah
mov es,[PspSeg]
int 21h
endm
ShrinkMem <seg stack>,<(size stack)+1>
 ñëó÷àå ïîëíîãî/äîïîëíèòåëüíîãî ðó÷íîãî îáúÿâëåíèÿ ñåãìåíòîâ è èõ îñîáîãî
óïîðÿäî÷èâàíèÿ íåîáõîäèìî óêàçàòü èìÿ ïîñëåäíåãî ñåãìåíòà.
---------------------------------------- ------------------------------------
Q20: À ÷òî çà êîìàíäà òàêàÿ rdtsc?
A: read tsc - Read Time Stamp Counter. ×èòàåò ðåãèñòð tsc, ïðîùå ãîâîðÿ
âîçâðàùàåò â edx:eax êîëè÷åñòâî òàêòîâ ñ ìîìåíòà ïîñëåäíåãî ñáðîñà
ïðîöåññîðà. Îïêîä - 0F 31, êîìàíäà ïîÿâèëàñü íà ïðîöåññîðàõ Pentium (è
òî íå íà âñåõ.)
---------------------------------------- -----------------------------------
Q21:. È åùå, ðàññêàæèòå ðóññêèì ÿçûêîì, ÷òî òàêîå ðåêóðñèÿ (íèêîãäà íå
ñòàëêèâàëñÿ!)?
A: Âûçîâ ôóíêöèåé ñàìîé ñåáÿ.
Q: Ïðèìåð÷èê ïðèâåòñòâóåòñÿ.
A: Êëàññè÷åñêèé ïðèìåð - âû÷èñëåíèå ôàêòîðèàëà:
..model farstack small, pascal
.386
locals @@
..stack 2048
..code
Factorial PROC ; function factorial(@@N:Word):DWord;
arg @@N:word ; begin
mov ax,@@N
cmp ax,1 ; if (@@N=1) or (@@N=0) then
ja @@calc
mov ax,1 ; factorial:=1
xor dx,dx
ret
@@calc:
dec ax ; else
push ax
call Factorial ; factorial := factorial(@@N-1)
mul @@N ; * @@N;
ret ; end;
endp
MAIN PROC
.startup
push 4
call Factorial
.exit
ENDP
end MAIN
---------------------------------------- ------------------------------------
Q22: Ðàññêàæèòå ïðî ñîïðîöåññîð, êàê åãî èñïîëüçîâàòü?
A: Âîò òåáå ïðèìåð ïðîãðàììû ñ êîììåíòàðèÿìè:
..model tiny
..code
..386 ; ïðèâû÷êà :)
..387 ; èñïîëüçîâàíèå ñîïðîöà
..startup