Прога в сылке. Весит мало )
Спасибо!
© Альберт Эйнштейн
Код: Выделить всё
mov ax,es:0001... с первой попытки погуглить Финогенов ассемблер - все почему-то нашлосьChip115 писал(а):...а то по автору искать как то затруднительно
если это не защищенный режим, где сегментные регистры выполняюь другую роль, тоChip115 писал(а):Вот еще завис на прямом методе адресации
Код: Выделить всё
mov 400[12h],bx Код: Выделить всё
mov 4000[12h],bxКод: Выделить всё
mov DS:[12h],bx Оторвал и сделал. Но вопросы все равно осталисьChip115 писал(а):ЗЫ приятно помогать людям, которые не считают зазорным оторвать ...опу от стула и попытаться хоть что-то сделать самому ...
... "двигать" ничего не нужно - все работает на аппаратном уровне. Записать число в ячейку с адресом 4012h можно по-разному:Chip115 писал(а):Получается для того что бы вычислить фактический адрес, мне надо взять 400h , сдвинуть его влево (получается домножить на 16) и прибавить смещение 12h .
Получается адрес 4012h.
Код: Выделить всё
mov bx,400h
mov ds,bx ;
mov bx,12h
mov byte ptr[bx],55h
Код: Выделить всё
sub bx,bx
mov ds,bx ;
mov bx,4000h
mov byte ptr[bx+12],55h
А это не относительная индексная адресация?ChipKiller писал(а): mov ds,bx ;
mov bx,12h
mov byte ptr[bx],55h
Код: Выделить всё
MyTable equ 5000h
mov cx, MyTable[si]Код: Выделить всё
mov di,12h
mov cx,11h
mov 5000h[di],cx ; передаем 11h в ячейку памяти по адресу 5012h
Код: Выделить всё
MyTable equ 5000h
mov cx, MyTable[si]Код: Выделить всё
mov di,12h
mov cx,11h
mov 5000h[di],cx ; передаем 11h в ячейку памяти по адресу 5012h
.. во-первых что за эмулятор? Для DOSa удобно использовать td.exe от Borland. Во-вторых - адрес у 8086 (8088) 20-ти разрядный и очевидно эмулятор "выпендривается" именно по этому поводу. В память пишут/читают с "оглядкой" на сегментный регистр.Chip115 писал(а):Я прав? не пойму почему эмулятор выпендривается
Если в DS 4000h, MyTable = 5000h, а SI = 12h, то mov cx, MyTable[si] загружает в CX значение, лежащее по физическому адресу 45012h.Chip115 писал(а):у меня пользовательская область памяти начинается с адреса 4000h . Значит в ds 4000h?
TD -- не эмулятор, а отладчик, который работает на реальном "железе", а не притворяется им. Эмуляторы -- это всякие там Bochs, QEMU и т.д. и т.п.ChipKiller писал(а):во-первых что за эмулятор? Для DOSa удобно использовать td.exe от Borland
Прав но не совсем. В реальном режиме на x86 индексные регистры при вычислении адреса умножаются на 16, если мне память не изменяет. Т.е. в вашем случае результирующий адрес будетChip115 писал(а): "Индексная адресация (indexed addressing) — эффективный адрес операнда
вычисляется путём суммирования значения прямого адреса и индекса. Для индекса
чаще всего используются регистры si и di. Например:Команда загружает в регистр cx значение, содержащееся по адресу, равномуКод: Выделить всё
MyTable equ 5000h mov cx, MyTable[si]
сумме si и значения MyTable"
допустим у меня в SI лежит число 12h . получается тут в сх загружается значение , которое находится по адресу 5012h ?
теперь другая задача.
для того что бы передать значение,которое находится в сх по адресу 5012h, я пишу такЯ прав? не пойму почему эмулятор выпендриваетсяКод: Выделить всё
mov di,12h mov cx,11h mov 5000h[di],cx ; передаем 11h в ячейку памяти по адресу 5012h