Size: a a a

Ассемблер

2021 August 14

ВВ

Вячеслав Васютин... in Ассемблер
Решил сыграть с ассемблером что-то типа "по передачи". Закинул двадцулик в один регистр, затем во второй, а затем захотел вывести его на экран со словами "Your favorite number is 20". Но, что-то пошло не так:
flat assembler  version 1.73.09  (16384 kilobytes memory)
1.asm [5]:
mov rax, '20',0
processed: mov rax,'20',0
error: extra characters on line.


Вот код:

format ELF64 executable

segment readable executable                    
mov rax, '20',0                                mov rbx, rax
mov [myFavoriteNumber], rbx
mov rax, [writecall]
mov rdi, [done]
mov rsi, [size_done]
syscall                                        
mov rax, 1                                     mov rdi, [Text_Favorite]
mov rsi, [size_Text_Favorite]                  syscall
                                              mov rax, 1
mov rdi, myFavoriteNumber
mov rsi, 3
xor rbx, rbx
syscall

mov rax, 60
mov rdi, 1
syscall





segment readable writeable

myFavoriteNumber dq 'Slavik',0
writecall dq 1
done dq "Done!", 10, 0
size_done = $-done
Text_Favorite dq "Your favorite number is ",0
size_Text_Favorite = $-Text_Favorite
источник

ВВ

Вячеслав Васютин... in Ассемблер
Ах да, сначала захотел вывести сообщение "Done!" на экран - типа, передача двадцулика прошла успешно.
источник

A

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

aq

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

A

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

ВВ

Вячеслав Васютин... in Ассемблер
Та вот, даже так сделал:

format ELF64 executable                        
segment readable executable                                                                   mov rax, [pass_number]
mov rbx, rax                                   mov [myFavoriteNumber], rbx                    mov rax, [writecall]                           mov rdi, [done]
mov rsi, [size_done]
syscall
                                              mov rax, 1
mov rdi, [Text_Favorite]
mov rsi, [size_Text_Favorite]                  syscall
                                              mov rax, 1
mov rdi, myFavoriteNumber
mov rsi, 3
xor rbx, rbx
syscall

mov rax, 60
mov rdi, 1
syscall





segment readable writeable

pass_number dq 20
myFavoriteNumber dq 'Slavik', 0
writecall dq 1
done dq "Done!", 10, 0
size_done = $-done
Text_Favorite dq "Your favorite number is ", 0
size_Text_Favorite = $-Text_Favorite
источник

ВВ

Вячеслав Васютин... in Ассемблер
flat assembler  version 1.73.09  (16384 kilobytes memory)
1.asm [39]:
Text_Favorite dq "Your favorite number is ", 0
processed: Text_Favorite dq 'Your favorite number is ',0
error: value out of range.
источник

A

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

A

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

ВВ

Вячеслав Васютин... in Ассемблер
Ок.
источник

aq

anonim qwerty in Ассемблер
Както непривычно читать фасм
источник

aq

anonim qwerty in Ассемблер
Где тут точки входа
источник

E

Entusiast in Ассемблер
Первый исполняемый сегмент - и есть точка входа
ELF
источник

ВВ

Вячеслав Васютин... in Ассемблер
readelf -h file_of_fasm

Там видно будет, где точка
источник

aq

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

ВВ

Вячеслав Васютин... in Ассемблер
Прерывание
источник

A

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

s

ss in Ассемблер
Прерывания - int
источник

aq

anonim qwerty in Ассемблер
И как они понимают, какое прерывание юзать?
источник

aq

anonim qwerty in Ассемблер
И разве х64 работает с прерываниями?
источник