Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Кол-во строк окружения

Автор: НеКто 11.02.2007 4:42

Как реализовать паскалевскую функцию EnvCount() на ассемлере.Где расположено количество строк окружения???????????

Автор: xds 11.02.2007 21:53

Цитата(НеКто @ 11.02.2007 7:42) *
Где расположено количество строк окружения???????????
Оно вычисляется:
program AsmEnvCount;

function EnvCount: Integer; assembler;
asm
mov ah,62h
int 21h
mov es,bx
mov es,es:[2Ch]
xor di,di
xor bx,bx
xor ax,ax
@@1:
mov cx,-1
repne scasb
inc cx
inc cx
jcxz @@2
inc bx
jmp @@1
@@2:
mov ax,bx
end;

begin
Writeln(EnvCount);
end.


Автор: НеКто 12.02.2007 3:34

Короче я понял,что оно ни где не расположено...его считать надо....
непонятно что такое "repne scasb"???????????

Автор: xds 12.02.2007 14:15

Область переменных окружения в среде DOS расположена по адресу <env_seg>:0, где значение <env_seg> - адрес блока переменных среды - хранится в PSP (префиксе программного сегмента) по смещению 2Ch. Для получения адреса самого PSP используем системный вызов ah=62h/int 21h. Переменные хранятся последовательно в виде строк "a=b" в формате ASCIIZ (последний байт - 0), последняя строка - пустая (один нулевой байт). Что такое repne scasb можно узнать из любой книги по ассемблеру x86.

Автор: НеКто 17.02.2007 1:10

"Что такое repne scasb можно узнать из любой книги по ассемблеру x86."
А на фига вот ты мне всё это писал если на вопрос всё равно не ответил!!!!!!!!!!!!!!
НУ вы даёте ребята........
а так же можно с помощью 51h фукции прерывания 21h....адрес PSP записывается в DX