Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun
Короче. mov cx, 0 транслируется в 3 байта, xor cx, cx - в два. Хотя вряд ли это сейчас имеет какое-то значение. Не те времена, когда дискеты были большими, а программы маленькими.
 
Benchmark
Да не, уже на i80386 и та, и другая команда - 2 такта. Тут надо i8086 вспоминать.
 
Добавлено:
bomzzz

Цитата:
к тому же ноль еще из памяти считывается.

Как и весь прочий код. 0 здесь является частью команды, а не считывается ещё откуда-нибудь.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 00:26 16-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
эти такты в теории. зависит еще от кучи причин - от использования кеша, который кстати моно в ручную оптимиировать, от доступа в память, от конвейра, от выравнивания к 16 битной границы. чтоб оптимизировать код его надо измерять в ручную
 
Добавлено:
его все равно надо считать вместе с кодом. даже если он в кеше первого уровня сидит это не тоже самое что в регистре

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:31 16-01-2012 | Исправлено: bomzzz, 00:31 16-01-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xor используется из-за производительности+экономии размера.
В операции mov eax, 0 в любом случае идет чтение из памяти операнда 0(+такая операция занимает в памяти 5 байт), xor eax, eax занимает 2 байта, а так же не читает из памяти операндов, что повышает производительность.
p.s. mov cx, 0 занимает 4 байта, а xor cx, cx 3 байта(обе из-за доп. кода 0x66)
 
Добавлено:

Цитата:
Как и весь прочий код. 0 здесь является частью команды, а не считывается ещё откуда-нибудь.

Является, но все же считывается.

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 21:01 16-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну как не считывается. телепатией передается, чтоб различать mov eax, 0 и mov eax, 1? сичтывается сначала в кеш кода потом процессором оттуда в конвейер

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 22:44 16-01-2012
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cp58

Цитата:
В операции mov eax, 0 в любом случае идет чтение из памяти операнда 0(+такая операция занимает в памяти 5 байт), xor eax, eax занимает 2 байта, а так же не читает из памяти операндов, что повышает производительность.

Отнюдь. Никаких пяти байт в памяти не занимается. Считывается из памяти трёхбайтовая команда, в ней два байта из трёх занимает этот самый 0. В случае же xor cx, cx из той же памяти считывается двухбайтовая команда. И никаких отдельных чтений из какой-то другой памяти.


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 23:45 16-01-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62

Цитата:
Отнюдь. Никаких пяти байт в памяти не занимается. Считывается из памяти трёхбайтовая команда, в ней два байта из трёх занимает этот самый 0. В случае же xor cx, cx из той же памяти считывается двухбайтовая команда. И никаких отдельных чтений из какой-то другой памяти.

При использовании 32 битных регистров, все же 5, т.к. компилятору важно заполнить весь регистр нулями. а значит ни о каких меньшних значениях, чем 32 бита не может и идти и речи.
Если мы говорим о 16 битных регистрах в режиме защищенном, то 4 байта(доп. код 0x66), а не 3.
 
А теперь о смысле слов "считывается из памяти", да mov eax, 0 относится к типу операций чтения immediate данных(то есть констант), но в памяти все же хранится число(константа), поэтому по факту все же чтение идет.

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 00:15 17-01-2012
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cp58

Цитата:
При использовании 32 битных регистров, все же 5, т.к. компилятору важно заполнить весь регистр нулями. а значит ни о каких меньшних значениях, чем 32 бита не может и идти и речи.

Команда mov cx,0 (с которой и начался флуд) явно указывает на использование 16-разрядного регистра. И я говорю, естественно, о реальном режиме, так как никаких оговорок о защишённом изначально не было.

Цитата:
А теперь о смысле слов "считывается из памяти", да mov eax, 0 относится к типу операций чтения immediate данных(то есть констант), но в памяти все же хранится число(константа), поэтому по факту все же чтение идет.

Конечно. Чтение команды, но не чтение каких-то дополнительных данных. Как и чтение любой другой команды, есть в ней константы или нет.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 00:28 17-01-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62

Цитата:
И я говорю, естественно, о реальном режиме, так как никаких оговорок о защишённом изначально не было.

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

Цитата:
Конечно. Чтение команды, но не чтение каких-то дополнительных данных. Как и чтение любой другой команды, есть в ней константы или нет.

Я не говорил о дополнительном запросе к чтению из памяти, я говорил о факте пересылке константы из памяти в регистр, даже при том, что операция выполняется тогда, когда читается команда.
 
Добавлено:

Цитата:
(с которой и начался флуд)

Можете написать в личку, я донесу мысль более подробно.

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 00:47 17-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как разница какой режим процессора?

Цитата:
 
.386p
CSEG segment use16
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
    org    100h
start:
 

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:50 17-01-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
как разница какой режим процессора?  

Такая. что в 16-битном режиме опкод команды mov ebx, eax будет 0x6689c3, а в 32-битном 0x89c3; и с точностью, да наоборот, в 32-битном mov bx, ax опкод станет 0x6689c3, а в 16-битном 0x89c3. Код генерируется под конкретно заданную платформу, поэтому это никого не заботит.
 
Добавлено:
Да и указал я это для различий в размере (3 и 4 байта соответственно).

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 01:11 17-01-2012 | Исправлено: cp58, 01:13 17-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
но это не имеет отношения к реальный\защищенный

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 02:52 17-01-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz

Цитата:
но это не имеет отношения к реальный\защищенный

Перейду на иронию, так как в разделе "Assembler" такое говорить по иному никак.
 
Открываю америку: Real Mode 16-битный, для доступа к регистрам eax, ebx... добавляется префикс 0x66 к любой инструкции доступа к этим регистрам, да есть и 16-битный Protected Mode, но как часто вы его используете?

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 03:42 17-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я постоянно. и 32 битные регистры в реальном и 16 приложения в защищенном.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 03:59 17-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
под виндой чета не получается смешанный код использовать, чета не соображу - тут и сегментов то нет. 16 битные в V-Mode вообще то должны. но это не значит что в защищенном режиме нельзя смешанный код использовать вообще
 
Добавлено:
вернее получается но только в V-Mode.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 06:34 17-01-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Посоветуйте в чем писать на ассемблере под MS-DOS? Нужен и редактор, и компилятор...

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 19:37 26-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tasm
turbo debugger -- отладчик
редактора отдельного нет, бери любой, но лучше ТС...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 19:53 26-01-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
TC можно подружить с TASM? BC значит тоже?
 
TASM: http://old-dos.ru/files/file_683.html он?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 20:02 26-01-2012 | Исправлено: A1exSun, 20:05 26-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в каком смысле?
в ВС встроенный асм по имени BASM и в поставке tasm.exe есть...
 
-----
он

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:06 26-01-2012 | Исправлено: akaGM, 20:08 26-01-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
редактора отдельного нет, бери любой, но лучше ТС...

Я об этом. Как их подружить? Чтоб с TASM через командную строку не работать...

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 20:12 26-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
досовский multiedit настраивать...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:16 26-01-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru