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

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


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

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

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

Выпуск № 99
от 31.03.2005, 13:10

Администратор:Калашников О.А.
В номере:Вопросов: 3, Ответов: 12


Вопрос № 18749: Уважаемые эксперты при создании файла выводит сообщение что неправильно указан путь при создании файла. PATH DB 'D:\33\asm.txt', 0...
Вопрос № 18761: Здрасте... Допустим есть сишный вызов функци: glClearColor(0.75f,0.75f,0.75f,1.0f) или числа без f glColor3f(1.0,0.0,1.0) Как мне скормить ассемблеру(Tasm) эти числа,как они переводятся в dword или word ? что мне поставить пос...
Вопрос № 18772: Привет всем! Имеется массив var1 (см. приложение). Необходимо прочитать в регистр edi значение первого элемента массива, используя MOV, а в esi - прочитать значение второго элемента массива, используя ТОЛЬКО MOV. Вопрос...

Вопрос № 18749
Уважаемые эксперты при создании файла выводит сообщение что неправильно указан путь при создании файла.
PATH DB 'D:\33\asm.txt', 0
Отправлен: 25.03.2005, 12:03
Вопрос задал: Neo (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Dark_Lord
Здравствуйте, Neo!
А какой компилятор используется? в тасм и масм достаточно PATH db 'D:33asm.txt'
Какая функция, в какой операционной системе, используется. Если дос - открыть файл или windows - CreateFile с флагом OPEN_EXISTING, то если файл не существует, то файл не откроется. И подобных ситуаций очень много, напиши и то, как ты пытаешся открыть файл, а не только путь файла...
Ответ отправил: Dark_Lord (статус: Профессионал)
Отправлен: 25.03.2005, 12:20


Вопрос № 18761
Здрасте...
Допустим есть сишный вызов функци:
glClearColor(0.75f,0.75f,0.75f,1.0f)
или числа без f
glColor3f(1.0,0.0,1.0)
Как мне скормить ассемблеру(Tasm) эти числа,как они переводятся в dword или word ?
что мне поставить после push ?
push ???? ; 1.0
push ???? ; 0.75
push ???? ; 0.75
push ???? ; 0.75
call glClearColor
Я в си полный баран,да и изучать его как-то неохото.
Да и где можно скачать gl.h ....спасибо
Отправлен: 25.03.2005, 16:55
Вопрос задал: glist (статус: Посетитель)
Всего ответов отправлено: 6

Отвечает: DSota
Здравствуйте, glist!
1. Один вариант см. ниже
2. скопировать из Borland C++ Builder.

Приложение:

Ответ отправил: DSota (статус: Студент)
Отправлен: 25.03.2005, 17:12
Оценка за ответ: 4

Отвечает: Dark_Lord
Здравствуйте, glist!
Можно попробовать 0.75f и т.п. Многие ассемблеры нормально компилируют это. Масм точно компилирует, при условии, что это содержимое переменной. В крайнем случае используй макросредства, см. Приложение

Приложение:

Ответ отправил: Dark_Lord (статус: Профессионал)
Отправлен: 25.03.2005, 19:33

Отвечает: Master135
Здравствуйте, glist!
Параметры передаются в отличие от Паскаля в прямом порядке, т.е. извлекать их будешь в прямом порядке и загонять в стек не надо. А по поводу где скачать- пропиши в поисковике...
Ответ отправил: Master135 (статус: 2-ой класс)
Отправлен: 25.03.2005, 22:57

Отвечает: Евгений Иванов
Здравствуйте, glist!
такие данные с плавающей точкой передаются по ссылке.
то есть, передаётся адрес, где уже и содержится само число.
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 26.03.2005, 00:11

Отвечает: Котиев Зураб
Здравствуйте, glist!
Как мне скормить ассемблеру(Tasm) эти числа,как они переводятся в dword или word ?
http://www.wasm.ru/article.php?article=edfpu01
tasmу можно скормить так
.data
flt dd 0.75
.code
push flt
в памяти вызов
glColor3f(1.0,0.75,1.0)
выглядит примерно так
push 3f800000
push 3f400000
push 3f800000
call glColor3f
а вызов glColor3d(1.0,0.75,1.0)
push0
push 3ff000000
push 0
push 3fe80000
push 0
push 3ff00000
call glColor3d
т.е. вызов зависит от точночти передаваемых чисел(двойная или обычная)
Ответ отправил: Котиев Зураб (статус: 3-ий класс)
Отправлен: 26.03.2005, 16:55
Оценка за ответ: 5

Отвечает: Bob Johnson
Здравствуйте, glist!
Определяются числа с плавающей точкой с помощью dd (32-х разрядные, т.е. float) и dq (64-х разрядные, double). При этом ты можешь заметить, что dd применяется и для определения обычных целых 32-х разрядных чисел. Для того, чтобы компилятор понял, что тебе нужно определить именно число с плавающей точкой, в числе должа стоять десятичная точка, например:
dd 10 - это будет определение 32-х разрядного целого числа 10.
dd 10.0 - это будет определение 32-х разрядного числа с плавающей запятой.
передаются же они в соответствии с выбранной моделью вызова.

* EMan2.0: ---===*** Debug mode ***===---

Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 27.03.2005, 00:05
Оценка за ответ: 5


Вопрос № 18772
Привет всем!
Имеется массив var1
(см. приложение).
Необходимо прочитать в регистр edi
значение первого элемента массива,
используя MOV, а в esi - прочитать значение
второго элемента массива, используя ТОЛЬКО MOV.
Вопрос - Как определить этот массив или ввести
дополнительные переменные, чтобы можно было выполнить
эти условия без использования дополнительных регистров и LEA?
Спасибо за ответ.

Приложение:

Отправлен: 25.03.2005, 21:22
Вопрос задал: 1 (статус: 1-ый класс)
Всего ответов отправлено: 5

Отвечает: mvp
Здравствуйте, 1!
Можно обращаться ко второму элементу как mov esi, var1[4], например. Но Ваш пример делает ту же процедуру и всё должно работать. Что имелось в виду под ТОЛЬКО MOV?
Ответ отправил: mvp (статус: 1-ый класс)
Отправлен: 25.03.2005, 21:52
Оценка за ответ: 4
Комментарий оценки:
Имелось в виду что так как у меня написано
в регистре edi - то что нужно (первый элемент массива), а в esi - не то что нужно, то есть не второй элемент массива. Я могу использовать LEA, чтобы все было ЧИКИ ПУКИ, но хочу использовать MOV, так как думаю это оптимальней и проще.

Отвечает: Евгений Иванов
Здравствуйте, 1!
а ты что же, думаешь, что вторая команда, которую ты привёл - это не ПРОСТО MOV ?!! :))
это такая же команда, как и первая ;)
изучи получше команды.
есть много вариантов адресации:
mov eax, offset var1
sub ecx,ecx
inc ecx
mov esi, [eax]
mov esi, [eax+4]
mov esi, [eax+ecx*4]
inc ecx
; третий элемент
mov esi, [eax+ecx*4]
удачи!
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 26.03.2005, 00:35

Отвечает: Вiктор
Доброго вам времени суток, 1!
не совсем понял ваш вопрос - чем вас не устраивает ваш код, в чём же суть вопроса?
"mov esi,[адрес памяти, второго элемента массива var1]"
вы же сами это написали, что же вас не устраивает? тут "ТОЛЬКО MOV, без использования дополнительных регистров и LEA"
если вы имеете в виду
mov esi,[var1+х]
где х - какая-то переменная или регистр, получающие значение во время работы проги, то:
если это регистр (eax)-> mov esi,[var1+eax]
если это переменная, то вам придётся прибавить к ней (или к её копии) адрес массива
x dd 0
...
add x,offset var1
mov esi,[x]
а если вы имеете в виду чтобы компилятор ставил конкретный адрес во время
компиляции, так ведь он так и делает...и вместо значения "var1+4" подставляет конкретное число.
Если вас не так поняли, то пожалуйста, повторите ещё раз и разъясните вопрос
а то ведь неясно как отвечать
удачи!
Ответ отправил: Вiктор (статус: 3-ий класс)
Отправлен: 26.03.2005, 01:37

Отвечает: psevdo
Здравствуйте, 1!
Сам я еще плохо разбираюсь в этом, но может так:
var1 dd 4 dup(0)
........................
;указываем на 1 элемент
mov cx,1
mov edi,var1[cx]
........................
;указываем на 2 элемент
inc cx
mov esi,var1[cx]
Ответ отправил: psevdo (статус: 1-ый класс)
Отправлен: 26.03.2005, 15:30

Отвечает: DSota
Здравствуйте, 1!
Так ваш пример и делает все это! Может быть вы имели ввиду, что для полной адресации должно присутствовать (для полной замены LEA - но при этом придется использовать дополнительный регистр - DS):

Приложение:

Ответ отправил: DSota (статус: Студент)
Отправлен: 28.03.2005, 11:01


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

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

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

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

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


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


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


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное