Size: a a a

Ассемблер

2020 December 27

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
ку
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Я вообще, не очень понимаю, какой результат должен получиться для отрицательного числа.
Здесь просто x! (x<0) = -(-x!).
Но ИМХО, должно быть тогда так:
(-2)! = (-1)*(-2) = 2
(-3)! = (-1)*(-2)*(-3) = -6
(-4)! = (-1)*(-2)*(-3)*(-4) = 24
(-5)! = (-1)*(-2)*(-3)*(-4)*(-5)= -120.
Это проще, вообще говоря, реализовать.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Если надо прям покороче и скорость некритична, то 16 байт:

    ; eax = x
   cdq
   xor  eax,edx
   sub  eax,edx      ; eax = abs(x)
   jz  .zero
   stc
   adc  edx,edx
   xchg  eax,ecx      ; ecx = abs(x)
   xchg  eax,edx      ; eax = sign(x): 1 or -1

 @@:  imul  ecx
   loop  @B
 .zero:
   ; edx:eax = x!

В целом, можно сделать быстрее, но на 17 байт, заменив loop @B на dec ecx/jnz @B :)
А вот это с нулём можно сделать так:

    ; eax = x
   cdq
   xor  eax,edx
   sub  eax,edx      ; eax = abs(x)
   stc
   adc  edx,edx
   xchg  eax,ecx      ; ecx = abs(x)
   xchg  eax,edx      ; eax = sign(x): 1 or -1
   jecxz .zero
 @@:  imul  ecx
   loop  @B
 .zero:
   ; edx:eax = x!

Но это, опять же. Берётся abs(x)! * sign(x)
источник

DB

Dima Bat in Ассемблер
есть такой порос про AVR. Вот допустим сработало прерывание, как мк загружает в указатель команд адрес обработчика этого прерывания? Де он вообще берет этот адрес?
источник

LW

Loren White in Ассемблер
ну наверно на avr, как и на х86, идет вызов в специальную таблицу рутин, которые обслуживают прерывания
источник

LW

Loren White in Ассемблер
таблицу предварительно определяешь
источник

DB

Dima Bat in Ассемблер
Loren White
ну наверно на avr, как и на х86, идет вызов в специальную таблицу рутин, которые обслуживают прерывания
да, так и есть таблицу, но чтобы перейти в таблицу надо этот самый адрес команды изменить
источник

DB

Dima Bat in Ассемблер
вот как он изменяется?
источник

DB

Dima Bat in Ассемблер
и почему именно этот адрес туда пишеться, а не какой другой?
источник

LW

Loren White in Ассемблер
присутствует значит какой нибудь контроллер прерываний, который автоматом изменяет регистр инструкций по вектору прерывания на определенный адрес из таблицы
источник

DB

Dima Bat in Ассемблер
Loren White
присутствует значит какой нибудь контроллер прерываний, который автоматом изменяет регистр инструкций по вектору прерывания на определенный адрес из таблицы
в смысле я могу прерывания в разброс писать?
источник

DB

Dima Bat in Ассемблер
я имею в виду очередность в памяти
источник

LW

Loren White in Ассемблер
не понял вопроса ) та и не эксперт по AVR
источник

S

SeanWoo in Ассемблер
Такими страшными терминами разговариваете
источник

S

SeanWoo in Ассемблер
Вроде и понимаю, а вроде и нет
источник

DB

Dima Bat in Ассемблер
ну вот таймер вызывает прерывание по переполнению счетчика, в адрес команды записывается адрес обработчика. Это мне просто нужно таблицу глянуть на мой МК где написано какой адрес в счетчик команд записывается по этому прерыванию?
источник

DB

Dima Bat in Ассемблер
ну да за это есть в учебнике)
источник

ST

Saenro T in Ассемблер
Глянь начало кода, там будет кроме нормального, ещё и код с выходом reti
источник

ST

Saenro T in Ассемблер
Или даже не один, если векторов несколько
источник

DB

Dima Bat in Ассемблер
Saenro T
Глянь начало кода, там будет кроме нормального, ещё и код с выходом reti
не я пока не написал это в начале кода))🤣
источник