![]() |
|
|Ѳорум| |
Комментарии к статье «Программирование на Ассемблере под DOS» |
|
Wetlan /2003-01-28 11:15:20/
Простенько и понятненько. Здорово, жаль, что в Мин. образования не понимают таких простых вещей!
/2003-03-14 11:10:25/
Замечательный труд!
Единственно пришлось подзенствовать над org 100 в тексте проги :))
/2003-07-29 16:13:17/
блин :(
E:\oleg\Studing\ASM\tutorials\sergio>tasm proga_1.asm Turbo Assembler Version 4.0 Copyright (c) 1988, 1993 Borland International Assembling file: proga_1.asm Error messages: None Warning messages: None Passes: 1 Remaining memory: 454k E:\oleg\Studing\ASM\tutorials\sergio>tlink /t PROGA_1.OBJ Turbo Link Version 4.01 Copyright (c) 1991 Borland International Fatal: Cannot generate COM file : invalid initial entry point address
/2003-07-29 16:24:15/
опечатка оказывается
в первом листинге написано "org 100" а нужно "org 100h" а вообще спасибо... редкое сочетание приятного и полезного :)
/2003-07-30 14:53:19/
А где достать прогу TLINK?
Кругом искал не нашел, ни у вас, ни в сети. Без нее, как я понял, как-то не получится ничего сделать.
/2004-08-31 00:55:53/
to Gor
хотя volodya всячески пытается отговарить нас "Если новичок - лучше берите MASM32 или FASM" от использования кривого и кoсого и ... ...но мы все же, как упоминает FatMoon "Русские сначала придумывают себе препятствия, а потом их преодолевают. (известный факт)". Поэтому качай http://www.wasm.ru/tools/7/tasm5plus.zip и становися ивалидо... тфу, ветераном
/2004-08-31 05:21:01/
Ну что ж :) Именно для таких инвалидо..., тьфу, ветеранов :), у нас TASM и положен :)
/2007-01-12 22:23:30/
Ведь в статье описано использование комплилятора TASM 4.1. Пробовал компилить и под FASM и под MASM - не работает. Только под TASM 4.1 и пошло. Поэтому многие пытаются использовать TASM...
FASM 1.67 - ошибка ================== flat assembler version 1.67.18 (1082926 kilobytes memory) asm/proga1.asm [2]: CODESG segment error: illegal instruction. MASM 8.2 - ошибка ================= Assembling: D:\alive\fasm\asm\proga1.asm D:\alive\fasm\asm\proga1.asm(36) : warning A4023: with /coff switch, leading underscore required for start address : MAIN TASM 4.1 - нормально ==================== Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International Assembling file: proga1.asm Error messages: None Warning messages: None Passes: 1 Remaining memory: 453k Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International
/2007-01-12 22:31:53/
Чуть не забыл сказать - огромное спасибо за эти вводные статьи. Написано понятно, без лишних деталей и с юмором. Побольше бы таких людей.
Если кто ищет TASM 4.1 (я не сразу его нашел) - пишите на cooper[AT]asu[DOT]ntu-kpi[DOT]kiev[DOT]ua.
/2007-04-19 17:53:10/
Всем привет. У меня вопрос автору статьи или тому, кто сможет мне помочь в моём вопросе. Но для начала хочу выразить огромное восхищение тем, как доступно она написана (особенно момент с описанием работы команды SHR=)). Так же, тем кто искал, вот Tasm 4.1: http://infostore.org/info/3077616 - выложен на моём акке инфостора. Итак, народ.
Касательно процедуры WRITE_HEX. Со всем разобрался, всё протестил, но есть один момент. После смещения байтов (для вывода старшего разряда DL) мы сразу вызываем процедуру WRITE_HEX_DIGIT. НО. Исходя из того, как она (WRITE_HEX_DIGIT) написана, требуется, чтобы старший разряд был равен нулю. А мы в данном случае старший разряд НЕ обнуляем (посредством AND) перед вызовом. С другой стороны, я тестил с разными значениями DL, и всё работает. Обьясните пожалуйста что к чему, я начинающий дZен, но мне очень хочется со всем детально разобрацца =). Вот мой пример, после которого у меня возник этот вопрос. Пусть DL = 21h = 0010 0001b. После сдвига DL = 0001 0010b. И тут мы СРАЗУ (не обнуляя 0001 "AND DL,0Fh") вызываем процедуру WRITE_HEX_DIGIT. И тем не менее всё работает, в итоге выводит 21. Почему, чёрт возьми, если WRITE_HEX_DIGIT работает только если старший разряд не равен 0000b? =))
/2007-06-27 00:46:05/
Уж не знаю сколько времени прошло после вопроса, но вдруг комуто пригодится. Так вот, весь дZен со смещением заключается вот в этих строчках:
1: mov cl,4 2: shr dl,cl 3: call WRITE_HEX_DIGIT Дело в том, что смещение происходит не 1 раз, а 4! Т.е. в 1-ой строчке мы присваиваем значение 4 cl`у, а затем указываем "shr dl,cl" т.е. сместить число в dl, cl-раз вправо, а в cl у нас - 4. Вот и получается, допустим было: 10110011 потом 4 раза вправо, и стало: 00001011
/2007-09-28 13:22:59/
Не понимаю один момент, мне кажется, или это неточность?
Написано ко второй программе "BL - атрибут (для режимов AL=0, AL=1);" для функции INT 10h. между тем мы используем режим AL = 3 в программе, т.е. к каждому символу строки мы отдельно пишем атрибут, так зачем же заносить что-то в BL, если оно не используется? я убрал строку mov BL,07h из программы, и ничего не изменилось, не было даже предупреждения от компилятора.. это же лишние 2 байта, как-никак :) а, и еще, почему в начале второй программы assume и объявление сегмента стоят не в той последовательности, как в первой программе? это никакой роли не играет? и почему мы на одно имя повесили сразу 2 сегмента? и дополнительный, и сегмент кода.. с ув, AdoNNeN
/2007-11-19 23:11:28/
статья действительно превосходная...
только пришло сильно дзенствовать линкуя масмом а не тасмом.. тасм меня игнорировал)))) наилучшие пожелания автору статьи...
/2007-11-19 23:24:19/
но потом тасм полюбил меня и все пошло как по маслу))))
/2008-04-18 10:44:17/
ЦИТАТА
Для тех, кто не понял - наша строчка "Hello, World-2$" как раз и является "последовательностью/строкой/цепочкой" из элементов размером в байт. КОНЕЦ ЦИТАТЫ Да, все правильно. Но. Наша строчка "Hello, World-2$" прежде всего является последовательностью символов. Каждому из символов соответствует свое значение по табличке ASCII. Значения пишутся шестнадцатеричными данными в дамп. Под возможные вариации этот значения выделен один байт памяти. И когда мы командуем Lea Bp, ABC ABC "Hello, World-2$" , то в дамп попадают как раз наши значения, а начальный адрес сохраняется в регистре Bp. P.S. Как раз для тех, кто не понял. :)) P.S Так и не просветлился до конца по поводу деления HEX чисел на A и остатков в виде десятичных чисел
/2008-04-18 10:48:44/
ЦИТАТА
Для тех, кто не понял - наша строчка "Hello, World-2$" как раз и является "последовательностью/строкой/цепочкой" из элементов размером в байт. КОНЕЦ ЦИТАТЫ Да, все правильно. Но. Наша строчка "Hello, World-2$" прежде всего является последовательностью символов. Каждому из символов соответствует свое значение по табличке ASCII. Значения пишутся шестнадцатеричными данными в дамп. Под возможные вариации этот значения выделен один байт памяти. И когда мы командуем Lea Bp, ABC ABC "Hello, World-2$" , то в дамп попадают как раз наши значения, а начальный адрес сохраняется в регистре Bp. P.S. Как раз для тех, кто не понял. :)) P.S Так и не просветлился до конца по поводу деления HEX чисел на A и остатков в виде десятичных чисел
/2008-06-06 18:42:13/
Доброго дня.<br />
В пункте 2 obj файл линкуется только в tasm v4 или в v5 тоже можно линковать в com файл?<br />
В 5-ой пробовал, выдается ошибка, что 16 битные сегменты не поддерживаются в файле ....\\testprog.asm
/2008-08-23 02:05:21/
Serrgio у меня есть все начала его замечательного стиля обчения.
Лет 6 назад ( а может и больше) на сайте hi-tech прочел его \"бредисловие\" для dZebaga -все последуюшие опусв скачал и храню.И даже частенько заглядываю. Зелененькие буковки на черном фоне -для более внедрительной медитации. Я уважаю чувака seRRgio- и выражаю ему спасибо от себя и своих нескольких знакомых идиотов.
/2008-10-14 19:36:45/
Почему mov DL,A7h - undefined symbol ?
/2008-10-22 08:43:59/
mov DL,0A7h
это тоже байт, но если без нуля в начале то копмилятор рассматривает это как переменную A7
/2008-12-01 02:32:58/
Подскажите новичку, как бороться с этой заразой:
Fatal: Cannot generate COM file : invalid initial entry point address
/2009-03-22 14:29:13/
третий и четвертый комменты читай
/2009-03-22 14:33:16/
никак не могу понять почему во Write_hex_digit DH должен быть равен 0? добавил в программе перед вызовом функции MOV DH,0Ah всеравно работает. В чем смысл?
/2009-03-22 14:58:09/
Ещё, вроде, в процедуре WRITE_HEX_WORD можно убрать в начале push dx и
pop dx, т.к. он сохраняется в процедуре WRITE_HEX. Я прав?
/2009-04-03 14:24:32/
ДРСТЕ .... аффигенно агромное спасибо за переживанный материал по асму, очень легко воспринимается. Но вот столкнулся с проблеммой прям в первом примере: компилятор не хочет пережововать код а именно пишет Unexpected end of file encountered. С похожей проблеммой умею боротся только в c/c++, а тут без понятия как это сделать. Подскажите пожалуйста.
версия компилятора TASM 4.1
/2009-04-03 17:35:19/
Отбой. Код набирал в UltraEdit, у него стоит по умолчанию сохранят файл в кодировке UTF-16. После того как я поменял кодировку сохранения на ASCII всё пошло. :)
/2009-11-03 16:24:24/
Спасибо Автору за превосходно поданый материал.
/2009-12-08 02:31:42/
Ну аффтар,ну красавчеггг !!! Я с помощью книг в домашних условиях долго оч.пытался понять че почем а zDzесь сходу можно сказать понял все ..... ПО-БАЙТИКАМ :) Thank\'s Serrgio и всем кто трудился над WASM\'om !!! Продолжайте в том же духе ,УУУДАААЧИИИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
P.S. Бля чуть не забыл ! Шутка козырная мне понравилась ::::::::::::::::::::: Для тех, кто в танке: последующие процедуры вставляйте между процедурами TESTING и EXIT_COM - не ошибетесь :-p
Введите логин и пароль, под которыми вы зарегистрированы на θоруме WASM.RU. |