Сейчас на форуме: _MBK_, ManHunter, Magister Yoda, rtsgreg1989 (+9 невидимых)

 eXeL@B —› Основной форум —› MASM пишет что-то непонятное
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 июля 2005 21:32
· Личное сообщение · #1

Привет всем,
Хотел еще вопросик задать простенький,
Пользуюсь MASM для MS DOS, компилирую программку
ml.exe myname.asm /AT
Выдает ошибку в строчке:
mov ax, [bx]
Пишет must be index or base register
Что это значит, вообще хочу переслать в ax, то что содержиться по адресу в bx.
Спасибо всем кто отвечает!




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 14 июля 2005 21:50
· Личное сообщение · #2

wasm.ru/forum/

-----
EnJoy!





Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 14 июля 2005 23:33
· Личное сообщение · #3

freshman
Правильно:
mov ax, bx

mov ax, [bx]
а так ты пересылаешь адрес. Поправьте меня если я не прав.

-----
Don_t hate the cracker - hate the code.




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 14 июля 2005 23:35
· Личное сообщение · #4

Jupiter
На фиг ты человека туда послал? ИМХО, ответа там всё равно не найти, а темы лишние лучше не разводить.

freshman пишет:
Выдает ошибку в строчке:

freshman, ну ты же понимаешь, что ошибка не в этой строке. Тогда зачем так спрашивать?
Прикрепи лучше файлик или сам ищи ошибку (а скорее всего опечатку).

freshman пишет:
Пишет must be index or base register
Что это значит,

Это значит, что в системе команд x86 процессора нет 16-ричных команд для загрузки из памяти указанной НЕ регистром указателем или регистром базы. У тебя BX – регистр базы, значит, такая команда есть, а вот если бы было наоборот:
mov bx, [ax]
То была бы эта ошибка.
Короче давай файлик.

Или я неправ?

-----
Всем привет, я вернулся




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 14 июля 2005 23:36
· Личное сообщение · #5

mysterio
Бред, ты спутал всё насвете, это же не lea.

-----
Всем привет, я вернулся





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 14 июля 2005 23:58
· Личное сообщение · #6

Bitfry
На фиг ты человека туда послал? ИМХО, ответа там всё равно не найти, а темы лишние лучше не разводить.
ну-ну, а здесь подобные темы разводить - самое то, я понимаю
но ты прав, что не туда его послал - ему скорее нужно подробнее изучить ассемблер

Короче давай файлик.
только так. а то, может быть, требуется что-нить типа byte/word ptr:

-----
EnJoy!





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 15 июля 2005 00:02
· Личное сообщение · #7

Jupiter пишет:
а то, может быть, требуется что-нить типа byte/word ptr

Наверняка.




Ранг: 78.6 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 15 июля 2005 01:46 · Поправил: read_me
· Личное сообщение · #8

mov ax,word ptr [bx]
кароче



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 июля 2005 02:12
· Личное сообщение · #9

Всем большое спасибо, дело в том, что ту програмку которую я писал в начале я затер своими "экспериментами", так что установить что было в начале уже нельзя, наверное в программе я написал
mov bx, [ax]
после переработки получилась такая вот рабочая программка:
CSEG segment
org 100h
Begin:
mov dx, offset data
mov bx,dx
add bx,2
mov ax,word ptr [bx]
int 20h
data db 'ABCD$'
CSEG ends
end Begin
Вообще то она просто пишет в ax "CD", благодаря вам узнал что ax и bx не равнозначны по способам применения. Еще раз большое спасибо!




Ранг: 78.6 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 15 июля 2005 02:24
· Личное сообщение · #10

ax и bx равнозначны просто если ты пишешь mov т.е. загрузить в регистр то должен указать размер ( скока загружать ) этого регистра, у bx в твоём случае было 2 байта вот и писали word ptr



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 15 июля 2005 09:36
· Личное сообщение · #11

read_me пишет:
x и bx не равнозначны по способам применения

В данном случае не совсем так: в ДОСе ax, bx, cx и dx используются для загрузки параметров при выполнении прерываний. В остальном - разницы нет, кроме специфичных команд типа loop, stos, scas...

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 45.7 (посетитель)
Активность: 0.050
Статус: Участник
EBFE

Создано: 15 июля 2005 10:06
· Личное сообщение · #12

еще короче ax не базовый регистр, т.е. для адресации памяти он неприменим



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 15 июля 2005 10:19
· Личное сообщение · #13

Bitfry пишет:
в системе команд x86 процессора нет 16-ричных команд для загрузки из памяти указанной НЕ регистром указателем или регистром базы.

Под 16-ричными командами я, естественно, имел в виду команды для 16-разрядных регистров .

-----
Всем привет, я вернулся



 eXeL@B —› Основной форум —› MASM пишет что-то непонятное
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати