LINUX.ORG.RU

GNU Assembler array offset


0

1

День добрый.

В интеловском синтаксисе можно делать так:

MASS    dw      10h,20h,30h,5h,40h,15h,20h,70h,35h,34h
...
lea     BX, MASS
...
add     BX, 2 
для перемещения к следующему элементу массива. В синтаксисе AT&T получилось только так:
array:	.byte	0x11,0x12,0x31,0x7,0x45,0x6,0x77,0x28,0x9,0x10
...
lea array, %eax
...
movb (%eax, %edx), %bl
где в %edx — смещение, а значение на указанном адресе заносится в %bl. Получается, надо использовать еще один регистр. Как можно этого избежать?


Ничё не понял. Что сделать-то надо?

И да, для «перемещения к следующему элементу массива» давно придумали lods и stos

Led ★★★☆☆
()
Ответ на: комментарий от Odin

>можно поподробнее об этом?

В любом учебнике/справочнике по x86

Led ★★★☆☆
()

>Как можно этого избежать?
Вставить директиву .intel_syntax noprefix «i не морочити собi голову».

для «перемещения к следующему элементу массива» давно придумали lods и stos

Их, конечно, придумали, но если надо взять элемент, произвести вычисления, положить результат обратно, то не помогут они.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

>Вставить директиву .intel_syntax noprefix «i не морочити собi голову».

с таким же успехом могу перейти на nasm. но вопрос абсолютно не в этом.

Odin
() автор топика
Ответ на: комментарий от Led

>И да, для «перемещения к следующему элементу массива» давно придумали lods и stos

Сразу видно профана - никто при работе с массивами цепочными командами не пользуется, они удобны только с префиксом rep

anonymous
()
Ответ на: комментарий от anonymous

И при этом требуют строго определенные регистры - eax, edi, esi, короче говоря невыгодны во всех отношениях для данной задачи.

anonymous
()
Ответ на: комментарий от Odin

>неа

ну ты лопух - тебе написали полный аналог твоего говна

anonymous
()
Ответ на: комментарий от Odin

Так у тебя же массив байтов, в чём проблема?

Для проверки написал такой код

.intel_syntax noprefix
.data
MASS: .byte 0x10,0x20,0x30,0x5,0x40,0x15,0x20,0x70,0x35,0x34
.text
.globl main
main:
lea     BX, MASS
add     BX, 2 
ret

компилируем, дизассемблируем

080483e4 <main>:
 80483e4:       66 8d 1d 10 a0 04 08    lea    0x804a010,%bx
 80483eb:       66 83 c3 02             add    $0x2,%bx
 80483ef:       c3                      ret
Yareg ★★★
()
Ответ на: комментарий от Yareg

извиняюсь, протупил со смещением. работает. спасибо!

Odin
() автор топика
Ответ на: комментарий от anonymous

>Сразу видно профана - никто при работе с массивами цепочными командами не пользуется, они удобны только с префиксом rep

Почему ты считаешь, что «мнение» тупого ламера здесь кого-то интересует?

Led ★★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.