Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Пробег по всей памяти


Автор: codeok 17.11.2009, 16:43
Здравствуйте.
У меня такой вопрос: как манипулировать сегментым регистром и смещением,чтобы пробежатся по всей доступной памяти в реальном режиме.
может есть какой нибудь несложный способ.

Автор: AndNot 17.11.2009, 17:31
Примерно так: 
Код
; es: di - начальный адрес
    mov cx, numsegments ; cx - количество полных сегментов (по 65536 байт)
inloop:
    mov al, es:[di]
    ; здесь делаем что-то

    ; и переходим к следующему адресу
    inc di
    jnc inloop
    mov ax, es
    add ax, 1000h
    mov es, ax
    xor di, di
    loop inloop


Добавлено через 4 минуты и 48 секунд
Цитата(AndNot @  17.11.2009,  17:31 Найти цитируемый пост)
    xor di, di
эту строчку можно закоментировать, поскольку после: 
Код
    inc di
    jnc inloop
регистр DI и так будет равен нулю. Это уж я так, по привычке написал smile

Автор: codeok 17.11.2009, 21:18
Спасибо огромное  smile 

Автор: Mikl_ 18.11.2009, 04:19
AndNot, 
inc di/    jnc inloop нельзя писать поскольку inc/dec на флаг Carry не действуют smile 
по смыслу подходит inc di/jnz  так как дойдя до di=0FFFFh команда inc di сделает di=0000 smile 

Автор: AndNot 18.11.2009, 05:30
Очепятался и не заметил smile Спасибо за поправку  smile 

Автор: codeok 18.11.2009, 18:46
И еще такой вопросик: как зная физический адрес, вычеслить его логический ? может кто знает  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)