Size: a a a

2020 March 15

s

s54816 in pro.asm
d1vunit
64 бита это теневая часть которая хранит в себе дескриптор сегмента это работает для protected и long mode
Что толку это обсуждать, если последнюю возможность это прочитать убрали вроде бы в 286 ещё?
источник

ЕК

Евгений Красников (Jin X) in pro.asm
d1vunit
как ты можешь 16 бит загружать в 32
Учите матчасть, товрищ.
Intel SDM, том 2B, страница 4-35 инструкция mov. Там написано как в r32 записывается Sreg (подскажка: zero extended).
источник

R

Rabu in pro.asm
REX.W + 8C /r                         MOV r16/r32/m16, Sreg  
Move zero extended 16-bit segment register to r16/r32/r64/m16.
источник

d

d1vunit in pro.asm
Да проверил был не прав
источник

d

d1vunit in pro.asm
Извини ты победил
источник

d

d1vunit in pro.asm
Интересно как ? Это только для сегментых ?
источник

d

d1vunit in pro.asm
Что это делает инструкция только не надо отсылать в крации
источник

s

s54816 in pro.asm
Евгений Красников (Jin X)
Учите матчасть, товрищ.
Intel SDM, том 2B, страница 4-35 инструкция mov. Там написано как в r32 записывается Sreg (подскажка: zero extended).
А у меня в мануале постарше там ниже в описании «If the register is a destination operand, the resulting value in the two high-order bytes of the register is implementation dependent». И я только что об этом узнал, кстати.
источник

d

d1vunit in pro.asm
Я тоже узнал
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Кстати, про CS = 0 есть отдельный прикол.
Нет гарантии, что CS = 0 на старте. Как? А вот так, BIOS вполне может загрузить код с CS:IP = 7C0h:0.
Вероятно, такие приколы встречаются в старых или ещё каких-то биосах, то это вполне возможная ситуация.
Именно поэтому в начале пишут что-то типа jmp 0:7C10h или push 0 / push 10h / retf, что я бы тоже посоветовал сделать, если значение CS должно быть нулевым.
источник

s

s54816 in pro.asm
Евгений Красников (Jin X)
Кстати, про CS = 0 есть отдельный прикол.
Нет гарантии, что CS = 0 на старте. Как? А вот так, BIOS вполне может загрузить код с CS:IP = 7C0h:0.
Вероятно, такие приколы встречаются в старых или ещё каких-то биосах, то это вполне возможная ситуация.
Именно поэтому в начале пишут что-то типа jmp 0:7C10h или push 0 / push 10h / retf, что я бы тоже посоветовал сделать, если значение CS должно быть нулевым.
Нет, в спеке написано явно 0:7c00. То есть, да, может быть кривой биос, но это его проблемы.
источник

ЕК

Евгений Красников (Jin X) in pro.asm
s54816
Нет, в спеке написано явно 0:7c00. То есть, да, может быть кривой биос, но это его проблемы.
Не знаю, что там в спеке написано, но когда твой код не будет работать где-то, и к тебе придут и скажут: "Кривая твоя прога", — это уже будет твоя проблема, потому как ты будешь сидеть и чесать голову, почему не работает. Все вот эти нюансы нужно знать и по возможности учитывать.
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Но это уже, конечно, личное дело каждого. Делать всё только в соответствии с документацией или учитывать и суровые реальности...
источник

d

d1vunit in pro.asm
d1vunit
Что это делает инструкция только не надо отсылать в крации
?
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Я не понял вопроса.
источник

d

d1vunit in pro.asm
как работает это инструкция mov r16/32/64,segment register
источник

d

d1vunit in pro.asm
точнее наоборот
источник

d

d1vunit in pro.asm
что же загружается в остальные биты
источник

R

Rabu in pro.asm
🤦‍♂️
источник

s

s54816 in pro.asm
Евгений Красников (Jin X)
Не знаю, что там в спеке написано, но когда твой код не будет работать где-то, и к тебе придут и скажут: "Кривая твоя прога", — это уже будет твоя проблема, потому как ты будешь сидеть и чесать голову, почему не работает. Все вот эти нюансы нужно знать и по возможности учитывать.
98 винде было норм без джампа, если я правильно помню. Посмотрел: и XP вот тоже норм.
источник