Size: a a a

Ассемблер

2020 August 30

К

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

RN

Ruslan Neshta in Ассемблер
Канат
всем привет я только начал учить ассемблер и сейчас пытаюсь написать std функцию strlen но она дает сегу когда я ей подаю NULL, саму же проверку я делю так
cmp rdi,0
je done
могу скинуть код если  хотите
test rdi,0
jz done
разве так не будет работать?
источник

К

Канат in Ассемблер
Ruslan Neshta
test rdi,0
jz done
разве так не будет работать?
а почему  jz?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
всем привет я только начал учить ассемблер и сейчас пытаюсь написать std функцию strlen но она дает сегу когда я ей подаю NULL, саму же проверку я делю так
cmp rdi,0
je done
могу скинуть код если  хотите
код давай тогда и как вызываешь
источник

К

Канат in Ассемблер
Ruslan Neshta
test rdi,0
jz done
разве так не будет работать?
ну я так тоже пробовал
источник

RN

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

RN

Ruslan Neshta in Ассемблер
по зеро флагу прыгнуть
источник

К

Канат in Ассемблер
global  _ft_strlen

section .text
_ft_strlen: xor rax, rax
                 cmp rdi, byte 0x0
                 jz  done

compire:  cmp byte[rdi + rax], 0
 jz done
 inc  rax
 jmp compire

done: ret

int main(void)
{
   size_t i = ft_strlen(NULL);
   printf("%zu", i);
   return (0);
}
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
global  _ft_strlen

section .text
_ft_strlen: xor rax, rax
                 cmp rdi, byte 0x0
                 jz  done

compire:  cmp byte[rdi + rax], 0
 jz done
 inc  rax
 jmp compire

done: ret

int main(void)
{
   size_t i = ft_strlen(NULL);
   printf("%zu", i);
   return (0);
}
что на входе ДОЛЖНА принимать функция?
источник

К

Канат in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
что на входе ДОЛЖНА принимать функция?
строку
источник

A

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

К

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

A

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

a

asm in Ассемблер
Добро пожаловать, cray1
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
global  _ft_strlen

section .text
_ft_strlen: xor rax, rax
                 cmp rdi, byte 0x0
                 jz  done

compire:  cmp byte[rdi + rax], 0
 jz done
 inc  rax
 jmp compire

done: ret

int main(void)
{
   size_t i = ft_strlen(NULL);
   printf("%zu", i);
   return (0);
}
что у тя в rdi хранится?
источник

К

Канат in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
что у тя в rdi хранится?
то что принимает функция
источник

RN

Ruslan Neshta in Ассемблер
Канат
global  _ft_strlen

section .text
_ft_strlen: xor rax, rax
                 cmp rdi, byte 0x0
                 jz  done

compire:  cmp byte[rdi + rax], 0
 jz done
 inc  rax
 jmp compire

done: ret

int main(void)
{
   size_t i = ft_strlen(NULL);
   printf("%zu", i);
   return (0);
}
а почему здесь rdi сравнивается с операндом байт а не кворд?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
то что принимает функция
где ты это прописал?
источник

К

Канат in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
где ты это прописал?
нигде но мне сказали что в rdi хранится первый аргумент, а в rsi второй
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
почитай как передаются параметры функции используя соглашение stdcall
источник