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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SPY
Вот пример с делением отрицательного числа и формированием дробной части результата. (Ввод данных не реализовывал - лениво ).

Всего записей: 6077 | Зарегистр. 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

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

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

Всего записей: 6077 | Зарегистр. 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

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

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

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
короче, склиф. не хочешь не помогай, пол проги я уже написал, покрайне мере пищать она уже пищит, остался вопрос резидентности. Как видишь без твоей великой помощи. Слова
Цитата:
Нука - быстро

будешь говорить своей подружке, и то я сомневаюсь что она для тебя что то сделает. Ругаться с тобой не хочется не к чему это. Пословиться есть такая не рой яму другому, сам в нее попадешь. Высказал свое мнение спасиб тебе. Не хочешь не надо ни кто тебя не заставляет.  

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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
yellowair
вместо чтоб ругаться лучше задавай вопросы, что непонятно
Abs62 сказал что писать за тебя всю прогу никто не будет, разве что аццкий альтруист найдётся (типа как я в начале темы напрягался)
а раз ты сам пишешь - то респект, спрашивай, будем отвечать
 
по поводу резидентности - всё относительно просто
существует инт 31ш, у него во входе в АЛ - код выхода, в ДХ - объём памяти в параграфах (16 байт), сколько остаётся резидентной после ПСП
т.е. прога твоя подменяет вектора, после чего оставляет свой код резидентным. такова теория

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 01:36 14-06-2007
yellowair



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rain87
спасиб, за ответ, прогу написал.... посмотри если не трудно что тут еще и как можно улучшить

Код:
 
;air
cseg    segment    para      
        assume cs:cseg  
        org 100h  
start:  jmp initialize  
  old9_hndlr    label dword     ; Старый int 9h handler  
  old9_off      dw      ?  
  old9_seg      dw      ?  
  ax_           dw      ?  
  scancode      db      ?  
  ;------------------------------------------------------------------------
  ; Новый обработчик
  ;------------------------------------------------------------------------
  new9_hndlr    proc  
    mov ax_,ax                  ; Сохраняем ax регистр.  
    xor ax,ax                   ; Обнуляем ax регистр.  
    in al,60h                   ; Получаем скэнкод.  
    mov scancode,al             ; Сохраняем скэнкод.  
    mov ax,ax_  
    pushf                       ; Сохраняем флаги.  
    call  old9_hndlr            ; Вызываем старое прерывание.  
    xor ax,ax  
 
continue:  
 
    mov al,scancode              
    cmp al,58h  
    ja nosound                  ; Гасит звук при отпускании кнопки.  
 
         cmp al, 53             ; диапазон верх  
         ja exit_9              ; Если >
         cmp al, 15             ; диапазон низ
         jb exit_9              ; Если <
         mov bh,15
         jmp sound
 
sound:   mov     al, 0B6h       ; Инициализация 2го канала  
         out     43h, al        ; микросхемы таймера    
         mov     bl, scancode   ; Подготовка частоты
         sub     bl, bh
         mov     ax, 200
         mul     bl
         add     ax, 348
         out     42h, al        ; Младший байт в таймер  
         mov     al, ah  
         out     42h, al        ; Старший байт в таймер  
         in      al, 61h        ; Читаем данные из 61h порта  
         or      al, 3          ; Установка первых двух битов в 1  
         out     61h, al        ; Включить динамик!  
         jmp exit_9  
 
nosound:                        ; Выключить динамик.  
      in al,61h  
      and al,252  
      out 61h,al  
 
exit_9:  
    mov ax,ax_                  ; восстановление ax.  
    iret  
new9_hndlr    endp  
 
last_byte   db   "$"            ; метка конца резидентного кода  
 
;*******************************************************************
 
  initialize    proc    near  
  assume        ds:cseg         ;переменные в этом сегменте  
 
    mov ax,cs  
    mov ds,ax  
 
    mov ax,3509h                ;получаем вектор 9го прерывания  
    int  21h  
    mov  old9_off,bx            ; сохраняем старое смещение  
    mov  old9_seg,es            ; сохраняем старый сегмент  
 
    mov  ax,2509h  
    mov  dx,offset new9_hndlr  
    int  21h  
 
  ;Вычисляем необходимую память  
 
    mov  dx,(offset last_byte - offset cseg + 15)  
    mov  cl,4  
    shr  dx,cl                  ;конвертируем в параграфы  
    mov  ax,3100h               ;TSR  
    int  21h  
  initialize    endp  
 
  cseg          ends  
    end         start           ;конец!  


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

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

Код:
 
     org 100h  
 
...
mov  ax,3100h               ;TSR  
    int  21h  
 

 
ребят, что-то я не понимаю...
 
почему сейчас так моден сом-формат? тогда уж int 27 будет правильным tsr?
не зря же я его в шапку поставил гы

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 16:52 15-06-2007 | Исправлено: akaGM, 16:56 15-06-2007
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM
а какая принципиальная разница? 27 тоже проканает, но и 31 сработает
поскольку 31 более продвинутое наверное лучше юзать его
а ком формат удобен тем, что всё в одном сегменте хранится. не надо морочить моск с несколькими резидентными сегментами
yellowair
выглядит вполне красиво. не разбирался особо, как ты делаешь звук и меняешь вектора (я привык менять прямо через память, а не интами, а звук наоборот делать выводом символа 7 на консоль, а не через порты ) - вполне верю, что правильно
если всё это работает - вери гуд

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 21:40 15-06-2007
akaGM

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

Цитата:
а какая принципиальная разница?  

для дос ~2.2-6.22 была, но не помню уже, но была, но не помню...
помню только, что оч строго...
 

Цитата:
а ком формат удобен тем...

это я ещё помню... все резиденты только в 64к и клал...
а вот _сейчас_? тем же самым удобством и удобен?
кстати, int20 совершенно точно строго для выгрузки кома и ни-ни для MZ...
 
просто пишут ком, а линковать в него забывают
смотришь -- экзюк, открываешь -- ком
ощущение непорядка для перфекциониста...
 
ладно, чёрт с ним...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 22:58 15-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