exp |
Отправлено: 29.04.2004, 00:07 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Подтвердите мои опасения: 1) Двумерных массивов в асме нет.
2) Их нужно представлять в виде одномерного со строками, расположенными подряд одна за другой.
|
|
SoulBringer |
Отправлено: 29.04.2004, 01:30 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Конечно нет, на то от и АСМ
Многомерные массивы нужно организовывать самому.
А какая у тебя задача? И при чём тут Билъдер? |
|
Георгий |
Отправлено: 29.04.2004, 10:55 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
кстати — в чистом си тоже нет динамических двумерных массивов.
а применительно асм понятие массив вообще не имеет смысла. |
|
exp |
Отправлено: 29.04.2004, 21:12 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
да нет спасибо. с задачей я разберусь. . Просто у нас препод (точнее преподша) "слишком много знает", чтоб еще со студентами возиться и им че-то обьяснять.
А вообще задача такая: написать курсач по графике в асме.... без лекций ... почти без практики...))).
|
|
Георгий |
Отправлено: 30.04.2004, 22:05 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Ну так, давай, выкладывай задачу — всем форумом решим.
Тут не я один с асмом 86х дружу. |
|
exp |
Отправлено: 30.04.2004, 23:36 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Ладна. Задача такая.
Сымитировать передвижение увеличительного стекла по экрану.
Вся математика для задачи уже есть.
Мне очень интересно следующее:
Допустим центр лупы движется по кругу, тогда я могу задать уравнение движения и высчитать координаты центра в любой момент времени. Но для этого мне придется использовать тригонометрические функции, которые, ясное дело, дадут мне ДЕЙСТВИТЕЛЬНЫЙ результат. Координаты точки на экране — ЦЕЛЫЕ числа. Вопрос: как преобразовать дейсвительное число в целое?
Как напишу выложу на всеобщую критику... .
Всем спасибо.
|
|
Георгий |
Отправлено: 01.05.2004, 11:40 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
К сожалению справочник по асму на работе, но по памяти могу сказать, что мат сопроцессор умеет значения из своего стека преобразовывать в целочисленные переменные — инструкция FISTP
что то вроде вот этого:
CODE | fld qword ptr [твоя переменная типа double]
fistp dword ptr [твоя переменная типа int] | |
|
exp |
Отправлено: 01.05.2004, 21:02 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Спасибо. проверю.
Но у меня щас возникла проблема, которая довела меня сегодня до нервного смеха. ТАКОГО ШАМАНСТВА Я ЕЩЕ НЕ ВИДЕЛ!!!!
Вот этот демонический код :
CODE |
CodeSg segment 'CODE'
assume CS:CodeSg, DS:DataSg
begin:
mov AX, DataSg
mov DS, AX;
mov Bx, 35600
mov Ax, 800
cmp Ax, Bx
jge True
mov Ax, 0
jmp ExitProc
True:
mov Ax, 1
ExitProc:;
mov Ax,4c00h
int 21h ; Вот и вся прога :)
CodeSg ends;------------------------------------
DataSg segment 'DATA'
DataSg ends;------------------------------------
StackSg segment stack 'STACK'
db 256 dup(0)
StackSg ends;------------------------------------
end begin
|
Казалось бы, что может быть проще чем сравнение двух чисел? Только программа "Helo World"!
Но попробуйте откомпилить и продебажить. У вас получится, что число в Ax (800) больше чем число в Вх (35600). Я от этого просто офигел. и я бы еще понял если бы это случилось первого апреля, НО 1-го МАЯ. Это перебор!
Пожалуйста подскажите какой нюанс я не догнал.
Отредактировано exp — 01/05/2004, 22:06
|
|
Георгий |
Отправлено: 01.05.2004, 23:40 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
ты сравниваешь 2 16ти битных регистра
причём в bx находится число с установленным старшим битом — т.е. отрицательное
задавать вопрос "почему отрицательное число меньше положительного" не будешь?
исправлять это надо так:
1. использовать 32х битные регистры — eax, ebx и т.д.
2. внимательно посмотреть все команды серии jxx — среди них, вродебы, были те, которые анализируют флаги так, как будто сравнивались беззнаковые числа.
ЗЫ. дизассемблер мне подсказал, что нужный тебе jump зовётся jae
|
|
exp |
Отправлено: 02.05.2004, 22:31 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Да. На счет шаманства это я погорячился. Седня эту фишку насчет отрицательного продыбал.
А вот насчет jumpo'ов...
В методе, которую нам выдали даны следующие коменты к ним
"...
jae — ВЫШЕ или равно
jge — БОЛЬШЕ или равно
..."
Ну как? Разница чувствуется?
Проверил. jae пашет на ура!
(через 10 минут...)
а вот с eax, eabx — заминка.... Спасибо за jae Георгий. Ты великий шаман!!!
Пошел ка я разбираться с 32-разрядными.
|
|
exp |
Отправлено: 03.05.2004, 23:09 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
СВЕРШИЛОСЬ!!!!!!!!!!!!!!!!!!!!!!!!!!
Только здесь и сейчас вы можете скачать абсолютно бесплатные исходники курсового проекта по организации и функционированию ЭВМ.
Итак....
Курсовой проект "Линза".... встречаем...
Фу... бред.
Георгий, спасибо на 66.2 Kb тебе...
Товарищи, оцените пожалуйста плод 4-х дневного студенческого труда.
Отредактировано exp — 04/05/2004, 00:12
|
|
Георгий |
Отправлено: 04.05.2004, 00:35 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
прикольно смотрится!
я на 1м курсе только вот такое делал да и то на bc3.1:
|
|
Asher |
Отправлено: 04.05.2004, 10:35 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
По поводу QUOTE | "...
jae — ВЫШЕ или равно
jge — БОЛЬШЕ или равно
..."
Ну как? Разница чувствуется? |
В нормальных книгах по ASMx86 обычно указывают, что "ниже"(b-below) и "выше" (a-above), ассоциируют с беззнаковым сравнением, а "меньше"(l-less) и "больше"(g-greater) со знаковым.
И посмотри на флаги, по которым они срабатывают. Там не одно и то-же.
|
|
exp |
Отправлено: 04.05.2004, 22:04 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Ту так вот указание на беззнаковое и знаковое сравнение и не было сделано в методе, которую нам выдали... Ну да ладно. тему можно закрывать.
Всем спасибо.....
Георгий, жаль, но твой файлик не качается.
//------------------------------------------------------------------------
А у кого нет асма, но посмотреть хочется вот экзешник...
Отредактировано exp — 04/05/2004, 23:11
|
|