Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 382
от 25.02.2006, 17:48

Администратор:Калашников О.А.
В рассылке:Подписчиков: 265, Экспертов: 27
В номере:Вопросов: 3, Ответов: 6


Вопрос № 35758: Ребят вот моя программка по Калашникову. Запускаем. Почему буквы которые я ввожу с клавы отображаются в одном месте, а мне надо чтоб как как бы в текстовом редакторе. (в DosNav...) Код прилагаю. Обьясните ошибку. Если несложно можно испр...
Вопрос № 35767: Здравствуйте уважаемые эксперты. 1. Скажите пожалуйста, где можно найти информацию о функциях в Ассемблере. Может вы поможете? Пример: ax, 9h ax,21h То есть специальные зарезервированные числа, которые заносят в регистры и получается...
Вопрос № 35769: Здраствуйте уважаемые эксперты. 1. Мне нужно создать резидентныйобработчик прерываний, который будет перехватывать прерывание09h, создавать текстовый файл и записывать в этот файл последний символ из буфера клавиатуры. Программа ас...

Вопрос № 35.758
Ребят вот моя программка по Калашникову.
Запускаем. Почему буквы которые я ввожу с клавы отображаются в одном месте, а мне надо чтоб как как бы в текстовом редакторе.
(в DosNav...) Код прилагаю. Обьясните ошибку.
Если несложно можно исправить с пояснением код моей проги, ну если несложно будет.

Приложение:

Отправлен: 19.02.2006, 23:15
Вопрос задал: Baim (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Baim!
cseg segment
assume cs:cseg,ds:cseg,es:cseg,ss:cseg
org 100h

Begin:
mov di,2*160+2
m1:
mov ah,10h
int 16h
cmp al,0
jz m1
cmp al,1Bh
jz Quit

cic:
call Sym
add di,2
jmp m1
loop cic
Quit:
mov dx,offset Vyhod
mov ah,9h
int 21h
int 20h
Sym proc

push es
push ax
mov ax,0B800h
mov es,ax

pop ax
mov ah,29
mov es:[di],ax
pop es

ret

Sym endp

Vyhod db " You selected ESC!",13,10,"$"
cseg ends
end begin
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 19.02.2006, 23:27
Оценка за ответ: 5

Отвечает: PRiSon
Здравствуйте, Baim!
У Вас ошибка в подпрограмме.
Каждый раз при вызове Sym proc выполняется строка mov di,3900 те начало вывода символов. Плюс лишняя строка в процедуре add di,2(зачем эта строка два раза???)
Исправление в приложении.
cseg segment
assume cs:cseg,ds:cseg,es:cseg,ss:cseg
org 100h
Start:
mov ax,3
int 16
mov di,3900 ;<----------------------
Begin:
mov ah,10h
int 16h
cmp al,0
jz Begin
cmp al,1Bh
jz Quit
mov cx,12
cic:
call Sym
jmp Begin
loop cic
Quit:
mov dx,offset Vyhod
mov ah,9h
int 21h
int 20h
Sym proc
push es
push ax
mov ax,0B800h
mov es,ax
pop ax
mov ah,29
mov es:[di],ax
add di,2
pop es
ret
Sym endp
Vyhod db " You selected ESC!",13,10,"$"
cseg ends
end Start
---------
Стремление - значит получится.
Ответ отправил: PRiSon (статус: 3-ий класс)
Отправлен: 20.02.2006, 07:16
Оценка за ответ: 5


Вопрос № 35.767
Здравствуйте уважаемые эксперты.
1. Скажите пожалуйста, где можно найти информацию о функциях в Ассемблере. Может вы поможете?
Пример: ax, 9h
ax,21h
То есть специальные зарезервированные числа, которые заносят в регистры и получается либо обращение к составным частям компа, либо выполнение определенных реакций (действий) DOS?
2. Плюс мне нужен учебный материал по работе с DOS (учебник) - ((хороший)).
:-)))
Спасибо.
Отправлен: 20.02.2006, 01:08
Вопрос задал: Retcom (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PRiSon
Здравствуйте, Retcom!
Вот Дорогой Друг ссылки которые помогут тебе....
http://www.kalashnikoff.ru/Assembler/prog/
http://www.wasm.ru/publist.php?list=7
Удачи!!!
---------
Стремление - значит получится.
Ответ отправил: PRiSon (статус: 3-ий класс)
Отправлен: 20.02.2006, 09:28
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Boriss
Здравствуйте, Retcom!
Это функции не ассемблера, а операционной системы
Вы можете скачать хороший и компактный справочник по DOS 4.0. Этого вполне достаточно для решения большинства задач
Есть и перевод на русский, но в нем отсутствует описание работы с мышью, в частности. Может и еще чего нет - болше не анализировал
И самое полное описание можно найти на странице Ralf Brown
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Вывод - то место в тексте, где вы устали думать

Ответ отправил: Boriss (статус: Профессор)
Отправлен: 20.02.2006, 13:28
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 35.769
Здраствуйте уважаемые эксперты.
1. Мне нужно создать резидентныйобработчик прерываний, который
будет перехватывать прерывание09h, создавать текстовый файл
и записывать в этот файл последний символ из буфера клавиатуры.
Программа ассемблируется илинкуется, при работе она
перехватывает прерывания и даже сосдает файл. Но файл без
расширения и символы не заносятся.
Текст программы привожу ниже.
2.Чем отличаются int20h, ret, ah,4Ch int 21h ?

Приложение:

Отправлен: 20.02.2006, 02:18
Вопрос задал: Gogenot (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Gogenot!
Во первых, ты портишь флаги, нужно вот так:

    Int_21h_proc proc
    pushf
    cmp ax,8899h
    jne Go_next

    xchg ah,al
    popf
    iret
    Go_next:
    popf
    jmp dword ptr cs:[Int_21h_vect]


В обработчике 9 прерывания не устанавливаешь правильный DS:


    Int_09h_proc proc
    cli
    pushf
    pusha
    push es

    push cs
    pop ds



Здесь тоже глупости у тебя. Вот так нужно:

    push ds ;сохраним ds
    push ax
    mov ax,40h
    mov ds, ax

    mov bx,word ptr 0000h:[01Ah] ;считываем из буфера клавиатуры
    ;адрес последнего символа
    mov dx, [bx]
    pop ax


удачи.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 20.02.2006, 08:34
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое.

Отвечает: PRiSon
Здравствуйте, Gogenot!
Немного добавлю.
Ret - Выход из процедуры. (можно завершить программу командой RET в начале PSP есть int 20h куда после RET и произойдёт скачёк.)
int 20h - выход из дос программы.
mov ax,4c00h - выход из exe программы.
---------
Стремление - значит получится.
Ответ отправил: PRiSon (статус: 3-ий класс)
Отправлен: 20.02.2006, 09:24
Оценка за ответ: 5
Комментарий оценки:
Именно это мне и нужно было узнать. Спасибо.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.14 (бета) от 09.02.2006
Яндекс Rambler's Top100

В избранное