Size: a a a

Ассемблер

2020 August 30

A

Aleksandr in Ассемблер
ну и вот. флаг ZF устанавливается когда при помощи MOV загружаешь куда-то ноль
источник

A

Aleksandr in Ассемблер
то есть при mov al, [esi] флаг ZF будет установлен, если по адресу ESI находится ноль
источник

A

Aleksandr in Ассемблер
понимаешь как можно оптимизировать твой код?
источник

К

Канат in Ассемблер
Aleksandr
понимаешь как можно оптимизировать твой код?
Пока что нет
источник

К

Канат in Ассемблер
Чет сложно
источник

A

Aleksandr in Ассемблер
скинь текстом
источник

LW

Loren White in Ассемблер
Aleksandr
ну и вот. флаг ZF устанавливается когда при помощи MOV загружаешь куда-то ноль
всмсл, mov влияет на флаги ?
источник

A

Aleksandr in Ассемблер
конечно
источник

LW

Loren White in Ассемблер
ничоси
источник

A

Aleksandr in Ассемблер
так, стоп
источник

A

Aleksandr in Ассемблер
нет
источник

A

Aleksandr in Ассемблер
я перепутал архитектуры
источник

LW

Loren White in Ассемблер
ага
источник

LW

Loren White in Ассемблер
вот я чот и засомневался
источник

LW

Loren White in Ассемблер
)00
источник

A

Aleksandr in Ассемблер
впрочем, ладно. код все еще можно оптимизировать сократив обращения к памяти
источник

К

Канат in Ассемблер
Aleksandr
скинь текстом
global _ft_strcmp
section .text
_ft_strcmp: xor rax, rax
           xor rcx, rcx

compaire:   cmp byte[rdi + rcx], 0
           je done
           cmp byte[rsi + rcx], 0
           je done
           mov al, byte[rdi + rcx]
           cmp al, byte[rsi + rcx]
           jne done
           inc rcx
           jmp compaire

done:      
           mov al, byte[rdi + rcx]
           xor rbx, rbx
           mov bl, byte[rsi + rcx]
           sub rax, rbx
           ret
источник

A

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

A

Aleksandr in Ассемблер
и сравнение с нулем быстрее делать через TEST
источник

A

Aleksandr in Ассемблер
_ft_strcmp: xor rax, rax
           xor rcx, rcx

compaire:  

           mov al, byte[rdi + rcx] ;всего два обращения к памяти
           mov ah, byte[rsi + rcx] ;всего два обращения к памяти
           test al, al ;test немного быстрее cmp, а с нулем отлично сравнивает
           je done
     test ah, ah ;test немного быстрее cmp, а с нулем отлично сравнивает
           je done
           cmp al, ah
           jne done
           inc rcx
           jmp compaire

done:      
           sub al, ah;то же, что и было, но без использования второго регистра
     movzx rax, al
           ret
источник