Size: a a a

Ассемблер

2020 September 28

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
кстати, а кто как определяет массив структур?
это же по сути массив простых указателей
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Rusty Shackleford
это же по сути массив простых указателей
указателей?
источник

RS

Rusty Shackleford in Ассемблер
на структуру
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
struct RGB
  r rb 1
 g rw 1
 b rd 1
ends

вот для примера, как  определить массив из 5 экземпляров этой структуры?
источник

RS

Rusty Shackleford in Ассемблер
ну я представляю, на вскидку так, выделить место под rgb.sizeof*5 и сделать массив из 8*5 байт указателей, каждый из которых адрес_места_выделенное_под_RGB+размер_1_стуктуры
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Rusty Shackleford
ну я представляю, на вскидку так, выделить место под rgb.sizeof*5 и сделать массив из 8*5 байт указателей, каждый из которых адрес_места_выделенное_под_RGB+размер_1_стуктуры
пусть это будет палитра из 5 цветов, поэтому не указатели нужны, а именно экземпляры
источник

s

s54816 in Ассемблер
R G
да, надо это исследовать. Возможно утилита symbols выводит не всё..
Всё она выводит, просто она по макроопределениям не ходит:
include 'macro/proc32.inc'
proc x
local thisislocal:DWORD
endp
call x
выхлоп symbols:
x: 0x0000000000000000, defined in ...
flag?1: 0x0000000000000000, defined in ...
loc?6: 0x0000000000000004, defined in ...
localbytes?4: 0x0000000000000004, defined in ...
parmbytes?3: 0x0000000000000000, defined in ...
x%: 0x0000000000000000, defined in ...
current?5: 0x0000000000000004, defined in ...
..var?7: -0x0000000000000004+ebp, defined in ...
^^^ А вот это локальная переменная, но она потеряла имя по пути, и его надо доставать из данных препроцессора. Поэтому я и говорю, что будет зависеть от реализации макросов.
источник

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
пусть это будет палитра из 5 цветов, поэтому не указатели нужны, а именно экземпляры
так а что мешает получить доступ к экземляру по адресу указателя
источник

RS

Rusty Shackleford in Ассемблер
будет 5 указателей адрес каждого следующего будет больше предыдущего на sizeof.размер_одного_экземпляра
источник

RS

Rusty Shackleford in Ассемблер
по ним можно будет получить доступ к каждому экземпляру
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Rusty Shackleford
будет 5 указателей адрес каждого следующего будет больше предыдущего на sizeof.размер_одного_экземпляра
лучше кодом конечно
pal ...
источник

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
лучше кодом конечно
pal ...
struct RGB
  r rb 1
 g rw 1
 b rd 1
ends
size_of_rgb     dq  $-RGB

struct_arrea    rb size_of_rgb*5

;Доступ к экземпляру 1
lea     RAX, [struct_arrea]
mov     RBX, [RAX+rgb.r] доступ к члену R первого экземпляра
источник

RS

Rusty Shackleford in Ассемблер
как-то так
источник

RS

Rusty Shackleford in Ассемблер
соответственно ко второму экземляру доступ что бы получить - add RAX, sizeof.rgb*2
источник

RS

Rusty Shackleford in Ассемблер
не ругайтесь я новичек ) если что
источник

СБ

Саша Брославский... in Ассемблер
Всем доброй ночи, киньте пожалуйста книги по ассемлеру, хотябы руководство. Очень интересно познать дзен ассемблера. Заранее спасибо
источник

RS

Rusty Shackleford in Ассемблер
Rusty Shackleford
struct RGB
  r rb 1
 g rw 1
 b rd 1
ends
size_of_rgb     dq  $-RGB

struct_arrea    rb size_of_rgb*5

;Доступ к экземпляру 1
lea     RAX, [struct_arrea]
mov     RBX, [RAX+rgb.r] доступ к члену R первого экземпляра
код кривой но логика думаю примерно понятна моя
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
pal rb size.RGB*5

mov bx,pal
mov ax,word[bx+RGB.g]

add bx,size.RGB*3
источник

s

s54816 in Ассемблер
Rusty Shackleford
struct RGB
  r rb 1
 g rw 1
 b rd 1
ends
size_of_rgb     dq  $-RGB

struct_arrea    rb size_of_rgb*5

;Доступ к экземпляру 1
lea     RAX, [struct_arrea]
mov     RBX, [RAX+rgb.r] доступ к члену R первого экземпляра
sizeof.ИМЯСТРУКТУРЫ автоматически создаётся фасмом. Можно сделать что-нибудь типа:

struc array spec* {
 match type[count],spec \{
   virtual
     . type
   end virtual
   rept count index:0 \\{
      \\.\\#index type
    \\}
 \}
}

xxx array RECT[3]

mov eax,[xxx.0.left]
mov ecx,[xxx.1.top]
mov edx,[xxx.2.right]
lea ecx,[xxx+sizeof.RECT*2]
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
a, sizeof значит
источник