Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ASM - с чего начать? 
:(
    Опции темы
NightGoblin
Дата 7.10.2003, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: нет
Всего: 11



Shuricksoft,
не знаю как в паскале, а операторы << и >> в си - это операторы логического сдвига, на асме это команды SHL/SHR соответственно: сдвигают битовое значение регистра влево/вправо, заполняя освободившиеся биты нулями... Плюс, есть SAR для чисел со знаком (арифметический сдвиг) - в этом случае биты, освобождающиеся после сдвига, заполняются не нулями, а старшим (знаковым) битом.

Еще в асме есть хорошие команды циклического сдвига (ROR/ROL/RCR/RCL), которых, к сожалению, на си нет.


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
Shuricksoft
Дата 7.10.2003, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine

Репутация: нет
Всего: нет



NightGoblin, что самое весёлое, в Паскале slr/shr команды так и пишутся =) Эх, ещё раз убеждаюсь, что Паскаль явно удобней С. Но это уже отдельная история =)
А вот sar/ror/rol/rcr/rcl в Паскале тоже нет.
PM MAIL ICQ   Вверх
Chingachguk
Дата 13.10.2003, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Цитата

Но просьба в силе: приведи, плз, паскалевский эквивалент value&(1<<i). Остальное понял, а вот что значит два знака << и почему это в скобках - неясно =)


В Паскале в этом смысле все то же самое - ну, об этом уже написали. В этом конкретном примере же:

Цитата

if (value and (1 shl i)) <> 0 then

или даже такой вариант:

if ((value shr i) and 1) = 1



Цитата

Вот этот код, с виду, работает. Инвертирует значение флага равенства и флага "больше-меньше". Можно, конечно, проверять, надо ли нам инвертировать флаг равенстсва, но к изменению результата это не приведёт, а код увеличит, уменьшив быстродействие =)

CODE 

lahf
xor ah,01000001b
sahf


Я думаю, с этим пока достаточно ;) Главное было разобраться в общем, а в деталях в конкретной задаче ты разберешься сам !

Следующее занятие (урок), если я соберусь со временем, я планирую посвятить BOOT...

Пока же, если есть желание, попробуй написать алгоритм построения линии в виде отдельно оформленной функции на языке Паскаль. Т.е. примерно это должно выглядеть так:

Цитата

Procedure DrawLine256(X1,Y1,X2,Y2: word; Color: Byte);
  begin
  asm
  mov  ax,0A000h
  mov  es,ax
  mov  ax,X1
  { ... }
  end;
  end;


Помни, что к переданным параметрам (здесь - по значению) в асм-вставке так и обращаются: mov bx,Y2 или mov al,Color. Также следует знать, что нельзя разрушать входные значения регистров SS,DS,BP,SP (если необходимо, можно сохранить и восстановть их на стеке или (для SS:SP) в ячейке памяти). Однако в данном случае можно определять локальные переменные и спокойно их использовать:

Цитата

Procedure DrawLine256(X1,Y1,X2,Y2: word; Color: Byte);
  var
    TempX: word;
  begin
  asm
  mov  ax,X2
  mov  TempX,ax
  { ... }
  end;
  end;


и т.п.

Это довольно сложная задача, но с простым условием: построить линию, начинающуюся в точке с координатами (X1,Y1) и заканчивающуюся в точке (X2,Y2).


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Shuricksoft
Дата 14.10.2003, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine

Репутация: нет
Всего: нет



Кажется, я знаю, как выполнить эту задачу... Только мне надо знать, как производить деление. Нашёл в электронном справочнике, что это делается командой div. Решил проверить на простом коде:
Код

...
var
b : byte;
...
asm
mov b,2
mov al,10
div b
...

ну, дальше - вывод на экран =) Так вот, после выполнения команды деления выскакивает ошибка деления на ноль! А вроде как делитель не равен нулю и разрядность частного не превышает разрядность регистра... В чём ошибка и как правильно производить деление?
PM MAIL ICQ   Вверх
Shuricksoft
Дата 14.10.2003, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine

Репутация: нет
Всего: нет



Всё, понял сам =) Всего заменить al на ax =)
PM MAIL ICQ   Вверх
oleg1973
Дата 14.10.2003, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



деление это не по модному ( я про div оператор) smile.gif
чтоб на 2 поделить нада вправо на 1 сдвинуть smile.gif
mov eax,10
shr eax,1

все в еах результат будет smile.gif


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Shuricksoft
Дата 14.10.2003, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine

Репутация: нет
Всего: нет



А с чего ты взял, что я буду на 2 делить? biggrin.gif Тем более, мы здесь пока под ДОС асм-ом балуемся, а ты с расширенными регистрами wink.gif

Это сообщение отредактировал(а) Shuricksoft - 14.10.2003, 14:22
PM MAIL ICQ   Вверх
oleg1973
Дата 14.10.2003, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



mov ax,10
shr ax,1

под дос вариант smile.gif
а на 2 как у тебя в примере smile.gif




--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Shuricksoft
Дата 14.10.2003, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine

Репутация: нет
Всего: нет



Я понимаю, как это под ДОС выглядит =)
А, ну, значит, пример такой попался неудачный =) Там любое число может быть =)
PM MAIL ICQ   Вверх
Chingachguk
Дата 15.10.2003, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Цитата

mov ax,10
shr ax,1

под дос вариант


Вот и нет. Спокойно пишем:

Цитата

begin
  asm
  db 066h,0B8h,00Ah,000h,000h,000h {mov eax,10}
  db 066h,0D1h,0E8h {shr eax,1}
  end;
end.


Цитата

Кажется, я знаю, как выполнить эту задачу... Только мне надо знать, как производить деление.


Про деление уже писали, а вот есть и команды умножения: mul и imul (знаковая). Кстати, есть знаковое деление: idiv


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Chingachguk
Дата 15.10.2003, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Цитата

mov ax,10
shr ax,1

под дос вариант


Вот и нет. Спокойно пишем:

Цитата

begin
  asm
  db 066h,0B8h,00Ah,000h,000h,000h {mov eax,10}
  db 066h,0D1h,0E8h {shr eax,1}
  end;
end.


Цитата

Кажется, я знаю, как выполнить эту задачу... Только мне надо знать, как производить деление.


Про деление уже писали, а вот есть и команды умножения: mul и imul (знаковая). Кстати, есть знаковое деление: idiv


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
oleg1973
Дата 15.10.2003, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



Chingachguk smile.gif



--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
NightGoblin
Дата 15.10.2003, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: нет
Всего: 11



Chingachguk,
ну это уже машинный код пошел, а не асм =)))


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 15.10.2003, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Байты я забил ибо Пас не "вкуривает" команды выше 286. Даже в obj.

На самом деле для "доса" я даже "такое" писал (это кусок патча):

Цитата

.586p
HookedVector   equ 1
VectorEMM      equ 67h
VectorSelf     equ 63h
MaxPackets     equ 10000    ; Packets in ring buffer
DebugPort      equ 177h
; Table 2914
Table2914 struc
  _CR3      dd ?
  _GDTRaddr dd ?
  _IDTRaddr dd ?
  _LDTR     dw ?
  _TR       dw ?
  _CS_EIP   dq ?
Table2914 ends
...
;
@@InsertingCode:
;;  jmp  @@SkipSubroutins
; Set Stack - like sf
  ;;mov  ss,dx
  ;;mov  esp,ebx
; Set Trap(s)
  mov  eax,cr4
  or   eax,01000b
  mov  cr4,eax
  mov  eax,(0110011001100110b shl 16)+(07FFh) ; 020703h ; 010000001100000010b
  push ebx
  xor  ebx,ebx
@@MoveBXPort:
  mov  bx,DebugPort ; ds:Port
  mov  dr7,eax
  mov  dr0,ebx
  add  ebx,2
...



... Жаль, не застал я времени дос-экстендеров ;(((

Это сообщение отредактировал(а) Chingachguk - 15.10.2003, 22:05


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Serzh
Дата 17.10.2003, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



Я вернулся!!!
Раньше я был Melancholy, но забыл пароль и теперь я Serzh!!!
че тута происходит?
;)
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.