Size: a a a

Ассемблер

2021 September 05

E

Entusiast in Ассемблер
Ну вот - компилятор вычисляет, а вычислять начал - когда придумали метки

В других случаях сначала разбирались - куда вообще грузится программа, потом вычисляли адреса
источник

E

Entusiast in Ассемблер
Вот я понимаю - "структура это часть ЯВУ" - здесь подразумевается, что в памяти - это просто набор байт определённого размера, при этом существует некая граница, которую придумали программисты - "вот эта область будет полем структуры, поле такого-то размера, потом ещё поле, ..."

Но указатель -  он что в ЯВУ определяется как "переменная указывает на ячейку", что в ассемблере - "переменная указывает на ячейку", что в памяти - выглядит так же - ячейка указывает на ячейку... Так чем он привязан к С, или вообще к ЯВУ?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
прогая на асме указатели необязательны. в яву они присутствуют чтоб абстрагироваться от архитектуры, адреса в которых могут иметь различный размер/битность (разыменовываем указатель и имеем доступ к памяти не замарачиваясь какой битности этот адрес)
источник

d

disba1ancer in Ассемблер
прогая на асме у нас есть указатели, в основном в виде плюсовых constexpr констант, но если мы такую штуку кладём в регистр или стек, то у нас получается переменная-указатель
источник

E

Entusiast in Ассемблер
Даже чуть больше, указатели начали развиваться от ассемблера:
Адресная арифметика появилась как логичное продолжение идеи указателей, унаследованной от ассемблерных языков: в последних имеется возможность указать некое смещение от текущего положения.

int* p; // Допустим, p указывает на адрес 200
p++;    // После инкрементации она указывает на 200 + sizeof(int) = 204
p--;    // Сейчас она вновь указывает на 200.
источник

ST

Saenro T in Ассемблер
А что за нули в четвёртом столбике?
источник

d

disba1ancer in Ассемблер
это флаги, этого поля нет в списке прерываний ральфа броуна, но на осдев вики про него написано
источник

ST

Saenro T in Ассемблер
А тип 3 — что означает?
источник

d

disba1ancer in Ассемблер
что-то от ACPI можно куда-нибудь сохранить и использовать, а при надобности восстановить, на bochs у меня там ACPI таблицы лежат
источник

s

s54816 in Ассемблер
Вот только в ассемблере нет адресной арифметики. Даже для типизированных меток.
источник

d

disba1ancer in Ассемблер
в каком смысле нет?
источник

ST

Saenro T in Ассемблер
Пишут что type 3 это — Undefined - Reserved for future use. Any range of this type must be treated by the OS as if the type returned was AddressRangeReserved.
источник

s

s54816 in Ассемблер
В смысле после x dd 1 выражение x + 1 не будет равно адресу x + 4.
источник

E

Entusiast in Ассемблер
a: dd str

str: db '123', 0

str2: db '123', 0

add dword[a], 4 ; a указывает на str2
sub dword[a], 4 ; a указывает снова на str
источник

E

Entusiast in Ассемблер
Может потому что в ассемблере тебе нужно самому рассчитывать sizeof(int)?
источник

d

disba1ancer in Ассемблер
--------b-15E820-----------------------------
INT 15 - newer BIOSes - GET SYSTEM MEMORY MAP
 AX = E820h
 EAX = 0000E820h
 EDX = 534D4150h ('SMAP')
 EBX = continuation value or 00000000h to start at beginning of map
 ECX = size of buffer for result, in bytes (should be >= 20 bytes)
 ES:DI -> buffer for result (see #00581)
Return: CF clear if successful
     EAX = 534D4150h ('SMAP')
     ES:DI buffer filled
     EBX = next offset from which to copy or 00000000h if all done
     ECX = actual length returned in bytes
 CF set on error
     AH = error code (86h) (see #00496 at INT 15/AH=80h)
Notes:  originally introduced with the Phoenix BIOS v4.0, this function is
   now supported by most newer BIOSes, since various versions of Windows
   call it to find out about the system memory
 a maximum of 20 bytes will be transferred at one time, even if ECX is
   higher; some BIOSes (e.g. Award Modular BIOS v4.50PG) ignore the
   value of ECX on entry, and always copy 20 bytes
 some BIOSes expect the high word of EAX to be clear on entry, i.e.
   EAX=0000E820h
 if this function is not supported, an application should fall back
   to AX=E802h, AX=E801h, and then AH=88h
 the BIOS is permitted to return a nonzero continuation value in EBX
   and indicate that the end of the list has already been reached by
   returning with CF set on the next iteration
 this function will return base memory and ISA/PCI memory contiguous
   with base memory as normal memory ranges; it will indicate
   chipset-defined address holes which are not in use and motherboard
   memory-mapped devices, and all occurrences of the system BIOS as
   reserved; standard PC address ranges will not be reported
SeeAlso: AH=C7h,AX=E801h"Phoenix",AX=E881h,MEM xxxxh:xxx0h"ACPI"

Format of Phoenix BIOS system memory map address range descriptor:
Offset  Size  Description  (Table 00580)
00h  QWORD  base address
08h  QWORD  length in bytes
10h  DWORD  type of address range (see #00581)

(Table 00581)
Values for System Memory Map address type:
01h  memory, available to OS
02h  reserved, not available (e.g. system ROM, memory-mapped device)
03h  ACPI Reclaim Memory (usable by OS after reading ACPI tables)
04h  ACPI NVS Memory (OS is required to save this memory between NVS
   sessions)
other  not defined yet -- treat as Reserved
SeeAlso: #00580
источник

d

disba1ancer in Ассемблер
скорее всего ты смотришь устаревшую инфу...
источник

s

s54816 in Ассемблер
Именно поэтому я и говорю, что нет. В ассемблере адреса — это просто адреса, даже если они типизированные немного.
источник

d

disba1ancer in Ассемблер
это не особо нужно, но есть вариант адресации с умножением регистра
источник
2021 September 06

E

Entusiast in Ассемблер
Ну это не относится к адресной арифметике..
источник