Size: a a a

2020 March 17

d

d1vunit in pro.asm
GUIhandle:
   pushad
   sgdt fword [storage]
   sidt fword [storage+6]
   cli
   in al,0x70
   btr ax,7
   out 0x70,al
 
   mov edx,cr0
   btr dx,0
   mov cr0,edx
   
   jmp far 0x0000:REAL
   
REAL:
   xor dx,dx
   mov ds,dx
   mov es,dx
   mov ss,dx
   mov gs,dx
   mov dx,0xb800
   mov fs,dx
   
   jmp short continue
REAL_IDT:
   
   dw 0xff00
   dd 0x00000000
   
continue:

   lidt fword ptr REAL_IDT
   
   mov al,0x11 ; init controler interrupt master slave
   out 020h, al
   out 0A0h, al
   xor al,al ; set offset in IDT hardware descriptor master
   out 021h, al
   mov al, 0x08 ; ; set offset in IDT hardware descriptor slave
   out 0A1h, al
   mov al, 00000100b
   out 021h, al
   mov al, 2
   out 0A1h, al
   mov al, 00000001b
   out 021h, al
   out 0A1h, al
   
   sti
   
   in al,0x70
   bts ax,7
   out 0x70,al
   
.CallBiosPrint:

   mov ah,0x0a
   cld
.lp:
   lodsb
   int 0x10
   loop .lp
   
   in al,0x70
   btr ax,7
   out 0x70,al
   
   cli
   
   lgdt fword ptr storage
   lidt fword [storage+6]
   
   mov edx,cr0
   bts dx,0
   mov cr0,edx
   
   jmp far 0x0008:.Protected
   
.Protected:
   
   mov dx,0x0010
   mov ss,dx
   mov ds,dx
   mov es,dx
   mov gs,dx
   mov dx,0x0018
   mov fs,dx
   
   mov al,0x11 ; init controler interrupt master slave
   out 020h, al
   out 0A0h, al
   mov al,0x30 ; set offset in IDT hardware descriptor master
   out 021h, al
   mov al, 0x38 ; ; set offset in IDT hardware descriptor slave
   out 0A1h, al
   mov al, 00000100b
   out 021h, al
   mov al, 2
   out 0A1h, al
   mov al, 00000001b
   out 021h, al
   out 0A1h, al
   
   in al,0x70
   bts ax,7
   out 0x70,al
   
   sti
   
   
.return:
   popad
   iretd
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮ in pro.asm
какие виды инструкции отсутствуют в celeron'ах?
источник

d

d1vunit in pro.asm
Aiwan ╭∩╮ (òÓ,) ╭∩╮
какие виды инструкции отсутствуют в celeron'ах?
?
источник

s

s54816 in pro.asm
d1vunit
GUIhandle:
   pushad
   sgdt fword [storage]
   sidt fword [storage+6]
   cli
   in al,0x70
   btr ax,7
   out 0x70,al
 
   mov edx,cr0
   btr dx,0
   mov cr0,edx
   
   jmp far 0x0000:REAL
   
REAL:
   xor dx,dx
   mov ds,dx
   mov es,dx
   mov ss,dx
   mov gs,dx
   mov dx,0xb800
   mov fs,dx
   
   jmp short continue
REAL_IDT:
   
   dw 0xff00
   dd 0x00000000
   
continue:

   lidt fword ptr REAL_IDT
   
   mov al,0x11 ; init controler interrupt master slave
   out 020h, al
   out 0A0h, al
   xor al,al ; set offset in IDT hardware descriptor master
   out 021h, al
   mov al, 0x08 ; ; set offset in IDT hardware descriptor slave
   out 0A1h, al
   mov al, 00000100b
   out 021h, al
   mov al, 2
   out 0A1h, al
   mov al, 00000001b
   out 021h, al
   out 0A1h, al
   
   sti
   
   in al,0x70
   bts ax,7
   out 0x70,al
   
.CallBiosPrint:

   mov ah,0x0a
   cld
.lp:
   lodsb
   int 0x10
   loop .lp
   
   in al,0x70
   btr ax,7
   out 0x70,al
   
   cli
   
   lgdt fword ptr storage
   lidt fword [storage+6]
   
   mov edx,cr0
   bts dx,0
   mov cr0,edx
   
   jmp far 0x0008:.Protected
   
.Protected:
   
   mov dx,0x0010
   mov ss,dx
   mov ds,dx
   mov es,dx
   mov gs,dx
   mov dx,0x0018
   mov fs,dx
   
   mov al,0x11 ; init controler interrupt master slave
   out 020h, al
   out 0A0h, al
   mov al,0x30 ; set offset in IDT hardware descriptor master
   out 021h, al
   mov al, 0x38 ; ; set offset in IDT hardware descriptor slave
   out 0A1h, al
   mov al, 00000100b
   out 021h, al
   mov al, 2
   out 0A1h, al
   mov al, 00000001b
   out 021h, al
   out 0A1h, al
   
   in al,0x70
   bts ax,7
   out 0x70,al
   
   sti
   
   
.return:
   popad
   iretd
Мне почему-то кажется, что вызывать BIOS, находясь в 32-битном реалмоде — это как-то неправильно. Возможно, стоит сначала загрузить в CS 16-битный дескриптор?
источник

d

d1vunit in pro.asm
А как? Есть дескрипторы gdt и в real mode?
источник

d

d1vunit in pro.asm
Это только касается же protected и long
источник

s

s54816 in pro.asm
d1vunit
А как? Есть дескрипторы gdt и в real mode?
В реалмоде при загрузке в сегментный регистр в теневой части обновляется только база, всё остальное остаётся. Поэтому тебе надо в защищённом режиме загрузить в CS 16-битный сегмент, а потом уже убирать флаг в CR0.
источник

d

d1vunit in pro.asm
я просто думал что когда мы сбрасываем флаг то теневая часть не работает в real mode
источник

s

s54816 in pro.asm
d1vunit
я просто думал что когда мы сбрасываем флаг то теневая часть не работает в real mode
Она работает, и это позволяет делать всякие https://ru.wikipedia.org/wiki/Unreal_mode
источник

d

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

d

d1vunit in pro.asm
только размер инструкции и памяти
источник

d

d1vunit in pro.asm
и все ?
источник

ЕК

Евгений Красников (Jin X) in pro.asm
d1vunit
а что именно в теневой части работает
Лимит.
Можно установить лимит на 2 Гб и обращаться к 2 Гб памяти через 32-битные регистры.
источник

d

d1vunit in pro.asm
ага понял
источник

L

Leon in pro.asm
Евгений Красников (Jin X)
Лимит.
Можно установить лимит на 2 Гб и обращаться к 2 Гб памяти через 32-битные регистры.
Только db 66h не забываем где нужно
источник

s

s54816 in pro.asm
Leon
Только db 66h не забываем где нужно
Насколько древним должен быть ассемблер, чтобы он не умел сам расставлять префиксы?
источник

L

Leon in pro.asm
А ты ему сам сможешь в рамках одного файла сказать чтобы он сменил режим префиксирования? Я не в курсе совркменных тенденций🙂
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮ in pro.asm
R G
фасм это круто
а зачем ты полностью путь к инклуд прописываешь? ты ж в родном редакторе работаешь, там можно без полного пути
источник

s

s54816 in pro.asm
Leon
А ты ему сам сможешь в рамках одного файла сказать чтобы он сменил режим префиксирования? Я не в курсе совркменных тенденций🙂
Как минимум фасму я могу что угодно сказать. Насм тоже умеет.
источник

L

Leon in pro.asm
s54816
Как минимум фасму я могу что угодно сказать. Насм тоже умеет.
Ок, я отстал😁
источник