Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2016, 16:39   #1
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию TASM. Переменная в квадратных скобках - значение или адрес?

Доброго времени суток!

Начал читать книжку по Асму (tasm) за авторством Тома Свана.

на 56 стр. есть разъяснение касательно употребления квадратных скобок в tasm, на примере команды MOV

Как утверждается:
если операнд в скобках - то он означает данные
если операнд без скобок - то он означает адрес (на данные)

пишу такой код
Код:
..........
mov ax, x
mov bx, [y]
..........
x dw 77h
y dw 88h
Но нифига подобного

Прогоняя программу в Турбо-дебаггере - вижу, что в AX и BX записываются 77h и 88h соответсвенно.
Хотя в ax - должен записаться адрес переменной Х, а не ее значение...

Автор врет???
Можно ли как-нибудь вытащить адрес переменной, за исключением применения
Код:
mov ax, offset x
Гуглинг выдает ответ на этот вопрос для FASMa, там да
- без скобок - адрес
- со скобками - значение
Изображения
Тип файла: jpg Безымянный.jpg (96.3 Кб, 126 просмотров)
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 08.11.2016, 17:49   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

У меня тасм работает как и положенно. Без скобок смещение со скобками значение.
Может просто совпадение?
http://bitsavers.informatik.uni-stut...sers_Guide.pdf
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 08.11.2016, 21:50   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Pavia, как прочитать SMBus? В одном месте видел, что ты читал её но только на паскале.. На асме подскажи.. Мне нужно считать EDID от моника. Есть какие-нить идеи? Был-бы благодарен.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 09.11.2016, 05:35   #4
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
У меня тасм работает как и положенно. Без скобок смещение со скобками значение.
Может просто совпадение?
В каком смысле совпадение ?

полный код такой:
Код:
        model tiny

	dataseg
x dw 77h
y dw 88h

	CODESEG
	
	org 100h
Start:

	mov ax, x
	mov bx, [y]

	mov ah, 04Ch
	int 21h

End Start
Результат для AX и BX - заносятся значения...
(см. скрин TD)

при попытке указания режима IDEAL и\или другой модели памяти - компоновщик выдает предупреждение, что дескать: что X - нужно брать в скобки, но тем не менее создает OBJ файл

Кстати, TD выдает в конце код возврата "exit code 119" - хотел сразу спросить:
где взять список расшифровок значений кодов возрата ?

Pavia Можно попросить прогнать тебя данный исходник, и посмотреть выдает ли он все-таки адрес?
Какая у тебя версия Tasm'a ?

p-S:
ОС - Win 7 starter
Tasm - 4.1
Tlink - 7.1.30.1
Изображения
Тип файла: jpg Безымянный2.jpg (60.6 Кб, 129 просмотров)
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 09.11.2016 в 05:39.
Niro вне форума Ответить с цитированием
Старый 09.11.2016, 07:40   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Я работаю с 5 версией, компилирую под виндоус режим идиал. Из-за виндоуса поведение компилятора сильно отличпется.
Под дос да там присваевается значение,. там использую слово OFFSET ддя получения адресса.

MOV AX, OFFSET x
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 09.11.2016, 08:51   #6
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Ладно, тогда возник еще вопрос:
Можно ли поменять адреса, на которые ссылаются переменные?
Т.е.:
переменная А имеет адрес 100500
переменная В имеет адрес 200500

Можно ли сделать так, чтобы:
А ссылалась на адрес 200500
В ссылалась на адрес 100500

?
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 09.11.2016, 08:56   #7
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Используйте 3-ю переменную - указатель, в которой и храните требуемый адрес.
FPaul вне форума Ответить с цитированием
Старый 09.11.2016, 22:02   #8
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
если операнд в скобках - то он означает данные
если операнд без скобок - то он означает адрес (на данные)
Что в ранних TASM-ах, что в ранних MASM-ах, я имею ввиду чисто MS-DOS-овских TASM-ах и MASM-ах была кривая неоднозначность в синтаксисе. Ее можно увидеть глянув на листинг :
Код:
      6	0100  B8 0004		     mov ax, 4
      7	0103  B8 0004		     mov ax, [4]
*Warning* a.asm(7) [Constant] assumed to mean immediate	constant
      8	0106  A1 0004		     mov ax, ds:4
      9	0109  A1 0004		     mov ax, ds:[4]
     10
     11	010C  8B C3		     mov ax, bx
     12	010E  8B 07		     mov ax, [bx]
Тут ассемблер TASM даже предупреждает. Константа в квадратных скобках не означает косвенности. А вот имя регистра в квадратных скобках означает.

В общем, если тебе надо обратиться к операнду по адресу в виде константы, предвари эту константу именем сегмента.

4 - ясен пень это значение 4
[4] - и это тоже значение 4
ds:4 - косвенно по адресу (точнее, смещению) 4
bx - значение регистра bx
[bx] - косвенно по адресу в регистре bx

А вообще TASM унаследовал синтаксис MASM, который изначально был крив и неоднозначен.

Последний раз редактировалось Ethereal2; 09.11.2016 в 22:05.
Ethereal2 вне форума Ответить с цитированием
Старый 09.11.2016, 22:10   #9
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
Код:
        model tiny

	dataseg
x dw 77h
y dw 88h

	CODESEG
	
	org 100h
Start:

	mov ax, x
Если Model Tiny , то ты создаешь COM-программу. В ней нет раздельных сегментов и она всегда начинается с кода. Поэтому
Код:
        model tiny

	CODESEG
	
	org 100h
Start:

	mov ax, x
...

;в хвосте сегмента кода клади данные
x dw 77h
y dw 88h
И да, COM-программа создается так :
tasm /m/l proga.asm
tlink /t proga.obj

Последний раз редактировалось Ethereal2; 09.11.2016 в 22:16.
Ethereal2 вне форума Ответить с цитированием
Старый 10.11.2016, 05:29   #10
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
Если Model Tiny , то ты создаешь COM-программу. В ней нет раздельных сегментов и она всегда начинается с кода. Поэтому
Это я в принципе знаю, действительно в модели Tiny - один сегмент для данных, кода и стека. Но читая книгу Тома Свана, у него в начале есть шаблоны для com и exe программ - так, для модели Tiny - он указывает сегмент данных (единственное, там еще режим Ideal)
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить значение функции(или функция не определена), значение х вводится с клавиатуры Safok Помощь студентам 2 16.12.2014 08:04
array ключ и значение в круглых скобках khochuvseznat JavaScript, Ajax 2 05.10.2013 22:24
Переменная принимающая значение даты и null wm_leviathan C# (си шарп) 1 17.06.2012 15:50
Какое значение получит переменная k в приведенном фрагменте программы : zhayr Помощь студентам 1 17.05.2012 10:48
Три квадратных уравнения. Найти минимальное значение среди действительных корней этих уравнений. Паскаль. GE076 Помощь студентам 2 17.12.2007 20:41