Вопрос № 31928: Здравствуйте еще раз, уважаемые эксперты!У меня такая ситуация с ассемблированием.
Набираю в cmd.exe пути до ml.exe и prog01.asm C:masm611inml.exe C:prog01.asm/AT
И получаю ошибку fatal error A1000: cannot open file : C:prog01.asm/AT Но...Вопрос № 31941: Здравствуйте уважаемые эксперты. Помогите разобраться со следующей заморочкой:
- команда lea dx,mem эквивалентна mov dx,offset mem
так вот, как понять такую команду:
lea eax,[ecx+edx]
эту команду я подсмотрел при отладке в делфи на vi...Вопрос № 31962: Доброе время суток!
Что-то я немного запутался, помогите разобраться...
переведем числа в обратный код:
(-64)+(+27) -----------> 11100100+10111111=110100011
(+38)+(-38) -----------> 01011001+11011001=100110010
А в д...Вопрос № 31974: Уважаемые эксперты, как пользоваться утилитой LIB.EXE для создания библиотек( для 16-ти разрядного ассемблера)? Если можно напишите пожалуйста мне примерчик типа библиотечной функции (функция=x*y). И надо ли объявлять прототипы подобно MASM32 в основ...
Вопрос № 31.928
Здравствуйте еще раз, уважаемые эксперты!У меня такая ситуация с ассемблированием.
Набираю в cmd.exe пути до ml.exe и prog01.asm C:masm611inml.exe C:prog01.asm/AT
И получаю ошибку fatal error A1000: cannot open file : C:prog01.asm/AT Но созданный
батник "C:masm611inml.exe C:prog01.asm /AT" почему то работает нормально,в чем тут
проблемма?Папки BIN и BINR обьединил в BIN, прописал путь к папке C:MASM611BIN в PATH.
P.S опер. сист.WIN/XP.
Отвечает: Евгений Иванов
Здравствуйте, Игорь Стариков Иванович!
http://rusfaq.ru/?Step=info&Action=Question&ID=31569
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 21.12.2005, 11:29
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Игорь Стариков Иванович!
Евгений Иванов хотел сказать, что подобные вопросы ну очень часто повторяются.
И изрядно достали.
Ссылка верная, но там нет конкретного ответа на поставленный вопрос :(
Хотя и этот вопрос уже был и не раз.
Дело в том, что "тщательнее надо быть"... Параметр /AT надо бы отделять пробелом.
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: 10-ый класс)
Отправлен: 21.12.2005, 12:23 Оценка за ответ: 5
Вопрос № 31.941
Здравствуйте уважаемые эксперты. Помогите разобраться со следующей заморочкой:
- команда lea dx,mem эквивалентна mov dx,offset mem
так вот, как понять такую команду:
lea eax,[ecx+edx]
эту команду я подсмотрел при отладке в делфи на view cpu
сделал функцию с двумя параметрами типа integer и собственно функция возращает результат их суммы. Как бы логика понятна, но выглядит это как косвенная адресация чтоли...
странно все это...
Отвечает: Евгений Иванов
Здравствуйте, Solodov Evgeniy Vladimirovich!
LEA - вычисление эффективного адреса. Она не загружает ниоткуда никаких значений из памяти :)
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 21.12.2005, 13:25
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Solodov Evgeniy Vladimirovich
Начну с того, что lea dx,mem не эквивалентна mov dx,ofset mem.
У них только результат работы одинаков!
mov загружает непосредственный опеанд в регистр.
lea загружает эффективный адрес в регистр, в данном случае просто адрес переменной mem.
В случае lea eax,[ecx+edx], вычисляется эффективный адрес выражения [ecx+edx],
как сумма значений указанных регистров, и результат присваивается eax.
Это не только выглядит как косвенная адресация, это она и есть. :)
Так что, ничего странного тут нет.
--------- Удачи!
Доброе время суток!
Что-то я немного запутался, помогите разобраться...
переведем числа в обратный код:
(-64)+(+27) -----------> 11100100+10111111=110100011
(+38)+(-38) -----------> 01011001+11011001=100110010
А в дополнительном коде вообщее...
(-73)+(+54):
10110111+01001010=100000001
(+19)-(-38):
01101100+11011001=
1111111111111111111111111111111111111111111111111111111110010011
Что не так, как правильно?
Спасибо!
Отправлен: 21.12.2005, 17:20
Вопрос задал: T0XA (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, T0XA!
Немного запутался, это мягко сказано...Такого намутил...
Давай сначала определимся в следующем:
1. В какой системе счисления числа записаны? Предположим, что в десятичной.
2. Что понимаем под обратным кодом? Лично я понимаю двоичную инверсию битов.
Например, 64d=40h=01000000b и тогда -64d = 0bfh = 10111111b
3. Что понимаем под дополнительным кодом? Лично я понимаю знаковую инверсию,
которая получится, когда к обратному коду добавить единицу.
Например, 73d=49h=01001001b и тогда -73d = 10110110b + 1 = 10110111b
Сложение положительного и отрицательного числа в дополнительном коде
должно дать ноль.
Когда разберешься с этим, тогда и со своими примерчиками сам справишься :)
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: 10-ый класс)
Отправлен: 21.12.2005, 18:05 Оценка за ответ: 5
Вопрос № 31.974
Уважаемые эксперты, как пользоваться утилитой LIB.EXE для создания библиотек( для 16-ти разрядного ассемблера)? Если можно напишите пожалуйста мне примерчик типа библиотечной функции (функция=x*y). И надо ли объявлять прототипы подобно MASM32 в основной программе?
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Яковлев Сергей Павлович!
Создаешь обычный модуль с одной функцией, обязательно объявляя ее имя как public . Ассемблируешь, получаешь obj-файл (в принципе, такой модуль может быть просто прилинкован обычным методом). Ну и формируешь библитотеку командой lib /out:<имя либы> <имя obj-файла>. И всех делов-то.
А вообще, если спросить lib /?, то можно увидеть описание всех параметров.