Size: a a a

Ассемблер

2021 September 10

A

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

E

Entusiast in Ассемблер
На бота не похож
Не понимаю, зачем заходить, и молчать (аналогично: заходить, и выходить из клиента, или уходить по своим делам...)
источник

E

Entusiast in Ассемблер
Но ещё не понятно, зачем человеку, который пишет на Rust, V, Raku, C++ (ну для студенческих проектов, судя по всему), Lua, Emacs Lisp, Vim Script - ассемблер
источник

MS

Midori San in Ассемблер
Эта фраза из довольно старого Советского фильма "Подвиг разведчика" там она и прозвучала впервые. Это своего рода пароль (ну или кодовое слово), который требует точного ответа.
источник

E

Entusiast in Ассемблер
А зачем "фраза" выделять?
источник

MS

Midori San in Ассемблер
Что бы было видно что это
источник

RB

Rustem B. in Ассемблер
Да
источник

RB

Rustem B. in Ассемблер
Для универа
источник

RB

Rustem B. in Ассемблер
Я зашёл чтобы не потерять чат, вопрос может возникнуть чуть позже
источник

E

Entusiast in Ассемблер
Бот сразу после входа отсылает сообщение с просьбой ответить на вопрос
Как можно его не увидеть
источник

RB

Rustem B. in Ассемблер
Не знаю, но я его правда не заметил
источник

RB

Rustem B. in Ассемблер
Видимо спешил и оно просто потерялось, когда я пришел домой
источник
2021 September 11

ВВ

Вячеслав Васютин... in Ассемблер
Не могу закомпилить три файла вместе.
1-й:
asm_io.inc:
extern  read_int, print_int, print_string
       extern  read_char, print_char, print_nl
       extern  sub_dump_regs, sub_dump_mem, sub_dump_math, sub_dump_stack

%macro  dump_regs 1
       push      dword %1
       call      sub_dump_regs
%endmacro


;
; usage: dump_mem label, start-address, # paragraphs
%macro  dump_mem 3
       push     dword %1
       push     dword %2                              push     dword %3
       call     sub_dump_mem
%endmacro

%macro  dump_math 1
       push     dword %1
       call     sub_dump_math
%endmacro

%macro  dump_stack 3
       push     dword %3
       push     dword %2
       push     dword %1
       call     sub_dump_stack
%endmacro


2-й:
driver.c:

int main(){                                    
       int ret_status;
       ret_status = _asm_main();
       return ret_status;

}

3-й (кода у него много, поэтому дам ссылку):
https://www.evernote.com/shard/s662/sh/ae607ba3-0b97-46fa-b10b-636069cff989/50ddb80ddd7d0f13a1d63f3f6ef88dcd
источник

ВВ

Вячеслав Васютин... in Ассемблер
Писал nasm -f elf32 first.asm
Затем nasm -f elf32 asm_io.inc
Затем gcc -o NasmFirstProg driver.c first.o asm_io.o


И вот, что получилось:

driver.c: In function ‘main’:
driver.c:5:15: warning: implicit declaration of function ‘_asm_main’ [-Wimplicit-function-declaration]
 ret_status = _asm_main();
              ^~~~~~~~~
/usr/bin/ld: i386 architecture of input file
first.o' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file asm_io.o' is incompatible with i386:x86-64 output
/usr/bin/ld: first.o: in function
_asm_main': first.asm:(.text+0xb): undefined reference to print_string'
/usr/bin/ld: first.asm:(.text+0x10): undefined reference to
read_int'
/usr/bin/ld: first.asm:(.text+0x1f): undefined reference to print_string'
/usr/bin/ld: first.asm:(.text+0x24): undefined reference to
read_int'
/usr/bin/ld: first.asm:(.text+0x3d): undefined reference to sub_dump_regs'
/usr/bin/ld: first.asm:(.text+0x4b): undefined reference to
sub_dump_mem'
/usr/bin/ld: first.asm:(.text+0x55): undefined reference to print_string'
/usr/bin/ld: first.asm:(.text+0x5f): undefined reference to
print_int'
/usr/bin/ld: first.asm:(.text+0x69): undefined reference to print_string'
/usr/bin/ld: first.asm:(.text+0x73): undefined reference to
print_int'
/usr/bin/ld: first.asm:(.text+0x7d): undefined reference to print_string'
/usr/bin/ld: first.asm:(.text+0x84): undefined reference to
print_int'
/usr/bin/ld: first.asm:(.text+0x89): undefined reference to print_nl'
collect2: error: ld returned 1 exit status
источник

ВВ

Вячеслав Васютин... in Ассемблер
А также что делают pusha, popa & enter 0,0?
источник

RB

Rustem B. in Ассемблер
pusha пушит в стек все основные регистры
popa в точности наоборот
источник

ВВ

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

E

Entusiast in Ассемблер
В чат по buildsystems
Здесь от ассемблера вообще ничего
источник

E

Entusiast in Ассемблер
enter - создать кадр стека.
leave - выход из процедуры (удалить кадр стека)

Идентично:
; enter op1, op2
; enter 0, 0
push ebp
mov ebp, esp
; sub esp, op1
; sub esp, 0
; op1 - сколько места выделять в стеке (под локальные переменные)
; op2 = уровень вложенности (сколько кадров стека будет вложено в новые кадры стека)

; leave
mov esp, ebp
pop ebp
ret
; ret X

Инструкция сделана для упрощения работы с процедурами в ЯВУ
источник

ВВ

Вячеслав Васютин... in Ассемблер
В esp (при push ebp; mov ebp, esp) же адресс находится? А как он уменьшается, допустим, на 5 при команде enter 5,0? Как можно, допустим, 0x018181833 уменьшить на 5?
источник