Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 240
от 15.09.2005, 23:48

Администратор:Калашников О.А.
В рассылке:Подписчиков: 262, Экспертов: 22
В номере:Вопросов: 6, Ответов: 14


Вопрос № 26118: Здравствуйте. Теперь следующая проблема: Короче создал файл proga.asm с текстом (смотрите приложение), расположил его на диске C. Запустил командную строку, и пишу: C:MASM32BINml.exe C:prog.asm /AT и выходит сообщение: "cannot find link....
Вопрос № 26129: Я запутался в переходах! В чем отличие ближнего короткого перехода, от ближнекго длинного? Близкий - в пределах сегмента, дальний - за сегментом, т.е. меняются и CS, и IP. Что означает Длинный и короткий?...
Вопрос № 26135: ;Как вывести точку на экран? ;Не выводится! :-( CSEG segment assume CS:CSEG, DS:CSEG, SS:CSEG org 100h start: MOV AX,0013h ; видео режим 320x200 int 10h MOV AH,0Ch ; вывод точки на экран MOV DX,100 ;...
Вопрос № 26141: Не пашет, всё понимаю, текст вроде правильный, но не работает ничего, просто прерывание 16 на черном экране, что делать не знаю... Я не выдержал и просто СПИСАЛ пример, но не чего. Не приложение, а "Press any key to continue"....
Вопрос № 26143: Здравствуйте. Есть вопрос по Ассемблеру Скопировал файл Prog01.asm (который находился в учебнике по ассемблеру у калашникога в папке Файлы-приложения) на диск C и пишу в командной строке: C:MASM32BINml.exe C:Prog01.asm /AT и выходит...
Вопрос № 26147: Здравствуйте, господа программисты-эксперты. ассемблер я изучаю недавно, практики нет, так, только теория. не могли бы вы объяснить доступно мне ( чайнику в этом деле ), если в регистрах общего назначения размер 2 байта, то как туда умещаю словосочет...

Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное