C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ASM, Двумерный массив
exp
Отправлено: 29.04.2004, 00:07


Мастер участка

Группа: Участник
Сообщений: 304



Подтвердите мои опасения: 1) Двумерных массивов в асме нет.
2) Их нужно представлять в виде одномерного со строками, расположенными подряд одна за другой.
SoulBringer
  Отправлено: 29.04.2004, 01:30


Ученик-кочегар

Группа: Участник
Сообщений: 6



Конечно нет, на то от и АСМ biggrin.gif
Многомерные массивы нужно организовывать самому.

А какая у тебя задача? И при чём тут Билъдер?
Георгий
Отправлено: 29.04.2004, 10:55


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



кстати — в чистом си тоже нет динамических двумерных массивов.
а применительно асм понятие массив вообще не имеет смысла.
exp
Отправлено: 29.04.2004, 21:12


Мастер участка

Группа: Участник
Сообщений: 304



да нет спасибо. с задачей я разберусь. smile.gif . Просто у нас препод (точнее преподша) "слишком много знает", чтоб еще со студентами возиться и им че-то обьяснять.
А вообще задача такая: написать курсач по графике в асме.... без лекций smile.gif... почти без практики...smile.gif))).
Георгий
Отправлено: 30.04.2004, 22:05


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Ну так, давай, выкладывай задачу — всем форумом решим.
Тут не я один с асмом 86х дружу.
exp
Отправлено: 30.04.2004, 23:36


Мастер участка

Группа: Участник
Сообщений: 304



Ладна. Задача такая.
Сымитировать передвижение увеличительного стекла по экрану.
Вся математика для задачи уже есть.
Мне очень интересно следующее:
Допустим центр лупы движется по кругу, тогда я могу задать уравнение движения и высчитать координаты центра в любой момент времени. Но для этого мне придется использовать тригонометрические функции, которые, ясное дело, дадут мне ДЕЙСТВИТЕЛЬНЫЙ результат. Координаты точки на экране — ЦЕЛЫЕ числа. Вопрос: как преобразовать дейсвительное число в целое?
Как напишу выложу на всеобщую критику... biggrin.gif.
Всем спасибо. biggrin.gif
Георгий
Отправлено: 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ти битных регистра
CODE
cmp Ax, Bx

причём в bx находится число с установленным старшим битом — т.е. отрицательное smile.gif
задавать вопрос "почему отрицательное число меньше положительного" не будешь?

исправлять это надо так:
1. использовать 32х битные регистры — eax, ebx и т.д.
2. внимательно посмотреть все команды серии jxx — среди них, вродебы, были те, которые анализируют флаги так, как будто сравнивались беззнаковые числа.

ЗЫ. дизассемблер мне подсказал, что нужный тебе jump зовётся jae
exp
Отправлено: 02.05.2004, 22:31


Мастер участка

Группа: Участник
Сообщений: 304



Да. На счет шаманства это я погорячился. Седня эту фишку насчет отрицательного продыбал.

А вот насчет jumpo'ов...
В методе, которую нам выдали даны следующие коменты к ним

"...
jae — ВЫШЕ или равно
jge — БОЛЬШЕ или равно
..."
Ну как? Разница чувствуется?

Проверил. jae пашет на ура!
(через 10 минут...)
а вот с eax, eabx — заминка.... Спасибо за jae Георгий. Ты великий шаман!!! smile.gif
Пошел ка я разбираться с 32-разрядными.
exp
Отправлено: 03.05.2004, 23:09


Мастер участка

Группа: Участник
Сообщений: 304



СВЕРШИЛОСЬ!!!!!!!!!!!!!!!!!!!!!!!!!!
Только здесь и сейчас вы можете скачать абсолютно бесплатные исходники курсового проекта по организации и функционированию ЭВМ.
Итак....
Курсовой проект "Линза".... встречаем...



Фу... бред. biggrin.gif
Георгий, спасибо на 66.2 Kb тебе... biggrin.gif biggrin.gif biggrin.gif
Товарищи, оцените пожалуйста плод 4-х дневного студенческого труда.

Отредактировано exp — 04/05/2004, 00:12

User Attached Image Скачать файл
Lupa.asm


Георгий
Отправлено: 04.05.2004, 00:35


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



прикольно смотрится!

я на 1м курсе только вот такое делал да и то на bc3.1:


User Attached Image Скачать файл
3DGRAPH_.ZIP


Asher
Отправлено: 04.05.2004, 10:35


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
По поводу
QUOTE
"...
jae — ВЫШЕ или равно
jge — БОЛЬШЕ или равно
..."
Ну как? Разница чувствуется?

В нормальных wink.gif книгах по ASMx86 обычно указывают, что "ниже"(b-below) и "выше" (a-above), ассоциируют с беззнаковым сравнением, а "меньше"(l-less) и "больше"(g-greater) со знаковым.
И посмотри на флаги, по которым они срабатывают. Там не одно и то-же.
exp
Отправлено: 04.05.2004, 22:04


Мастер участка

Группа: Участник
Сообщений: 304



Ту так вот указание на беззнаковое и знаковое сравнение и не было сделано в методе, которую нам выдали... Ну да ладно. тему можно закрывать.
Всем спасибо.....

Георгий, жаль, но твой файлик не качается.
//------------------------------------------------------------------------
А у кого нет асма, но посмотреть хочется вот экзешник...

Отредактировано exp — 04/05/2004, 23:11

User Attached Image Скачать файл
Lupa.zip



Вернуться в Вопросы программирования в C++Builder