Мне нужно текст в text1 преобразовать в число, повысить его на +1 и установить в hwndEdit2
.text
.att_syntax
foo:
movb $4, %al
.intel_syntax
mov %al, 4
$ gcc -c att-intel.S
$ objdump -d att-intel.o
att-intel.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <foo>:
0: b0 04 mov $0x4,%al
2: b0 04 mov $0x4,%al
Деасемблирование дало такой результат:
mov ds:0x0,al
Может мне кто-то объяснить что это значит ds:0x0
Пишу под Linux(Ubuntu), следовательно приходится осваивать синтаксис GAS(AT&T)
addb $str, i relocation truncated to fit: R_X86_64_8 against `.data'
int $0x80
Нужно из c++ переместить этот массив в ассемблерную вставку, а там уже перенести из этого массива в другой массив все элементы, которые равны сумме соседних.
То есть регистры e*x нельзя брать. Кто может подсказать, где найти материал по этой теме, либо же предложить пример кода для решения поставленной задачи?
#include <stdint.h>
void f(void)
{
uint32_t a[16] = {1, 2, 3, 1, 5, 4, -1, }, b[16] = {0};
void *a1, *b1;
uint32_t tmp, cnt = 14;
asm (
"lea %[a], %[a1]\n\t"
"lea %[b], %[b1]\n"
"1:\n\t"
"mov (%[a1]), %[tmp]\n\t"
"add 8(%[a1]), %[tmp]\n\t"
"cmp 4(%[a1]), %[tmp]\n\t"
"jne 2f\n\t"
"mov %[tmp], (%[b1])\n\t"
"add $4, %[b1]\n"
"2:\n\t"
"add $4, %[a1]\n\t"
"dec %[cnt]\n\t"
"jnz 1b\n\t"
: [cnt] "=&r" (cnt), [tmp] "=&r" (tmp),
[a1] "=&r" (a1), [b1] "=&r" (b1),
[b] "=m" (b)
: [a] "m" (a));
}
asm ( "mov a, %eax \n\t" "mov b, %ebx \n\t" "add %eax, %ebx \n\t" "mov %ebx, c \n\t" );
asm (
"mov %[a], %%eax \n\t"
"mov %[b], %%ebx \n\t"
"add %%eax, %%ebx \n\t"
"mov %ebx, %[c] \n\t"
: [c] "=rm" (c)
: [a] "rm" (a), [b] "rm" (b)
: "eax", "ebx", "cc"
);
Компилирую, а тут фигня происходит:
a
, но такого символа нет. Потому что переменная a
размещена на стеке и символьного имени у неё и правда нет. Если бы она (вместе с b
и c
) была глобальной, всё равно была бы ошибка (по крайней мере при компиляции под 64 бита), но другая. я не знаю, как сделать алгоритм для задачи
найти во введенной строке все цифры
для каждой найденной цифры установить в «1» в регистре ax бит, номер которого равен этой цифре.
Вывести на экран содержимое регистра ax в виде нулей и единиц
Русским и английским языком написано. Сегментные регистры в x64 кроме GS и FS не используются и принудительно устанавливаются в 0.
In 64-bit mode, segmentation is generally (but not completely) disabled, creating a flat 64-bit linear-address space. The processor treats the segment base of CS, DS, ES, SS as zero, creating a linear address that is equal to the effective address. The exceptions are the FS and GS segments, whose segment registers (which hold the segment base) can be used as additional base registers in some linear address calculations.
invoke accept,[socket_server],addr_client,sizeof.sockaddr_in
mov [esi + 000001cc], ecx
Объясните пожалуйста что из этого всего на скриншотах база, смещение я так понимаю (01CC) но смещение относительно чего?
$ gcc -fPIC -o a.out ./1_1.s
Параметр -fPIC не помогает
-fPIC
изменяет ассемблерный вывод компилятора, на готовый ассемблерный файл этот ключ никак не влияет.movl $.hello_str, %edi
-m32
. 1) Первая страница памяти отвечает за обращение к первой странице памяти вторая ко второй и так далее?
2) Связка виртуального и физического адреса позволяет создать что-то по типу перенаправления?
3) Работает ли обратная связь когда если пишу в виртуальную страницу идет перенаправление на физическую?
4) Для работоспособности в данном режиме надо создаться страницы в диапазоне которых лежии код программы?
5) Страничная организация памяти работает паралельно с адресацией по дискриптору или это замена?
What is flat assembler g?
It is an assembly engine designed as a successor of the one used in flat assembler 1, one of the recognized assemblers for x86 processors. This is a bare engine that by itself has no ability to recognize and encode instructions of any processor, however it has an ability to become an assembler for any CPU architecture. It has a macroinstruction language that is substantially improved compared to the one provided by flat assembler 1 and it allows to easily implement instruction encoders in form of customizable macroinstructions. This approach has a great flexibility at the cost of performance.