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