Прошу помочь со следующей проблемой: У меня несколько .com - ов должны подгружаться по очереди c hdd. Они лежат в известных секторах. ---------------------------------- В первом я пишу так: Код (Text): org 100 mycode: push cs pop ds ; Адрес буфера должен быть в es:bx les bx, [buff ] ; <<<<<<<<<<<<< тут не хочет компиляться, говорит ; размер не тот ; читаем нужные сектора HDD ; ... еще чего-то делаем ; Конец основного кода ; Определяем буфер buff rb 512*100 ; Для 100 секторов ---------------------------------------- Что не правильно?
и то, и другое попробовал. С тем же результатом. Я хотел использовать les, чтобы не париться с настройкой es. Как я понял нужно писать buff без скобок, тогда получишь адрес в виде смещения по отношению к ds. А директрива "offset" вообще отсутствует: http://ru.wikipedia.org/wiki/Fasm Может еще идеи есть?
Код (Text): =================================================== LES Загрузка указателя с использованием регистра ES =================================================== Команда LES считывает из памяти по указанному адресу двойное слово (32 разряда), содержащее указатель (полный адрес некоторой ячейки), и загружает младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр, а старшую половину указателя (т.е. сегментный адрес) в регистр ES. Таким образом, команда: les reg, mem эквивалентна следующей группе команд: mov reg, word ptr mem mov ES, word ptr mem+2 В качестве первого операнда команды должен быть указан регистр общего назначения, в качестве второго - ячейка памяти. Пример 1: ;В полях данных: string db ... addr dd string ;В программом сегменте: les SI, addr ;ES:SI->string Пример 2: ;В полях данных mem dw ... memaddr dd mem ;В программном сегменте: lea BX, memaddr ;BX=адрес указателя ячейки mem les BX, [BX] ;BX=смещение ячейки mem, ;ES=сегментный адрес ячейки mem Пример 3: les DI, dptr[SI] ;Предполагается, что по адресу ;dptr начинается массив ;двухсловных указателей. ;Указатель, загруженный в ES:DI, ;отстоит от начала массива ;на величину в SI (кратную 4) курите )
Спасибо. В FASMe прокатывает только так (в нем скобки означают значение, а не адрес) : Код (Text): les bx, [addrBuff] ; деалем что-то ; Буфер buff rb 512*100 addrBuff dd buff Что значит команда les я в курсе, потому и хочу ее использовать, но все равно спасибо.
Ну всмысле я всё вместе с примерами скинул... чтоб размыть все сомнения если они были =)))) мб ктото не знает...
неправильно будет работать, т.к. загрузит в es 0 вообще это не тот случай когда нужно использовать les, IMHO. здесь простым mov'ом можно обойтись