Меня напрягает вечное указание размера функции
Можно ли это как-то убрать, и просто объявлять: _MessageBox, _ExitProcess, как с msvcrt: _printf, __getch и т.д?
$ gcc -nostartfiles -static str.s -o str
$ gdb ./str
...
(gdb) b *0x40102f
Breakpoint 1 at 0x40102f
(gdb) r
Starting program: /home/jcmvbkbc/tmp/toster/str
Breakpoint 1, 0x000000000040102f in _start ()
(gdb) x/3b $rsi - 3
0x402000 <source>: 1 2 3
(gdb) x/3b $rdi - 3
0x402010 <dest>: 1 2 3
Почему не работает
leaw arrayW, %si movw (%si), %ax
leal arrayW, %esi
movw (%esi), %ax
$ gcc -m32 -static -nostartfiles load.s -o load
$ gdb ./load
(gdb) b _start
Breakpoint 1 at 0x8049000
(gdb) r
Starting program: /home/jcmvbkbc/tmp/toster/load
Breakpoint 1, 0x08049000 in _start ()
(gdb) si
0x08049006 in _start ()
(gdb)
0x08049009 in _start ()
(gdb) p/x $esi
$1 = 0x804a000
(gdb) p/x $ax
$2 = 0x5
Для чего развивают GNU Assembler
GAS практически не документирован
синтаксис не тот, не зажигает он меня.
получается какой-то высокоуровневый код, который меня не привлекает.
Как объявить процедуру с аргументом строкой?
proc getel text
endp
signed __int8 numerator = 0; signed __int16 denominator = 0;
extern numerator:sword extern denominator:sbyte ... mov denominator, al
__int8 numerator
на __int16 numerator
, extern denominator:sbyte
на extern denominator:sword
а mov denominator, al
на mov denominator, ax
, чтобы стало как надо.include 'linInclude/proc64.inc'
format ELF64 executable 3
include '/usr/share/fasm/examples/elfexe/dynamic/import64.inc'
interpreter '/lib64/ld-linux-x86-64.so.2'
needed 'libc.so.6'
import exit, printf
segment readable executable
entry $
lea rdi, [fmtS]
lea rsi, [msg]
call [printf]
call [exit]
segment readable writeable
msg db 'Hello, World!', 0xA, 0
fmtS db '%s', 0xA, 0
Как реализовать этот код на си?
mov cx, 3 cellValues: mov edx, lenBM mov ecx, borderMiddle mov ebx, 1 mov eax, 4 int 0x80 loop cellValues
Думал, терётся cx от ecx
подскажите хотя бы с переменной в эти BSF/BCF
For bit-oriented instructions, ‘b’ represents a bit field designator
which selects the bit affected by the operation, while ‘f’ represents
the address of the file in which the bit is located.
Допустим, значение счетчика равно 0000, я должен записать байт 10h. Как я понял, команду нужно указать через пульта управления на RAM (слева). Например, указал 10h, то получается что во все 3 защелки записывается 10h (То есть 10h 10h 10h) ???
В нашем сумматоре каждая ко-
манда занимает по 3 байта и извлекается из памяти побайто-
во. Выборка одной команды занимает три цикла синхронизи-
рующего сигнала, а полный командный цикл — четыре цикла
синхронизирующего сигнала.
А как записать команду 10h 00 00??
1000 – это адрес (А), но только относительный. Чему равно смещение (Х).
Как сделать так, чтобы оно выводило число?
mov rbx, 10
mov rsi, str + 20
l1:
mov rdx, 0
idiv rbx
add dl, '0'
mov byte [rsi], dl
add rsi, -1
test rax, rax
jnz l1
; rsi + 1 указывает на начало строки
; длина строки -- str + 20 - rsi