Турбо паскалда ассемблердан фойдаланиш.
Режа:
1. Турбо паскальда ассемблер тилидан фойдаланиш.
2. Паскальда ассемблер дастурининг ёзилиши.
Турбо паскалда ассемблер тилида ёзилган дастур ва кисм дастурлардан фойдаланиш имконияти яратилган бўлиб, унинг 4 хил варианти бор.
1. Ассемблернинг у ёки бу қисми дастурсини ёзиш ва кейин уни паскалда ёзилган асосий дастур билан бирлаштириш мумкин, бунда компиляторнинг {$L <файл номи>} директивасидан ва external директивасидан фойдаланилади. <файл номи> -ассемблерда ёзилган қисм дастурли файл номи.
2. Турбо паскаль ички ассемблеридан фойдаланиш мумкин, бунда ассемблерда ёзилган дастур қисми asm ... end ичига олинади.
3. У ёки бу қисм дастурни (процедура ёки функцияни) assembler директивасидан фойдаланиб, бош сўзидан бошқа қисмини тўлалигича ассемблерда ёзиш мумкин. Бунда ҳам ТР нинг ички ассемблеридан фойдаланилади.
4. Унчалик катта бўлмаган қисм дастурни бевосита процессор кодида ёзиш мумкин, бунда inline директивасидан фойдаланилади.
Ассемблер тилида дастурнинг айрим қисмларини ёзишда BP, SP, SS, DS регистрлар қийматини ўзгартирмасликка аҳамият бериш керак, агар бу регистрлардан фойдаланиш зарурати бўлса,улар қийматини сақлаб қуйиб,кейин охирида яна тиклаб қўйиш керак. қолган регистрлардан ихтиёрий тарзда фойдала-ниш мумкин.
Мисол. Берилган бутун сонлар ичидан максимумини берувчи дастур ёзилсин.
1-вариант бўйича.
program kattasi;
const nк7;
massiv:array[1..n] of integerк(4,2,3,8,17,6,1);
{$L SUBR}
function max(var mas:n: integer):integer; external;
begin
writeln(max(massiv,n));
readln;
end.
Бу паскалда ёзилган асосий дастур. Бунда ассемблерда ёзилган дастурга мурожаат ва натижани экранга чиқариш ёзилган. максимумни топиш SUBR файлида ассемблер тилида ёзилган.
2-вариант бўйича.
program kattasi;
const nк7;
massiv:array[1..n] of integerк(4,2,3,8,17,6,1);
function max(var mas:n: integer):integer;
begin
asm
... ассемблерда дастур ...
end;
begin
writeln(max(massiv,n));
readln;
end.
Do'stlaringiz bilan baham: |