Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ASM - с чего начать? 
:(
    Опции темы
[auxx]
Дата 9.2.2003, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне очень помогла книга В.Ю. Пирогова. До нее я асм знал, а писать не умел.
PM MAIL   Вверх
Vco
Дата 22.2.2003, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот это супер прога smile.gif)
Код

asm
@a1:cli
jmp@a1
end;

Отключает свсе регистры компа...))
Хотя думаю это несложно. Сам я когда паскаль учисл (немного), интересовался асемблером т.к. на паскале изварённый метод работы с прерываниями, а асма удобнее...
правда сам почти нечего не знаю... sad.gif но не чего, зато дельфи учу hehe.gif


--------------------
Я всегда где-то рядом...! user posted image
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 23.2.2003, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Отключает свсе регистры компа...))


Не регистры, а в win98 вводит в транс драйвер, вирутализирующий флаг прерываний VIF ;)
В NT++ это уже не работает. А в досе просто cli, @L:jmp @L достаточно.



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


Опытный
**


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

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



мда сразу видно ассемблер знает =)
блин я разрываюсь...то дельфи, до ещё, что, та ассемблер=))


--------------------
Я всегда где-то рядом...! user posted image
PM MAIL WWW ICQ   Вверх
Mikel
Дата 24.2.2003, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А вложенные циклы как можно сделать? Например, линии через одну нарисовать.


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
Wowa
Дата 24.2.2003, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Народ, может быть будем задавать вопросы, типа:

Цитата
А вложенные циклы как можно сделать? Например, линии через одну нарисовать.


в отдельной теме? а здесь только будут уроки.
PM WWW   Вверх
Chingachguk
Дата 24.2.2003, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Народ, может быть будем задавать вопросы, типа:

QUOTE 
А вложенные циклы как можно сделать? Например, линии через одну нарисовать. 


в отдельной теме? а здесь только будут уроки.


Не, я думаю - нормально. Ведь он задал вопрос по урокам...

Вот вложенные циклы: с декрементом счетчика (cx) и инкрементом (si) ...


Цитата

const
  StartX  = 50;
  StartY  = 50;
  LenLines = 70;
  LinesNum =  5;
  LinesCol = 35;
  StepY    =  7;
begin
  {Устанавливаем графический режим монитора 13h, 320x200, 256 цветов}
  asm
  mov  ax,0013h
  int  10h
  end;
  asm
  mov  ax,0A000h
  mov  es,ax
  {Рисуем линиии через одну при помощи вложенных циклов}
  mov  bx,StartY
  mov  si,0 {Счетчик числа линий}
@@OutLines:
  {Вычисляем координату начала очередной линии: 320*y+StartX}
  mov  ax,320
  mul  bx
  add  ax,StartX
  mov  di,ax
  mov  cx,LenLines
  {Вложенный цикл}
  @@OutLine:
      mov  byte ptr es:[di],LinesCol
      inc  di
      dec  cx
      cmp  cx,0
      jnz  @@OutLine
  {Переходим к следующей линии}
  add  bx,StepY
  inc  si
  cmp  si,LinesNum
  jb  @@OutLines
  end;
  {Ожидаем нажатия клавиши}
  asm
  mov  ah,0
  int  16h
  end;
  {Устанавливаем текстовый режим монитора 03h, 80x25, 16 цветов текста и фона}
  asm
  mov  ax,0003h
  int  10h
  end;
end.



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


Опытный
**


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

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



Вот тоже написал smile.gif
Жду замечаний, комментариев.
И вопрос- а как можно было бы соединять линиями эти точки, если использовать ещё и паскаль- то понятно, а на чистом ассемблере?
Код
const
 col=10;
begin
asm
 mov  ax,0013h
 int  10h

 mov ax, 0000h
 int 33h
 mov ax, 0001h
 int 33h


 mov bx,0A000h
 mov es,bx

@@Cic:
 xor dx,dx
 xor cx,cx
 mov ax, 0003h
 int 33h

 shr cx,1

 mov ax,320
 mul dx
 add ax,cx
 mov bx,ax


 mov byte ptr es:[bx],col

 mov ax,bx
 sub bx,1
 mov byte ptr es:[bx],col

 mov bx,ax
 add bx,1
 mov byte ptr es:[bx],col


 mov bx,ax
 sub bx,320
 mov byte ptr es:[bx],col
 mov bx,ax
 sub bx,321
 mov byte ptr es:[bx],col
 mov bx,ax
 sub bx,319
 mov byte ptr es:[bx],col

 mov bx,ax
 add bx,320
 mov byte ptr es:[bx],col
 mov bx,ax
 add bx,321
 mov byte ptr es:[bx],col
 mov bx,ax
 add bx,319
 mov byte ptr es:[bx],col

 mov ah,01h
 int 16h
jz @@Cic

 mov  ax,0003h
 int  10h
end;
end.


Это сообщение отредактировал(а) Mikel - 26.2.2003, 03:28


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
Chingachguk
Дата 26.2.2003, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот так:

Цитата

const
  col=10;
  colline=14;
procedure line256(color:byte; x2,y2,x3,y3: word);
  begin
  asm
  push bp
  mov  si,x2
  mov  dx,y2
  mov  bx,x3
  mov  ax,y3
  push ax
  push dx
  mov  ax,dx
  mov  di,320
  mul  di
  add  ax,si
  mov  di,ax
  pop  dx
  pop  ax
  sub  bx,si
  sub  ax,dx
  mov  si,bx
  mov  bx,ax
  mov  cx,si
  mov  ax,bx
  cmp  cx,0
  jge  @1
  neg  cx
@1:
  cmp  ax,0
  jge  @2
  neg  ax
@2:
  cmp  cx,ax
  jae  @3
  xchg cx,ax
@3:
  cld
  mov  al,color
  mov  bp,cx
  test cx,cx
  jz @@Ex
@line:  push di
        push ax
        mov  ax,si
        imul cx
        idiv bp
        add  di,ax
        mov  ax,bx
        imul cx
        idiv bp
        mov  dx,320
        imul dx
        add  di,ax
        pop  ax
        stosb
        pop  di
        loop @line
@@ex:
  pop bp
  end;
  end;
var
  StartFlag: byte;
  CurrX:    word;
  CurrY:    word;
  LastX:    word;
  LastY:    word;
begin
asm
mov  ax,0013h
int  10h

mov ax, 0000h
int 33h
mov ax, 0001h
int 33h


mov bx,0A000h
mov es,bx
{Флаг: последней точки нет в начале}
mov  StartFlag,0
@@Cic:
xor  dx,dx
xor  cx,cx
mov  ax,0003h
int  33h

shr  cx,1
{Запоминаем координаты текущей точки}
mov  word ptr CurrX,cx
mov  word ptr CurrY,dx

mov  ax,320
mul  dx
add  ax,cx
mov  bx,ax

{mov  byte ptr es:[bx],col
mov  byte ptr es:[bx-1],col
mov  byte ptr es:[bx+1],col
mov  byte ptr es:[bx-320],col
mov  byte ptr es:[bx-321],col
mov  byte ptr es:[bx-319],col
mov  byte ptr es:[bx+320],col
mov  byte ptr es:[bx+321],col
mov  byte ptr es:[bx+319],col}

{Проверяем, первое ли вхождение}
cmp  byte ptr StartFlag,0
mov  byte ptr StartFlag,1
jz  @@NoDrawLastPoint
{Рисуем линию от текущей точки к предидущей }
{Оформляем стек вызова процедуры на языке Паскаль}
mov  ax,colline
push ax
push word ptr CurrX
push word ptr CurrY
push word ptr LastX
push word ptr LastY
call line256
@@NoDrawLastPoint:
{Запоминаем текущую точку}
mov  cx,word ptr CurrX
mov  dx,word ptr CurrY
mov  word ptr LastX,cx
mov  word ptr LastY,dx

mov  ah,01h
int  16h
jz  @@Cic

mov  ax,0003h
int  10h
end;
end.


Следует заметить, что код процедуры line256 я писал давно, когда только начал изучение ассемблера ;)


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


Unregistered











Спасибо, Chingachguk, очень круто, мне понравилось, да... странно, ноя тоже взялся за етот непростой труд - туториалы wink.gif Круто объясняешь, я по моему хуже...
:-((( мою версию покачто моно взять на
Моя версия

Спасибо, если дашь коментарий... можешь написать мне на [email protected]
  Вверх
Chingachguk
Дата 2.6.2003, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Извини, что не посмотрел сразу, Dark

Обязательно гляну и отпишу !


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


Новичок



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

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



Ну самое простое должно быть наверное вот так :

begin
{Устанавливаем графический режим монитора 13h, 320x200, 256 цветов}
asm
mov ax, 00013h
int 010h
end;
asm
{Кусок рисования}
mov ax, 0A000h
mov es, ax
mov bx,0
@rep:
mov byte ptr es:[bx],4
add bx,1
cmp bx,200*320-1
jbe @rep
end;
{Ожидаем нажатия клавиши}
asm
mov ah,0
int 16h
end;
{Устанавливаем текстовый режим монитора 03h, 80x25, 16 цветов текста и фона}
asm
mov ax,0003h
int 10h
end;
end.

PM MAIL ICQ   Вверх
GriKo
Дата 8.6.2003, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



sorry, я немного подтормозил с ответом... =)
PM MAIL ICQ   Вверх
Chingachguk
Дата 10.6.2003, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

{Кусок рисования}
mov ax, 0A000h
mov es, ax
mov bx,0
@rep:
mov byte ptr es:[bx],4
add bx,1
cmp bx,200*320-1
jbe @rep
end;


Это ты закрашиваешь весь экран красным цветом ? Да, можно и так. А можно и так:

Цитата

mov  cx,320*200
xor  di,di ; di=0
mov  al,4 ; al=color
cld
rep  movsb


или даже так:

Цитата

mov  cx,320*200/2
xor  di,di ; di=0
mov  ax,4+256*4 ; al,ah=color
cld
rep  movsw


А вот сможешь ли ты нарисовать линию в этом графическом режиме ? Входные данные: (X1,Y1) и (X2,Y2) - точки.



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Oleg Grafov
Дата 11.6.2003, 23:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Киньте что-нибудь по написанию резидентов, а еще лучше, если кому не трудно, киньте код следующей проги smile.gif, очень надо:

Сохранение/восстановление экрана
При нажатии одной из клавиш видеопамять текущей страницы текстового экрана(вместе с атрибутами) сохраняется в памяти. При нажатии другой комбинации клавиш в текущую видеостраницу загружается ранее запомненная копия.

Помогите, просто нет времени писать самому sad.gif


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

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

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


 




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


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

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