Size: a a a

Ассемблер

2021 June 13

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
в описании цели небыло этих уточняющих понятий
источник

A

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

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
сам стек привязан к размеру: или стоит по умолчанию или стоит тот который поставил прогер (или его настроил в процессе работы приложения)
источник

АШ

Алексей Шведов... in Ассемблер
Да, но если это использовать на практике, то важно, чтобы метод был не привязан к кратности размера строк. И всё же было бы действительно логичнее использовать rep stosb/movsb
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
а он и не привязан, про кратность я говорил про стек, но и это порой не важно
источник

АШ

Алексей Шведов... in Ассемблер
Как это не привязан?
В случае с push он привязан к кратности 2,4,8...
источник

A

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

АШ

Алексей Шведов... in Ассемблер
Так а я говорю про вариант с push
источник

АШ

Алексей Шведов... in Ассемблер
Хотя вариант с push тоже можно подправить, если отнимать смещение стека на 2 байта, и класть туда по байту в цикле
Получится даже побыстрее, чем с rep stosb/movsb
источник

d

disba1ancer in Ассемблер
давно бы мышь вскрыл и починил...
источник

АШ

Алексей Шведов... in Ассемблер
str1: db 'Hello to my friends,', 0
str1.sz = $ - str1
str2: db ' brothers and sisters!', 0
str2.sz = $ - str2

sub esp, str1.sz+str2.sz
xor ecx, ecx
@lpConcat:
xor eax, eax
mov al, byte[str1+ecx]
push eax
add esp, 0x5
inc ecx
cmp byte[str1+ecx], 0x0
jne @lpConcat

xor ecx, ecx
@lpConcat2:
xor eax, eax
mov al, byte[str2+ecx]
push eax
add esp, 0x5
inc ecx
cmp byte[str2+ecx], 0x0
jne @lpConcat2

push 0

sub esp, str1.sz+str2.sz-2
push esp

Вот теперь не надо волноваться за размер строк
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
       sub     esp,str1.sz+str2.sz
       mov     eax,str1.sz+str2.sz
       and     eax,3
       jz      @f
       mov     ecx,4
       sub     ecx,eax
       sub     esp,ecx
   @@:
       mov     edi,esp

       mov     esi,str1
       mov     ecx,str1.sz
       rep movsb

       mov     esi,str2
       mov     ecx,str2.sz
       rep movsb
       ret

str1: db 'Hello to my friends,', 0
str1.sz = $ - str1 - 1
str2: db ' brothers and sisters!', 0
str2.sz = $ - str2


здесь тоже не надо волноваться о выравнивании стека
источник

АШ

Алексей Шведов... in Ассемблер
Но это будет медленнее работать
источник

АШ

Алексей Шведов... in Ассемблер
Как известно, rep movsb берёт больше тиков, чем push+add
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
насколько медленее по времени можешь сказать??? 0,00001сек или больше? или меньше?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
и насколько это критично для таких строк?
источник

АШ

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

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
скорость команд я меряю по условно устаревшим замерам, указанными в доках масм32 (286,386,486). но все прекрасно уже знают что эта пора замеров уже устарела, по ним разве что косвенно можно об этом всем судить (эта команда быстрей этой, но никак о реальном времени выполнения)
источник

d

disba1ancer in Ассемблер
Было
источник

d

disba1ancer in Ассемблер
Стало
источник