Bardzo proste: http://4programmers.net/Assembler/Instrukcje_procesor%C3%B3w_rodziny_80x86_%28L%29
W skrócie:
Ładuje 32-bitowy wskaźnik z pamięci do określonego rejestru ogólnego np. DI oraz rejestru segmentowego ES. Przesunięcie umieszczane jest w DI, a segment w ES. Aby używać tej instrukcji słowo pod mniej znaczącym adresem w pamięci musi zawierać przesunięcie, a pod bardziej znaczącym adresem segment. To ułatwia ładowanie wskaźników typu far ze stosu i tablicy przerwań.
; kawałek pamięci np. pod adresem 0x0000:0x7E00:
0x00007E00: 0x00 0x00 0x00 0xB8
; ---------
; ^ mniej znaczący adres
Zatem:
LES DI, DWORD PTR 0x0000:0x7E00 ; lub etykieta VidAddress
; w rejestrze segmentowym ES znajdzie się 0xB800
; w rejestrze DI będzie 0x0000
Przykład 0x00:
; zachowaj oryginalne rejestry
PUSH BP
MOV BP, SP
; załaduj dane pod adres etykiety VidAddress
MOV SP, VidAddress
PUSH 0xB800
PUSH 0x0000
; pobierz dane z adresu etykiety do odpowiednich rejestrów/rejestrów segmentowych
LES DI, DWORD PTR VidAddress
; przywróć oryginalne rejestry
MOV SP, BP
POP BP
Przykład 0x01:
; ustaw wskaźnik do etykiety DI
MOV DI, VidAdress
; załaduj dane do pamięci pod adresem w rejestrze DI
MOV WORD [DI], 0x0000
MOV WORD [DI + 0x02], 0xB800
; i teraz linijka z przykładu
LES DI, DWORD PTR VidAddress
UWAGA: Kompilator Nasm nie przyjmie "DWORD PTR VidAddress
", zamiast tego użyj "[VidAddress]
"