Size: a a a

Ассемблер

2020 August 30

A

Aleksandr in Ассемблер
Через какой то регистр
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
а как в асм скопировать из одного массива в другой
как сделать так dst[i] = str[i]
rep movs
источник

К

Канат in Ассемблер
можете подсказать что я делаю не так?
global _ft_strcpy
section .text
_ft_strcpy: xor rax, rax
           cmp rsi, 0
           je done

copy:   mov al, byte[rsi + rax]
           mov byte[rdi + rax], al
           cmp byte[rsi + rax], 0
           je done
           inc rax
           jmp copy

done:       mov rax, rdi
           ret
источник

s

s54816 in Ассемблер
Канат
можете подсказать что я делаю не так?
global _ft_strcpy
section .text
_ft_strcpy: xor rax, rax
           cmp rsi, 0
           je done

copy:   mov al, byte[rsi + rax]
           mov byte[rdi + rax], al
           cmp byte[rsi + rax], 0
           je done
           inc rax
           jmp copy

done:       mov rax, rdi
           ret
Ты портишь rax в строке с меткой copy.
источник

К

Канат in Ассемблер
s54816
Ты портишь rax в строке с меткой copy.
а как я его порчу?
источник

s

s54816 in Ассемблер
Канат
а как я его порчу?
Ну al же — это младшие 8 бит rax, ты туда пишешь. Используй rcx какой-нибудь для счётчика.
источник

A

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

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
можете подсказать что я делаю не так?
global _ft_strcpy
section .text
_ft_strcpy: xor rax, rax
           cmp rsi, 0
           je done

copy:   mov al, byte[rsi + rax]
           mov byte[rdi + rax], al
           cmp byte[rsi + rax], 0
           je done
           inc rax
           jmp copy

done:       mov rax, rdi
           ret
только сделай еще проверку длин строк, а то может получится что бОльшую копируешь в меньшую, затрешь данные лежащие ниже
источник

s

s54816 in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
только сделай еще проверку длин строк, а то может получится что бОльшую копируешь в меньшую, затрешь данные лежащие ниже
У него char *strcpy(char *dest, char *src), как тут проверишь?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
можете подсказать что я делаю не так?
global _ft_strcpy
section .text
_ft_strcpy: xor rax, rax
           cmp rsi, 0
           je done

copy:   mov al, byte[rsi + rax]
           mov byte[rdi + rax], al
           cmp byte[rsi + rax], 0
           je done
           inc rax
           jmp copy

done:       mov rax, rdi
           ret
сначало посчитать длину в этом коде, функцию подсчета длины он уже сделал
источник

A

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

s

s54816 in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
сначало посчитать длину в этом коде, функцию подсчета длины он уже сделал
Так это в вызывающем коде надо считать. Если считать в этом, ничего не изменится, информация о размере src никак не поможет узнать размер dest.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
s54816
Так это в вызывающем коде надо считать. Если считать в этом, ничего не изменится, информация о размере src никак не поможет узнать размер dest.
а ну да, перепутал в алгоритме сравнения строк
источник

ST

Saenro T in Ассемблер
Канат
можете подсказать что я делаю не так?
global _ft_strcpy
section .text
_ft_strcpy: xor rax, rax
           cmp rsi, 0
           je done

copy:   mov al, byte[rsi + rax]
           mov byte[rdi + rax], al
           cmp byte[rsi + rax], 0
           je done
           inc rax
           jmp copy

done:       mov rax, rdi
           ret
или:
mov rcx, length
mov rsi, input
mov rdi, output
repe movsb
источник

К

Канат in Ассемблер
s54816
Ну al же — это младшие 8 бит rax, ты туда пишешь. Используй rcx какой-нибудь для счётчика.
поменял на rcx все равно херня какая-то
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Канат
поменял на rcx все равно херня какая-то
покажи код
источник

К

Канат in Ассемблер
global _ft_strcpy
section .text
_ft_strcpy: xor rcx, rcx
           cmp rsi, 0
           je done

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

done:       mov rax, rdi
           ret
источник

s

s54816 in Ассемблер
Канат
global _ft_strcpy
section .text
_ft_strcpy: xor rcx, rcx
           cmp rsi, 0
           je done

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

done:       mov rax, rdi
           ret
А вызываешь как? И что конкретно значит «херня какая-то»?
источник

К

Канат in Ассемблер
s54816
А вызываешь как? И что конкретно значит «херня какая-то»?
вызываю так
   char dst[10];
   char *src = "1234567890";
   char *s = ft_strcpy(dst, src);
пишет abort
источник

s

s54816 in Ассемблер
Канат
вызываю так
   char dst[10];
   char *src = "1234567890";
   char *s = ft_strcpy(dst, src);
пишет abort
Так в строке src 11 символов, а в dst 10.
источник