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

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


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

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

Выпуск № 464
от 03.06.2006, 05:35

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


Вопрос № 44451: Еще один вопрос... Что неверно в этой программе (открытие текстового документа), возможно я что то не так понял, помогите плз.....
Вопрос № 44493: В третий раз за сегодня.... Вопрос на тему "односимвольного" калькулятора :). Вобщем со сложением и вычитанием проблем нет. В ниже указаном примере(вычитание), работает... Но когда перешел к умножению и делению "такого вида" в...

Вопрос № 44.451
Еще один вопрос... Что неверно в этой программе (открытие текстового документа), возможно я что то не так понял, помогите плз..

Приложение:

Отправлен: 28.05.2006, 05:30
Вопрос задал: Бородин Евгений Викторович / kain (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Пан Павел Константинович
Здравствуйте, Бородин Евгений Викторович / kain!

Если вы решаете такую задачу то я вам рекомендую делать это через модель памяти TINY т.е. формат файла *.COM, где все сегментные Регистры равны между собой, это уменьшит код программы и упростит сопровождение.

Далее идёт код который демонстрирует только Открытие и Закрытие файла.

CSEG segment
assume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEG
org 100h
Begin:
;====================
;Open file
;OUT: ax = handle
mov ax,3D00h
lea dx,filename
int 21h
;====================
xchg ax,bx ;bx = handle
;====================
;Close file
mov ah,3Eh
int 21h
;====================
ret ;exit
;====================
filename db '1.txt',0
CSEG ends
end Begin

У вас в коде есть отрывок:

mov [numb],ax ;Здесь вы сохраняете Handle

mov ah,3Fh ;Номер функции Чтения из Файла
mov cx,0FF00h ;Колличество считываемых байт
mov dx,offset Buffer ;Адрес буфера куда будут читаться данные
int 21h

Этот отрывок предназначен для чтения из файла. В данном отрывке не хватает загрузки в регистор BX, хэндла файла т.е. правельная версия выглядит так:

mov [numb],ax ;Здесь вы сохраняете Handle

mov bx,ax ;bx = HANDLE FILE

mov ah,3Fh ;Номер функции Чтения из Файла
mov cx,0FF00h ;Колличество считываемых байт
mov dx,offset Buffer ;Адрес буфера куда будут читаться данные
int 21h

С, Уважением MnEm0n!C.

---------
Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: Студент)
Ответ отправлен: 28.05.2006, 14:45
Оценка за ответ: 5


Вопрос № 44.493
В третий раз за сегодня....
Вопрос на тему "односимвольного" калькулятора :). Вобщем со сложением и вычитанием проблем нет. В ниже указаном примере(вычитание), работает... Но когда перешел к умножению и делению "такого вида" возникли проблемы. Умножение заменил сложением с помощью цыкла(loop), второе чило приравнивается СХ, тоесть к первому числу прибавляется определенное количество раз само к себе - с горем получилось... А вот с делением в голову ничего не пришло...помогите. И если можно...может умножение можно както подругому отобразить? :)

Приложение:

Отправлен: 28.05.2006, 16:21
Вопрос задал: Бородин Евгений Викторович / kain (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: mix_mix
Здравствуйте, Бородин Евгений Викторович / kain!
А чего Вы хотите добится сложением? Вас пугают инструкции mul/imul? Да, с делением, используя процессор, туговато, не спорю. Но тогда используйте сопроцессор. Если плохо про него знаете, то можно почитать здесь: http://wasm.ru/article.php?article=edfpu02. Если будете сами переводить число в строку, то можно добится операций с числами до 2 в 80 степени :). Кстати, fpu поддерживает числа с плавающей точкой (надеюсь у Вас программа не под 8086 процессор :), а это всего лишь 1208925819614629174706176.
P.S. На форуме wasm.ru Вы можете тоже задавать свои вопросы. Сайт целиком посвящен низкоуровнемому программированию.
Ответ отправил: mix_mix (статус: 3-ий класс)
Ответ отправлен: 28.05.2006, 17:32

Отвечает: Пан Павел Константинович
Здравствуйте, Бородин Евгений Викторович / kain!

Мне очень нравиться тот факт, что все сообщения у вас выдаються на Англ. так держать.

Есть для операций Умножения и Деления в Ассемблере такие команды как mul/imul(Умножения), div/idiv(Деление). Надо отметить что это специфичные команды, а именно ОНИ имеют так назыв. не явные Операнды.

*******************************************************************
Описание команды Умножения mul/imul:

MUL (MULtiply - БЕЗНАКОВОЕ умножение)
IMUL (Integer MULtiply БЕЗНАКОВОЕ умножение)

MUL Источник
IMUL Источник

Логика работы команд:

<Произведение> = <Множимое> * <Источник_Множитель>

Неявные операнды команд mul/imul:
Если Длина Источника = Байт, то Множимое = AL и Произведение = AX
Если Длина Источника = СЛОВО, то Множимое = AX и Произведение = DX:AX
******************************************************************
Команда Деление(div/idiv) очень похоже на умножение.

<Частное:Остаток> = <Делимое> * <Источник_Делитель>

Неявные операнды команд div/idiv:

Если Длина Источника = Байт, то Делимое = AX, Частное = AL и Остаток = AH
Если Длина Источника = СЛОВО, то Делимое = DX:AX, Частное = AX и Остаток = DX

********************************************************************

Материал который находится выше был взят из книги, автор которой является Н.Д. Голубь, Если есть не точности то это только по моей вине.

С, Уважением MnEm0n!C.


---------
Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: Студент)
Ответ отправлен: 29.05.2006, 00:43


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное