По аналогии с регистровыми и непосредственными операндами адрес операнда в памяти также можно не указывать непосредственно, а хранить в любом регистре. До 80386 для этого можно было использовать только BX, SI, DI и BP, но потом эти ограничения были сняты и адрес операнда разрешили считывать также и из EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP (но не из AX, CX, DX или SP напрямую — надо использовать EAX, ECX, EDX, ESP соответственно или предварительно скопировать смещение в BX, SI, DI или BP). Например, следующая команда помещает в регистр AX слово из ячейки памяти,
селектор сегмента которой находится в DS, а смещение — в BX:
mov ax,[bx]Как и в случае прямой адресации, DS используется по умолчанию, но не во всех случаях: если смещение берут из регистров ESP, EBP или BP, то в качестве сегментного регистра используется SS. В реальном режиме можно свободно пользоваться всеми 32-битными регистрами, надо только следить, чтобы их содержимое не превышало границ 16-битного слова.
И небольшой примерчик для медитации...
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSQB6-5X3Od10c-3ta4YzQSPAFmufzb6kJLpwiqKwRD4IZ50nX8zmvmcvxnI70FFlv_SCl5BBILurjB57RU7ng7hwbphMmuFTniOnolDKFJoiel4oX9zNus23LBOtlST68OVnyOK1ajNlH/s400/addr1.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX1kG8bHeSka-_45YbUbaH-2x6Yqmj75HQL06wnOkCJLRTDMYZfBwLwVTCgebHDFaOJWiGwT13YONmO8fPIKuk4y2PzMj3ReJ3j_oefQHEdKNQuwMh77GOSNFQ4cR6WPmcjQr3lAsrC2yk/s400/addr2.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXvi67-hK9zXE0_isbqwr3M-zqAcSzRo9RGyoCrjJtE9BCp07lCedqaeUg64eAeoRXSq5N0_oU9bZVKxXFC8QyAhMrmJ0qSfhTLQHPMc6FbZtYYEC6zI6xDV3kwcmydFyGcWNKWybk-qR2/s400/addr3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPWD2LSIobkFxL1ZyQ9UKkww6kkM3-VH58kF8FcJlt_Mf-X-SZxbJ3-ji66W41r1EztUcrn2hrKSQxpIvIR1pndEzEVcfJG9X0Xp8v09SpqbxRnVx_Dxj6a0iqXGMi8wsbwn1QlgYeFed/s400/addr4.png)
Комментариев нет:
Отправить комментарий