Size: a a a

Ассемблер

2021 April 13

A

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

3I

33 Ivan in Ассемблер
Это переменная в которую я записываю строку
источник

A

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

A

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

AM

Alexander Morozov in Ассемблер
S не сразу после F описано?

F: db 0,
S: db 255 dup (?)
источник

A

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

3I

33 Ivan in Ассемблер
А разве это важно?
Я записываю вывод в стек, а потом присваиваю F то что в стеке переопределяя ее
источник

3I

33 Ivan in Ассемблер
Строку выводит без ошибок
источник

3I

33 Ivan in Ассемблер
Нет
источник

3I

33 Ivan in Ассемблер
S resb 1024
источник

3I

33 Ivan in Ассемблер
Как я понимаю то что в начале F равно '0' ни на что не влияет
источник

3I

33 Ivan in Ассемблер
И + строка выводится без проблем
источник

AM

Alexander Morozov in Ассемблер
Это тестовый вариант. Выводит обратно введенную строку:

format ELF executable 3
entry start

segment readable executable

start:

read_msg:
   mov eax,03  
   mov ebx,0 ; Консоль
   mov ecx,str_buf ; Буфер
   mov edx,str_buf_size ; Размер буфера
   int 0x80
   cld
   mov edi,str_size    
   stosd   ; Размер строки из eax

print_msg:
   cld
   mov esi,str_size
   lodsd
   mov edx,eax ; Размер строки
   mov eax,4
   mov ebx,1
   mov ecx,str_buf
   int 0x80

program_exit:
   mov eax,1
   xor ebx,ebx
   int 0x80

segment readable writeable

str_size dd ?
str_buf db 1024 dup (?)
str_buf_size = $-str_buf
источник

3I

33 Ivan in Ассемблер
Сейчас попробую
источник

AM

Alexander Morozov in Ассемблер
Это вариант, в котором размер введенной строки игнорируется, и всегда выводится 1 символ:

format ELF executable 3
entry start

segment readable executable

start:

read_msg:
   mov eax,03  
   mov ebx,0 ; Консоль
   mov ecx,str_buf ; Буфер
   mov edx,str_buf_size ; Размер буфера
   int 0x80

print_msg:
   mov edx,1 ; Размер строки == 1
   mov eax,4
   mov ebx,1
   mov ecx,str_buf
   int 0x80

program_exit:
   mov eax,1
   xor ebx,ebx
   int 0x80

segment readable writeable

str_buf db 1024 dup (?)
str_buf_size = $-str_buf
источник

AM

Alexander Morozov in Ассемблер
Но тут есть ошибка. Случай, когда не введено ничего не отслеживается!
источник

3I

33 Ivan in Ассемблер
Компилятор выдает ошибки
источник

3I

33 Ivan in Ассемблер
А что делают первая, вторая и третья строки?
источник

AM

Alexander Morozov in Ассемблер
Это для fasm. Назовите сегменты так, как нужно для nasm!
источник

3I

33 Ivan in Ассемблер
Понял
источник