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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2008, 12:58   #1
Artek80
 
Регистрация: 30.06.2008
Сообщений: 5
По умолчанию

не нашел тему, но раз здесь обсуждают самык начала то у меня такой вопрос, народ помогите разобраться, никак просто понять не могу, почему например в одном случае используется регистр AX, а в другом данные записываются уже в AL, то есть возникает закономерный вопрос почему используется именно этот регистр в одном случае, а в другом только младший байт

// Если не нашли тему, значит создавайте свою, незачем задавать вопрос в первой попавшейся.

Последний раз редактировалось B_N; 30.06.2008 в 13:24.
Artek80 вне форума Ответить с цитированием
Старый 30.06.2008, 13:24   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Уточните, о чём именно речь. Ассемблер предоставляет достаточно свободы в использовании регистров. Можно просто "захотеть" написать так, а не иначе без особых причин, или верхняя "половинка" может использоваться позднее, или могут приниматься в расчёт факторы быстродействия - с регистрами размером в слово процессор справляется быстрее.
B_N вне форума Ответить с цитированием
Старый 30.06.2008, 14:50   #3
Artek80
 
Регистрация: 30.06.2008
Сообщений: 5
По умолчанию

извините, я искал тему типа начала программирования или что то в этом духе, но меня выкинуло сюда, по вопросу конкретно, я только начал читать ассемблер, в книге вроде написано что как и когда, но некоторые моменты не раскрываются, а именно примерно разъясните если можно вот такие моменты, AX - регистр через который в основном происходит копирование данных, короче аккумулятор, это я понял, но почему в некоторых примерах указывается AX а в некоторых AL и прсто скажите если допустим я данные, которые в примере помещают в младшую половину я помещю полностью в AX ничего страшного не случится?
Artek80 вне форума Ответить с цитированием
Старый 30.06.2008, 15:12   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

размер AL - 1 байт, AX - 2 байта. если данные размеров 1 байт то используется AL, если 2 байта, то используется AX.
rpy3uH вне форума Ответить с цитированием
Старый 30.06.2008, 21:09   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

полностью согласен с B_N и rpy3uH.
ну и я вставлю свои "пять копеек":
есть двух байтовых регистр (его ещё называют аккумулятор), к его содержимому можно обратиться через имя AX.
А можно обратиться к старшему байту этого же регистра
через имя AH или к младшему байту — через имя AL
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.07.2008, 05:47   #6
Artek80
 
Регистрация: 30.06.2008
Сообщений: 5
По умолчанию

спасибо!!! тогда не могли бы вы разъяснить начинающему вот такой вопрос, а зачем тогда париться, высчитывать сколько байт займут те или иные данные, тогда ведь проще просто работать всегда через регистр ЕАХ допустим и не париться.
Artek80 вне форума Ответить с цитированием
Старый 01.07.2008, 08:59   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

глупый вопрос! если хочешь, то работай с EAX, кто тебе запрещает? почитай немного, напиши несколько программ и вопросы отпадут сами по себе.
rpy3uH вне форума Ответить с цитированием
Старый 01.07.2008, 10:12   #8
Artek80
 
Регистрация: 30.06.2008
Сообщений: 5
По умолчанию

хорошо, я постараюсь последовать Вашему совету, но в некоторых случаях все же хотелось бы проконсультироваться
Artek80 вне форума Ответить с цитированием
Старый 01.07.2008, 10:24   #9
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Artek80 Посмотреть сообщение
.......но в некоторых случаях все же хотелось бы проконсультироваться
А кто же против! Я выше писал, что в ассемблере много свободы в использовании средств машины. 32 бита данных могут быть просто числом, тогда и работать с ними нужно целиком, а могут быть, скажем, структурой, содержащей координаты точки, тогда "гонять" по памяти их выгоднее целым куском, а обрабатывать и пользоваться - только "половинками"...
B_N вне форума Ответить с цитированием
Старый 01.07.2008, 11:12   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
тогда ведь проще просто работать всегда через регистр ЕАХ допустим и не париться.
Некоторые опкоды и функции прерывания работают не с EAX а с его частями. Например DIV может целое от деления записать и в AL в зависимости от входного значения.
Например:
Код:
.data
 a db 4
.code
start:
  mov ax,30
  div byte ptr [a]
  ret
end start
Тут одним EAX результат праильный не получиш

Ну и иногда ради оптимизации еще частями регистров пользуются...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, где ошибка в использовании ControlSource... Tooree Microsoft Office Access 2 18.08.2008 20:46
Виснет приложение при использовании winsock TR1PL3X Работа с сетью в Delphi 1 31.03.2008 09:14