При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Информационный Канал Subscribe.Ru |
Выпуск № 240
от 15.09.2005, 23:48
Администратор: | Калашников О.А. |
В рассылке: | Подписчиков: 262, Экспертов: 22 |
В номере: | Вопросов: 6, Ответов: 14 |
Вопрос № 26.118 |
Здравствуйте. Теперь следующая проблема: Короче создал файл proga.asm с текстом (смотрите приложение), расположил его на диске C. Запустил командную строку, и пишу: C:MASM32BINml.exe C:prog.asm /AT и выходит сообщение: "cannot find link.exe". Пишу я: C:MASM32BINml.exe C:MyProgsproga.asm /AT /link и C:MASM32BINml.exe C:MyProgsproga.asm /AT /link но всё равно выходит сообщение: "cannot find link.exe". Насколько я понял нужно: прописать пути к компилятору в системной переменной PATH. На как это сделать, и где находится этот "PATH" Приложение: |
Отправлен: 10.09.2005, 00:00 Вопрос задал: Дмитрий Хаймин (статус: Посетитель) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1) |
Отвечает: ASMодей Здравствуйте, Дмитрий Хаймин! Системная переменная PATH находится в Мой компьютер-Свойства-Дополнительно-Переменные среды-Системные переменные. В ней еще много чего может быть прописано, поэтому допиши к ней в конец через ";" путь к папке MASMBIN. Можно, правда ничего не прописывать, но тогда компилировать придется в 2 захода. На первом шаге собственно скомпилировать программу, т.е. получить объектный файл программы, а на втором - скомпоновать этот объектник в исполняемый файл. Делается это так: 1. C:MASMBINml.exe C:MyProgprog.asm /AT /c 2. C:MASMBINlink.exe prog.obj,nul.map,nul.lib,nul.def |
Ответ отправил: ASMодей (статус: Профессионал) Отправлен: 10.09.2005, 08:42 |
Вопрос № 26.129 |
Я запутался в переходах! В чем отличие ближнего короткого перехода, от ближнекго длинного? Близкий - в пределах сегмента, дальний - за сегментом, т.е. меняются и CS, и IP. Что означает Длинный и короткий? |
Отправлен: 10.09.2005, 10:56 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: John Freeman Здравствуйте, Вася Пупкин! Short jump относительный с аргументом 1 байт => +- 127 байт, явно меньше длины сегмента, у long сколько надо (16 или 32 бит(2 или 4 байта) в win32 asm) --------- Ik bin ulien spiegel! |
Ответ отправил: John Freeman (статус: Профессор) Отправлен: 12.09.2005, 13:21 |
Отвечает: Татьяна Здравствуйте, Вася Пупкин! Как известно адрес метки хранится по адресу вида "сегмент:смещение". Если вы выполняете операции в пределах одного сегмента, т.е. изменяется только смещение, тогда вам необходим короткий переход, а если в пределах разных сегментов, нужен соответственно длинный переход, иначе будет браться адрес по данному сегменту, что не даст результатов. Желаю удачи! --------- Нет ничего невозможного!!! |
Ответ отправила: Татьяна (статус: 2-ой класс) Отправлен: 12.09.2005, 20:10 |
Отвечает: Boriss Здравствуйте, Вася Пупкин! Добавлю только, что весьма поучительно написать программу с неправильными переходами и посмотреть в отладчике, что получается. Тогда никогда не ошибетесь :)) --------- Прорвемся! (Быть может :(( ) |
Ответ отправил: Boriss (статус: Профессор) Отправлен: 13.09.2005, 13:43 |
Отвечает: Ayl Здравствуйте, Вася Пупкин! В процессорах x86 есть 3 вида переходов: короткий (short), ближний (near) и дальний (far). Короткий переход выполняется в пределах от -128 до +127 байт от адреса команды, следующей за командой перехода. В процессорах до 80286 включительно все условные переходы могли быть только короткими, поэтому приходилось извращаться. Начиная с процессора 80386 условный переход мог быть как коротким, так и близким. Близкий переход выполняется в пределах текущего сегмента. При выполнении такого перехода изменяется только регистр IP, регистр же CS сохраняет свое значение. Этот тип переходов используется при передаче управления в пределах одного модуля (в том числе, в программах типа COM, т.к. вся программа располагается в одном сегменте, хотя ничто не мешает программисту принудительно использовать дальние переходы, например, передавая управление другой программе). Дальний переход выполняется в пределах всей адресуемой памяти и при его выполнении изменяются и регистр CS, и регистр IP. При использовании команды вызова подпрограммы (CALL) могут быть использованы либо близкий переход, либо дальний. --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 13.09.2005, 14:46 |
Вопрос № 26.135 |
;Как вывести точку на экран? ;Не выводится! :-( CSEG segment assume CS:CSEG, DS:CSEG, SS:CSEG org 100h start: MOV AX,0013h ; видео режим 320x200 int 10h MOV AH,0Ch ; вывод точки на экран MOV DX,100 ; номер строки MOV CX,100 ; номер столбца MOV AL,01h ; цвет int 10h ; вызвать прерывание INT 20h CSEG ends end start |
Отправлен: 10.09.2005, 14:21 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Стас Здравствуйте, Вася Пупкин! Может просто задержку поставишь? :) до Int 20h: xor ax,ax int 16h |
Ответ отправил: Стас (статус: Специалист) Отправлен: 12.09.2005, 02:57 |
Отвечает: Евгений Иванов Здравствуйте, Вася Пупкин! ;------------------------------------------- ; IN-> CX,DX-координаты точки; AL-цвет; proc PlotPoint USES bx,dx mov bx,dx shl bx,8 shl dx,6 add bx,dx add bx,cx mov [es:bx],al ret endp --------- Что имеем - не храним, потерявши - плачем |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 12.09.2005, 09:37 |
Вопрос № 26.141 |
Не пашет, всё понимаю, текст вроде правильный, но не работает ничего, просто прерывание 16 на черном экране, что делать не знаю... Я не выдержал и просто СПИСАЛ пример, но не чего. Не приложение, а "Press any key to continue". Приложение: |
Отправлен: 10.09.2005, 20:22 Вопрос задал: Petya-kurochkin (статус: 1-ый класс) Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 5) |
Отвечает: Undertaker Здравствуйте, Petya-kurochkin! Необходимо установить сперва соответствующий видеорежим. Пожалуйста добавьте в начало своей программы следующие строки: mov ax,3 ; 80x25x16 int 10h |
Ответ отправил: Undertaker (статус: 4-ый класс) Отправлен: 12.09.2005, 02:48 Оценка за ответ: 5 Комментарий оценки: Спасибо, ещё не поробовал, но совет реальный. Не уходи с этой темы вдруг не получиться! |
Отвечает: Стас Здравствуйте, Petya-kurochkin! Ты не порвый попался на эту удочку WinXP. Сразу после begin: проинициализируй текстовый режим: MOV AX,0 INT 10H |
Ответ отправил: Стас (статус: Специалист) Отправлен: 12.09.2005, 02:54 Оценка за ответ: 5 Комментарий оценки: То же спасибо, а ведь у меня и вправду Win XP! Как попробую скажу, не уходи с этого минифорума, вдруг не получиться! |
Отвечает: Евгений Иванов Здравствуйте, Petya-kurochkin! mov ax,3 int 16 вначале это напишите --------- Что имеем - не храним, потерявши - плачем |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 12.09.2005, 09:31 Оценка за ответ: 5 Комментарий оценки: Извините, пожалуйста я понял за чем это и всё работает! |
Вопрос № 26.143 |
Здравствуйте. Есть вопрос по Ассемблеру Скопировал файл Prog01.asm (который находился в учебнике по ассемблеру у калашникога в папке Файлы-приложения) на диск C и пишу в командной строке: C:MASM32BINml.exe C:Prog01.asm /AT и выходит следующее сообщение: "cannot find link.exe". Насколько я понял нужно: прописать пути к компилятору в системной переменной PATH. На как это сделать, и где находится этот "PATH" Так как с Masm32 ничего не получилось я начинаю пробовать с Tasm. Пишу я значит теперь: C:TASMBINTASM.EXE C:Prog01.asm и жму Enter, но файл с расширением obj не создаётся, ну я продолжаю, пишу C:TASMBINTLINK.EXE C:Prog01.obj /t/x и выводиться сообщение что процессор NTVDM обнаружил недопустимую инструкцию, пропустить нажимаю но ничего не выходит, жму закрыть и теперь пишу C:TASMBINTLINK.EXE C:Prog01.obj /t и в командной строке появляються непонятные символы, и в конце написано: «(пропуск)?» жму Enter и выходит «Abort (стоп)?» и так до бесконечности можно нажимать Enter. Разумеется никакой ни com ни exe ни obj файлы не создались. Что делать? |
Отправлен: 10.09.2005, 20:49 Вопрос задал: Дмитрий Хаймин (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Стас Здравствуйте, Дмитрий Хаймин! Во первых: ты пишешь для Win32 или для DOS? Во вторых: как найти PATH я писал. В третьих: для компиляции программ легче все использовать батник, я уже не раз описывал такой. (еще раз в приложении для Win32) В четвертых: если tasm не делает OBJ значит была ошибка где-то. Попробуй результат ввывести в файл: C:TASMBINTASM.EXE C:Prog01.asm>error.txt и посмотри error.txt В пятых: возможно у тебя битый tlink... Приложение: |
Ответ отправил: Стас (статус: Специалист) Отправлен: 12.09.2005, 03:03 |
Отвечает: Калашников О.А. Здравствуйте, Дмитрий Хаймин! Скопируйте файл link.exe в каталог, где находися файл ml.exe. --------- Всё отлично!!! |
Ответ отправил: Калашников О.А. (статус: *Админ) Отправлен: 12.09.2005, 12:39 |
Вопрос № 26.147 |
Здравствуйте, господа программисты-эксперты. ассемблер я изучаю недавно, практики нет, так, только теория. не могли бы вы объяснить доступно мне ( чайнику в этом деле ), если в регистрах общего назначения размер 2 байта, то как туда умещаю словосочетание Hallo, world ! В книжках не описывают этого |
Отправлен: 10.09.2005, 21:46 Вопрос задал: S1lveR (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Стас Здравствуйте, S1lveR! Никак. "Hello, word!" хранится в памяти, не в регистрах. В регистрах, обычно, сохраняют адрес этого хелоу в памяти. А уж подпрограмма вывода текста на экран извлекает из памяти побайтно текст и выводит его на экран. |
Ответ отправил: Стас (статус: Специалист) Отправлен: 12.09.2005, 03:05 |
Отвечает: Евгений Иванов Здравствуйте, S1lveR! туда помещается не слово, а всего лишь адрес строки. --------- Что имеем - не храним, потерявши - плачем |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 12.09.2005, 09:33 |
© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.
Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки:
comp.soft.prog.faq
Отписаться
Вспомнить пароль
В избранное | ||