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

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


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

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

Выпуск № 376
от 19.02.2006, 16:36

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


Вопрос № 35358: В главе№3 Калашникова идет речь о сегментации памяти. Все понятно, однако как проверить данные в примерах №1 и №2 С Уважением Kont Kontovich ...
Вопрос № 35360: Здраствуйте! помогите мне решить задачу на асме. -------------- Надо написать программу для перестановки данных регистров ах и сх с использованием стека. Заранее большое спасибо....
Вопрос № 35372: Привет! Хочу сложить два десятичных числа и вывести результат (десятичный) на экран: CSEG segment assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG org 100h start: mov ah,9 mov ax,5 add ax,8 int 21h in...
Вопрос № 35378: Приветствую господа эксперты! Мне задали задачу: ввести два числа и их сумму в двоичном представлении вывести в правый верхний угол экрана. Со всем, кроме двоичного представления разобрался, точнее слепил из кусков кодов, найденных в ине...
Вопрос № 35403: 1.Подскажите как сделать программу резидентной. 2.как ее удалить из памяти. Если не затруднит напишите пример простинькой программы. Заранее спасибо....

Вопрос № 35.358
В главе№3 Калашникова идет речь о сегментации памяти. Все понятно, однако как проверить данные в примерах №1 и №2 С Уважением Kont Kontovich
Отправлен: 13.02.2006, 21:36
Вопрос задал: Kont kontovich (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PRiSon
Здравствуйте, Kont kontovich!
Пример Первый...идёт обьяснение как распологаются данные в памяти.
Пример второй... простой пример адресации.
Для того чтобы проверить данные нужно для начала загрузить их в память...
Смотри пример Третий.
Из командной строки указываем путь к отладчику те к примеру
C:masm611inAFDPRO Твоя Программа.com жмём enter
в отладчике всё видно невооружённым взглядом. В нижней части посмотри там эти самые данные (Dima$).
вот есть статейки --->>http://www.wasm.ru/publist.php?list=22

Приложение:

---------
Стремление - значит получится.

Ответ отправил: PRiSon (статус: 2-ой класс)
Отправлен: 14.02.2006, 08:15


Вопрос № 35.360
Здраствуйте! помогите мне решить задачу на асме.
--------------
Надо написать программу для перестановки данных регистров ах и сх с использованием стека.
Заранее большое спасибо.
Отправлен: 13.02.2006, 22:22
Вопрос задал: Daiver (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Евгений Иванов
Здравствуйте, Daiver!

mov [esp], ax
mov cx, [esp]

push cx
pop ax

удачи!

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 13.02.2006, 22:31
Оценка за ответ: 4
Комментарий оценки:
хорошоб еслиб полностью, и на том спасибо

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Daiver!
Или так:
push ax
push cx
pop ax
pop cx

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Студент)
Отправлен: 13.02.2006, 22:42


Вопрос № 35.372
Привет!
Хочу сложить два десятичных числа и
вывести результат (десятичный) на экран:

CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h
start:

mov ah,9
mov ax,5
add ax,8
int 21h
int 20h

ret

CSEG ends

end start

В итоге получается пустая строка ;-(
Что сделать, чтобы добиться цели?
Отправлен: 14.02.2006, 00:33
Вопрос задал: Retcom (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Sager
Здравствуйте, Retcom!
Чтобы вывести результат на экран нужно преобразовать сложенное число в десятичный вид. В 25-выпуске Калашникова подробно рассмотрено как это сделать

Приложение:

Ответ отправил: Sager (статус: Практикант)
Отправлен: 14.02.2006, 07:57
Оценка за ответ: 5
Комментарий оценки:
Спасибо.
если более коротким способом это сделать нельзя, то огромное спасибо! буду изучать.

Отвечает: Беляев Валерий (ака seaman)
Здравствуйте, Retcom!
Тебе уже 10 раз отвечали, с исходниками полными.
Ну нельзя вывести просто число на экран. На экран выводятся литеры. Коды литер стандартизованы. Чтобы вывести 0 надо выводит литеру с кодом 30h, 1 - 31h и.т.д.
Если тебе надо вывести просто цифру ну прибавь ты к ней 30h.
Если число больше чем 9(десятичное) оно при выводе будет из двух литер - надо их вычислить. делим число на 10 - частное (целое) - старшая цифра, остаток - младшая цифра. Их надо по отдельности выводить на экран, как выводил одиночную цифру меньшую 10. Сначала прибавляем 30h к старшей цифре -выводим на экран, затем аналогично к младшей.
Если число больше 99 - делим на 10 - получаем частное большее 9 и остаток - младшую цифру. Вроде ее уже можно было бы вывести на экран, как описано выше, но мы же не арабы, у нас сначала надо выводить старшие цифры. Так что где-то запоминаем остаток. С частным же проделываем то, что описано выше для числа большего 9, но меньшего 99. Затем вспоминаем сохраненную младшую цифру, и вводим ее.
Обобщить горазда проще сначала сорудив где-нибудь в памяти строку, представляющую число. Иначе где-то нужно будет каждый раз сохранять остаток, да еще так, чтобы он не испортил предыдущую сохраненную цифру. Можно, конечно просто сохранять их в стеке, а затем при выводе доставать их оттуда.
Ну вот вроде разжевал алгоритм, теперь разберемся в твоей программе.
Ты смотрел описание функции ДОС int 21h/ah=9?
Входные параметры: ds:dx - адрес строки, заканчивающейся '$'.
Где она у тебя?
Ответ отправил: Беляев Валерий (ака seaman) (статус: 3-ий класс)
Отправлен: 14.02.2006, 08:29
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 35.378
Приветствую господа эксперты!
Мне задали задачу: ввести два числа и их сумму в двоичном представлении вывести в правый верхний угол экрана.

Со всем, кроме двоичного представления разобрался, точнее слепил из кусков кодов, найденных в инете. Помогите с последним штрихом, пожалуйста.
Спасибо!

Приложение:

Отправлен: 14.02.2006, 06:25
Вопрос задал: Fantomax (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Sager
Здравствуйте, Fantomax!
Самый простой способ вывода в двоичном представлении - это разбить число на тетрады и вывести каждую из них по очереди. См. пример в приложении

Приложение:

Ответ отправил: Sager (статус: Практикант)
Отправлен: 14.02.2006, 07:58

Отвечает: Евгений Иванов
Здравствуйте, Fantomax!
ужас тебе Sager привёл. нет ничего проще вот этого:

mov bx, [number]
mov di, address
push 0B800h
pop es
mov cx, 16
mov ah, 7
@m1:
mov al, '0'
rcl bx, 1
jnc @@zero
inc al
@zero:
stosw
dec cx
jnz @@m1

удачи!

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 14.02.2006, 08:59
Оценка за ответ: 5


Вопрос № 35.403
1.Подскажите как сделать программу резидентной.
2.как ее удалить из памяти.
Если не затруднит напишите пример простинькой программы.
Заранее спасибо.
Отправлен: 14.02.2006, 12:10
Вопрос задал: Gwest (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Gwest!
Чтобы сделать резидентной, используй прерывание номер 27h

mov dx,ofs end_resident
int 27h

в DX должен быть адрес последнего байта, который ты хочешь оставить в памяти.

Чтобы выгрузить после обратно из памяти, используй ключ командной строки - это команда на выгрузку.
Проверяешь, что программа в памяти находится - есть много способов, как проверка по адресам, там и по спулеру (2Fh).
вот кусок кода - проверка идёт по состоянию перехвата прерывания собственным обработчиком.

    cli
    mov ax,es
    cmp ax,wptr [ds:90]
    jnz no_unin
    cmp ax,wptr [ds:190]
    jnz no_unin
    lds dx,dwptr [es:old_16_int]
    mov ax,2516h
    int 33
    lds dx,dwptr [es:old_2f_int]
    mov ax,252fh
    int 33
    mov ah,49h
    int 33

После проверки "отдаёшь прерывания" и отдаёшь память (49h).
после этого обычный выход

    sti
    mov ax,4C00h
    int 21h


удачи!

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

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 14.02.2006, 13:18
Оценка за ответ: 4


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

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

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

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

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

В избранное