Вопрос № 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
Отвечает: 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
В итоге получается пустая строка ;-(
Что сделать, чтобы добиться цели?
Отправлен: 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).
вот кусок кода - проверка идёт по состоянию перехвата прерывания собственным обработчиком.
После проверки "отдаёшь прерывания" и отдаёшь память (49h).
после этого обычный выход
sti
mov ax,4C00h
int 21h
удачи!
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 14.02.2006, 13:18 Оценка за ответ: 4