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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Жаль, что никто не откликнулся на мой зов, но он был скорее от усталости..
 
Вот что у меня получилось, после некоторых преобразований..  
Теперь прога всё считает, но с числами до 32767, и всё потому что у меня сумма исходных чисел всего лишь слово (SumTot dw 0,'$'). Переделывать всё под пару DX:AX и SumTot=DWORD не очень хочется, поэтому необходимо написать проверку на переполнение, и в случае переполнения выводить ошибку "Buffer overflow!".. А ещё деление у меня целочисленное, и дробная часть отбрасывается, даже если результат 2,8 - выводится только 2-ка..
 
Если вы мне подскажите как лучше написать проверку, и трудно ли изменить деление, буду вам премного благодарен!
Заранее благодарю!
 
 
ТУТ КОД

----------
Знания находятся в головах других людей, а мудрость в собственной...

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 18:20 02-06-2007
Abs62



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

Цитата:
Если вы мне подскажите как лучше написать проверку

А чем JO (или JC) не нравятся?

Цитата:
 трудно ли изменить деление

Ну, навскидку - умножить остаток на 10 и снова разделить на делитель - получится первая цифра после запятой. Ещё раз это проделать - вторая. Ещё - третья, и так далее, до достижения требуемой точности или пока остаток не окажется нулевым.

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:21 02-06-2007
moon6

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

Цитата:
Для адресации (16-битной) могут использоваться только BX, SI и DI. Ещё BP, но он по дефолту юзает SS, а не DS. Ни AL, ни DL для этого не пригодны. Вот ассемблер и ругается. Как же этого не знать - это ж основы...

Забыл или на лекции пропустил это..
 
Пасиб
 
 
Так.. Ошибки вроде исправил, но теперь другая проблема.
Прога омпилится, запускается, но при вводе числа вылетает окошко с ошибкой:

Код:
<имя ехе'шника>
Процессор NTVDM обнаружил недопустимую инструкцию.
CS:0000 IP:0077 OP:f0 37 05 10 02 Для завершения работы приложения нажмите кнопку "Закрыть".

Дальше прога отказывается работать.
В чём проблема?
Исходник проги, если нада. Но, в принципе, прога откомпилировалась нормально.

Всего записей: 6 | Зарегистр. 29-05-2007 | Отправлено: 11:47 03-06-2007 | Исправлено: moon6, 12:22 03-06-2007
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Спасибо за советы..
 
Кое-что подправил ещё..
Получилось пока не всё..
1) Деление отрицательного числа приводит к не правильному результату.. (!)
2) Деление всё ещё целочисленное.. (остаток теряется) [пока не правил]
 
Самое важное по пункту (1), никак не найду ошибку..
 
код программы

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 13:43 03-06-2007 | Исправлено: SPY, 13:45 03-06-2007
Abs62



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

Цитата:
1) Деление отрицательного числа приводит к не правильному результату.. (!)

Для знакового деления используется idiv. div - это деление беззнаковое.

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 14:14 03-06-2007
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Если бы я не пробовал ))
пока не вышло..

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 17:24 03-06-2007
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SPY
Вот пример с делением отрицательного числа и формированием дробной части результата. (Ввод данных не реализовывал - лениво ).

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:56 03-06-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
moon6
Исходники не полные. Кроме того, я не имею ни желания, ни времени в них разбираться - убогое форматирования и отсутствие комментов делает из текста винегрет. Из того, что бросилось в глаза: не указаны аттрибутов сегментов (кроме стекового); не вводятся M и N; start не объявлена процедурой. И вообще - для отлова глюков существуют отладчики, а форумы - немного для других целей.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 17:24 04-06-2007
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Спасибо за пример..  
Хоть он мне и не помог, но за содействие спасибо..  
Все вчера дописал... Все теперь работает отлично.
Если кому интересно, выложу код..  
Даже графику уже начал писать..

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 09:21 05-06-2007
moon6

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

Цитата:
Исходники не полные. Кроме того, я не имею ни желания, ни времени в них разбираться - убогое форматирования и отсутствие комментов делает из текста винегрет. Из того, что бросилось в глаза: не указаны аттрибутов сегментов (кроме стекового); не вводятся M и N; start не объявлена процедурой. И вообще - для отлова глюков существуют отладчики, а форумы - немного для других целей

На другом компе всё заработало

Всего записей: 6 | Зарегистр. 29-05-2007 | Отправлено: 17:10 05-06-2007 | Исправлено: moon6, 12:55 06-06-2007
Konstantin555

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Большая просьба помочь с написанием "обработчика" массива.  
Обработчик массива должен при нахождении элемента со значением "0" увеличивать счётчик на "1"
 
Шапка к коду здесь: Подробнее...
Где вместо многоточия должен быть код (возможно цикл)
 
Пробывал так: Подробнее...
Но результат не верен....

Всего записей: 5 | Зарегистр. 08-03-2007 | Отправлено: 22:35 05-06-2007 | Исправлено: Konstantin555, 22:36 05-06-2007
grek99



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ кто нибудь сможет помочь?
Ассемблер вообще в первый раз вижу а надо 2 программки написать:
 
3,27 по теме "Использование прерываний в BIOS"
Написать программу для ввода даты по запросу "введите дату (дд/мм/гг), введенную дату вывести в правом нижнем углу.
 
3,34 Организовать в ввод с клавиатуры пароля (с помощью 0-ой функции 16h прерывания). На экране отображать вместо вводимых символов знак '*'. По нажатию клавиши Enter программа выводит на экран введенный пароль и выходит.

Всего записей: 97 | Зарегистр. 17-11-2005 | Отправлено: 23:49 05-06-2007
moon6

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Опять подобная ошибка.. CS:0126 IP:0667. Сократил код до минимума для выяснения куска кода, где может быть ошибка.

Код:
stak segment para stack 'stak'
    dw 64 dup (?)
stak ends
 
data segment para public 'data'
    matr db 100 dup(?)
    str3 db 100 dup(?)
    n db ?
    m db ?
    nm db ?
    i db ?
    k db ?
    diag db ?
    l db ?
data ends
    public preobr
code segment para public 'code'
assume cs:code,ss:stak,ds:data
    preobr proc far
 
    push bp
    mov bp,sp
    push bx
    push cx
    push dx
    push di
    push si
 
    mov ax,data
    mov ds,ax
    push ds
    xor ax,ax
    add bp,6
 
 
    pop ds
    pop si
    pop di
    pop dx
    pop cx
    pop bx
    pop bp
    ret
 
preobr endp
code ends
end

Вот где здесь может быть ошибка??
 
ПСы: процедура preobr вызывается из основной проги, написанной на Паскале.
ПСыы: Первое, что пришло в голову - "засорение" стэка. Пытался убрать все пушы с попами и поставить после ret число, соответствующее месту, занимаемому переданными через стэк параметрами - не помогает

Всего записей: 6 | Зарегистр. 29-05-2007 | Отправлено: 11:45 07-06-2007 | Исправлено: moon6, 11:52 07-06-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ты хоть сам посмотрел, что написал:
Цитата:

Код:
preobr proc far  
 
    push bp  
    mov bp,sp  
    push bx  
    push cx  
    push dx  
    push di  
    push si  
 
    mov ax,data  
    mov ds,ax        ; модификация DS
    push ds          ; сохранение DS после модификации??
    xor ax,ax  
    add bp,6         ; это зачем?
 
 
    pop ds  
    pop si  
    pop di  
    pop dx  
    pop cx  
    pop bx  
    pop bp  
    ret  
 
preobr endp
Вместо прибавления к BP лучше пользоваться базовой индексацией: нижний параметр - MOV AX, [BP+6]; следующий - MOV AX, [BP+8] итд. Если ты будешь менять BP, то в оверлейной программе у тебя упадёт менеждер оверлеев. Сильно упадёт. Потому что при подгрузке и выгрузке оверлейных модулей он трассирует стек на предмет процедур и функций, которые в данный момент им выгружены, и он рассчитывает по адресу [BP] найти предыдущий стековый фрейм, CS:IP которого ему и нужны. Стек трассируется по самого дна. Не надо привыкать создавать ему проблемы.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 15:29 07-06-2007 | Исправлено: Qraizer, 15:33 07-06-2007
moon6

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

Цитата:
Вместо прибавления к BP лучше пользоваться базовой индексацией: нижний параметр - MOV AX, [BP+6]; следующий - MOV AX, [BP+8] итд. Если ты будешь менять BP, то в оверлейной программе у тебя упадёт менеждер оверлеев. Сильно упадёт. Потому что при подгрузке и выгрузке оверлейных модулей он трассирует стек на предмет процедур и функций, которые в данный момент им выгружены, и он рассчитывает по адресу [BP] найти предыдущий стековый фрейм, CS:IP которого ему и нужны. Стек трассируется по самого дна. Не надо привыкать создавать ему проблемы.

К BP прибавляется 6, чтобы брать данные сразу, без смещения. Нам так на лекции объяснили. Толку от этого немного, но и вреда не должно быть, все в группе делают так, и ничего, всё работает. Да и в предыдущих прогах делал также, всё работало.
ПСы: Этот самый фрейм он разве не по адресу [SP] ищет??

Всего записей: 6 | Зарегистр. 29-05-2007 | Отправлено: 17:31 07-06-2007 | Исправлено: moon6, 17:39 07-06-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Опять двадцать пять... Ну почему я должен что-то говорить неоднократно, чтоб меня услышали...
Цитата:
Нам так на лекции объяснили. Толку от этого немного, но и вреда не должно быть, все в группе делают так, и ничего, всё работает. Да и в предыдущих прогах делал также, всё работало.
Ну и что? По-твоему преподаватели не ошибаются? Задай ему вопрос, почему никто в мире этого не делает, а он он учит, что надо именно так. И будет ли это работать в оверлейной программе и почему. Поверь, оверлейному менеждеру это не понравится, и он не замедлит тебе об этом сообщить падением программы. Не веришь - так проверь. Впрочем, я допускаю, что ситуация ...несколько частная. Но
Цитата:
...Не надо привыкать создавать ему проблемы.
Плохая привычка писать так, что в некоторых ситуациях код не будет работоспособен. Никогда нельзя знать заранее, пригодится ли когда-нибудь этот код тебе или кому-то ещё.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 14:59 08-06-2007 | Исправлено: Qraizer, 15:05 08-06-2007
yellowair



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
поможите люди добрые,
Дорогие жители форума очень нужна помощь в написание данных программ на TASM, плям очень нужна проги практически идентичны, но есть 1 но некогда особо разбираться в языке,
1.Составить резидентную программу генерации звука различной частоты при нажатии нескольких буквенных клавиш компьютера
2.Составить резидентную программу генерации звуков различной частоты при нажатии одной из функциональных и цифровых клавиш компьютера,
и на посошок
3.Составить программу озвучивания нескольких символьных клавиш с ис-пользованием постобработчика прерываний
заранее спасибо.
ОЧЕНЬ НУЖНА ПОМОЩЬ

Всего записей: 14 | Зарегистр. 10-02-2006 | Отправлено: 17:35 12-06-2007
Abs62



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

Цитата:
но некогда особо разбираться в языке,

Тады ой. Попробуй поспрошать в форуме, где за решения платят. А здесь помогают тем, кто сам хочет учиться.

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:49 12-06-2007
yellowair



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

Цитата:
....где за решения платят. ...помогают тем, кто сам хочет учиться.
 

как бы тебе по ласковей сказать, ru-board всегда был форумом не жмотов а хороших людей, а если тебе что то давит, тогда и не отвечай. я тебе в следующий раз скажу сходи в магазинчик да прикупи софта.
По существу время поджимает, ясно дело надо сдать срочно. Естественно не ради на живы, а для себя любимого, и как полагается, все равно в том что вы мне предоставите все равно нужно будет разобраться на достойном уровне.
P/S/
"барыгам" лучше у себя на сайтах сидеть, и не ходить в приличные места.  

Всего записей: 14 | Зарегистр. 10-02-2006 | Отправлено: 09:57 13-06-2007
Abs62



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

Цитата:
Естественно не ради на живы, а для себя любимого, и как полагается, все равно

Слово "нажива" пишется вместе.  Но это мелочи. Я никогда не стану помогать тому, кто пытается сдать зачёт, ни хрена понимая в сути процесса. Вот из этого и исходи. Помочь разобраться  - поможем, а на заявления типа "Нука - быстро смантулите мне программу" получишь ответ горного эха - "Мать, мать, мать...!"

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 11:17 13-06-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 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