Важная информация

User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 28 из 28

Тема: Арифметические процедуры на ассемблере

  1. #21
    Master
    Регистрация
    10.02.2014
    Адрес
    г. Тула
    Сообщений
    538
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Дмитрий2012, если время потом нужно вывести, то как предложил char можно сделать табличку с константами
    Пока "мотаю на ус" С табличками не знаком, никогда не использовал их. Возможно попробую и такой вариант для саморазвития, как только сделаю вариант с делением.

    Цитата Сообщение от char Посмотреть сообщение
    а вообще, все это жесткая порнуха; кто миллисекунды увеличивает? на прерываниях?
    миллисекунды считает "железка" и хранит у себя. И в одном из пунктов меню утилиты, которую пишу для этой "железки" процессор занят только выводом на экран этого времени. Можно сказать это простой "показометр". Так что в данном случае не критично как перекодировать время. Главное, чтобы правильно на экран выводилось в часах, минутах, секундах ...

  2. #22
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    714
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    40
    Поблагодарили
    31 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Немного с опозданием но закину свои 66 байт
    Код:
    	device	zxspectrum48
    	org	#8000
    start
    	ld	hl,(tick)
    	ld	de,(tick+2)
    	ld	c, 10
    	call	div41
    	ld	c, 100
    	call	div41
    	ld	(hdr),a
    	ld	c, 60
    	call	div41
    	ld	(sec),a
    	ld	c, 60
    	call	div41
    	ld	(min),a
    	ld	(hour),hl
    	jr	$
    tick	db	0,10,0,0
    hdr	db	0
    sec	db	0
    min	db	0
    hour	dw	0
    div41
    ;dehl/c=dehl(a)
    	xor	a
    	ld	b, #20
    .l1
    	add	hl,hl
    	rl	e
    	rl	d
    	rla
    	cp	c
    	jr	c,.l2
    	sub	c
    	inc	l
    .l2
    	djnz	.l1
    	ret
    	savesna	"time.sna",start
    Около 8к тактов, разделяет на сотые, секунды, минуты и часы. Буду рад если окажется полезным.

  3. #23
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    656
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Дмитрий2012 Посмотреть сообщение
    С табличками не знаком, никогда не использовал их.
    к примеру нарисую умножение на 3 по табличке

    Код:
    ld h,$c0 ;старший адрес таблички
    
    ld l,a  ;то что нужно умножить
    
    ld a,(hl)  ;получаем результат
    
    ;сама табличка
    org $c000
    defb 0*3
    defb 1*3
    defb 2*3
    defb 3*3
    ....
    ;и так до
    defb 255*3

    если нам не хватает 8 бит для результата
    Код:
    ld h,$c0 ;старший адрес таблички
    
    ld l,a  ;то что нужно умножить
    
    ld с,(hl)  ;получаем младший байт результат
    
    inc h ; меняем табличку
    
    ld b,(hl) ;получаем старший байт результата
    
    ;сама табличка
    org $c000
    defb (0*3) % 256 ;% - остаток от деления. в sjasmplus можно low (0*3)
    defb (1*3) % 256
    defb (2*3) % 256
    defb (3*3) % 256
    ....
    ;и так до
    defb (255*3)% 256
    
    org $c100
    defb (0*3) / 256 ; в sjasmplus можно high (0*3)
    defb (1*3) / 256
    defb (2*3) / 256
    defb (3*3) / 256
    ....
    ;и так до
    defb (255*3) / 256

    с таким же успехом можно делать таблички в другой плоскости (правда с некоторыми ограничениями)
    в l заносить номер таблички
    а в h подставлять данные для обработки


    таким образом можно запихнуть любое количество операций любой сложности с одной переменной
    (нет можно и с несколькими конечно но это уже сложней и памяти жрет неимоверно)

  4. #24
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию


  5. #25
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    656
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Шынни, для демок или игр да
    а для поставленной задачи точность скорей всего уедет
    да и для 32 битных чисел...

    ладно не могу вспомнить
    есть єта формула у меня или нет
    поставлю спасибку
    Последний раз редактировалось NEO SPECTRUMAN; 13.05.2017 в 19:35.

  6. #26
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Немного с опозданием но закину свои 66 байт
    Около 8к тактов, разделяет на сотые, секунды, минуты и часы. Буду рад если окажется полезным.
    если за скоростью не бегать (можно /10 /100, а можно /8сдвигом /125), то нормально, почему нет

    еще вместо повторения ld c,60, перед div41 дописать и вызывать можно div60 ld c,60

  7. #27
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    714
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    40
    Поблагодарили
    31 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    еще вместо повторения ld c,60, перед div41 дописать и вызывать можно div60 ld c,60
    Ну поучавствую в соревновании кэпов, второй ld c,60 можно вообще не писать, он не меняется
    Цитата Сообщение от char Посмотреть сообщение
    если за скоростью не бегать (можно /10 /100, а можно /8сдвигом /125), то нормально, почему нет
    Ну сотые напечатать нормально, че нет то, а 125-ые как то не нативно

  8. #28
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    там ему тысячные так-то нужны были, а не сотые...
    сначала можно сохранить 3 мл. бита, а в конце, после трех add hl,hl, восстановить or'ом, ежели по уму делать

Страница 3 из 3 ПерваяПервая 123

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 30
    Последнее: 14.01.2011, 15:13
  2. Функция #0a процедуры #3d13
    от axor в разделе Программирование
    Ответов: 3
    Последнее: 12.10.2006, 16:31
  3. Арифметические операции с двухбайтными числами
    от mishutka в разделе Программирование
    Ответов: 10
    Последнее: 17.02.2006, 19:09

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •