Как реализовать этот код на си?
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
Мне нужно текст в 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 в виде нулей и единиц