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

Ассемблер? Это просто! Учимся программировать


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

Зенченко Константин Николаевич
Статус: Профессор
Рейтинг: 108
∙ повысить рейтинг >>
Лысков Игорь Витальевич
Статус: Специалист
Рейтинг: 89
∙ повысить рейтинг >>
Airyashov
Статус: Студент
Рейтинг: 25
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 1128
от 09.12.2008, 02:05

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 152723: Здравствуйте, уважаемые эксперты. Прошу помочь в решении следующей задачи. <div style="margin:15px; margin-top:10px"><div><b><font color="gray">Код:</font></b></div><pre style="margin: 0px; padding: 6px; border: 1px inset; width: 650px; height: 10...


Вопрос № 152740: Здравствуйте! Все никак не могу взять в толк один момент. Я могу вызывать окно с сообщением так: call _MessageBoxA@16 или так: call __imp__MessageBoxA@16 именно такие названия процедуры я нашел в user32.lib ...
Вопрос № 152763: Здравствуйте, не могли бы вы помочь мне разобраться в одном моменте. Есть код: <div style="margin:15px; margin-top:10px"><div><b><font color="gray">Код:</font></b></div><pre style="margin: 0px; padding: 6px; border: 1px inset; width: 650px; height...
Вопрос № 152815: Здраствуйте! У меня вот такой вопрос, мне нужно защитить страницу памяти в защищенном режиме в нулевом кольце. Для страничной памяти предусмотрены права доступа на чтение и запись, но насколько я понял они действуют только для разных уровней превилег...
Вопрос № 152835: Здравствуйте уважаемые эксперты!!=) я начила изусчать ассемблер, и у меня такой вопрос: Как удалить из заданной строки лишние пробелы, т.е оставить между словами не более одного пробела.. помогите кто может..=( зарание спасибо=)...

Вопрос № 152.723
Здравствуйте, уважаемые эксперты. Прошу помочь в решении следующей задачи.
Код:
Дано: Нач. адрес 8400, кол-во ячеек 2А, условие >=0.
Написать программу, подсчитывающую количество чисел в области памяти 8400-8429, больше или равных нулю. Для написания программы использовать команды условных переходов. Расчеты проводить в цикле. Прим. Все числа приведены в шестнадцатеричной системе счисления.


Спасибо за рассмотрение.
Отправлен: 03.12.2008, 09:02
Вопрос задал: Алексеев Андрей Сергеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Шевченко Александр Владимирович
Синтаксис FASM.
Подпрограмма возвращает в регистре ах количество элементов, равных или больших 0.
Прошу прощения за кодировку. Честное слово, не знаю, как сделать, чтоб буквы человеческие были.
Попробуйте Штирлицем, что ли.

Приложение:

Ответ отправил: Шевченко Александр Владимирович (статус: 3-й класс)
Ответ отправлен: 03.12.2008, 09:51

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237462 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 4
    Комментарий оценки:
    Спасибо большое, жаль, что комментарии не могу прочитать.


    Отвечает: an42
    Здравствуйте, Алексеев Андрей Сергеевич!
    При проверке на не отрицательность используется проверка знакового бита.
    Если 7-й бит равен 1, то число отрицательное, в остальных случаях либо ноль, либо больше нуля.
    В приложение пояснения.
    Удачи

    Приложение:

    Ответ отправил: an42 (статус: Студент)
    Ответ отправлен: 04.12.2008, 08:36

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237587 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Вопрос № 152.740
    Здравствуйте!
    Все никак не могу взять в толк один момент.
    Я могу вызывать окно с сообщением
    так:
    call _MessageBoxA@16
    или так:
    call __imp__MessageBoxA@16

    именно такие названия процедуры я нашел в user32.lib


    Могу вызвать и по другому:

    MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    call MessageBoxA

    в этом случае, как я понял, линковщик превращает MessageBoxA в _MessageBoxA@16


    Но вот в самом user32.dll
    нет никаких подчеркиваний и
    Отправлен: 03.12.2008, 11:34
    Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 5)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, Бартосик Феликс Михайлович!
    Дело в том, что вызвать функцию из DLL можно двумя способами:
    1) call [ddAddress], где ddAddress - двойное слово, в котором адрес функции.
    2) call [jmpAddress], где jmpAddress - адрес, по которому находится команда jmp [ddAddress]

    Так вот, когда формируется DLL, то одновременно с ней формируется и LIB, в которой
    формируются public имена с __IMP__ для первого случая и с подчеркиванием для второго случая.
    Т.о., имена с _ и с __IMP__ - это шлюзы для вызова функции из DLL.

    По-умолчанию используется вариант с jmp-ом. Поэтому имеем в итоге подчеркивание.

    Ну, а со знака @ указывается длина параметров в байтах. Например, 4 параметра dword дадут @16.
    Это необходимо для контроля параметров.
    Все продумано...:)

    И, наконец, угловые скобки MessageBox equ <MessageBoxA>
    означает всего-навсего подстановку строки - таков синтаксис.

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

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237485 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Спасибо большое Игорь Витальевич !
    Кажется начинаю понимать.


    Вопрос № 152.763
    Здравствуйте, не могли бы вы помочь мне разобраться в одном моменте. Есть код:
    Код:
    .386
    cseg segment
    assume cs:cseg, ds:cseg
    org 100h
    Start:
    ;
    mov cx,4
    mov si,-1
    cycl:
    inc si
    mov eax,summand_2[si]
    adc summand_1[si],eax
    loop cycl
    jc @@cf1_of1
    jo @cf0_of1
    r_true: jmp end_p
    @@cf1_of1: jno @@cf1_of0
    mov carry,0ffffffffh
    jmp end_p
    @@cf1_of0: jmp r_true
    @@cf0_of1: xor eax,eax
    mov carry,eax
    end_p: xor eax,eax
    mov eax,summand_1

    int 20h

    summand_1 dd ?
    carry dd 0
    summand_2 dd ?
    cseg ends
    end Start

    Не мой, нашел в инете и немного переделал под свои нужды. Суть задачи такова: сложить два числа (dword) используя инструкции толь ко 8086, тоесть ни о каких еах не может быть и речи... Насколько я понял нужно разделять старшую и младшую половины и хранить их в разных регистрах. Прошу помочь осуществить сие... Так же буду благодарен если пнете в правильном направлении насчет как работает adc. Описание функции читал, а вот четкого представления нету все равно, гугл на этот счет немногословен.... Заранее спасибо, очень расчитываю на вашу помощь.
    Отправлен: 03.12.2008, 14:30
    Вопрос задал: Logoff (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 2)

    Отвечает: Airyashov
    Здравствуйте, Logoff!
    также как складываете столбком только в двоичном виде
    .data
    ....
    ch1 dd 12345678h
    ch2 dd 12345678h
    s dd 0
    ...
    .code
    ...
    mov ax,word ptr ch1
    mov word ptr s,ax
    mov ax,word ptr ch2
    add word ptr s,ax

    mov ax,word ptr ch1+2
    mov word ptr s+2,ax
    mov ax,word ptr ch2+2
    adc word ptr s+2,ax

    adc - учитывает флаг переноса, что тут не понятного?
    например
    есть два числа, двоичные по два разряда, для примера 01 и 11, разрядность регистра 1 бит
    01+11=100
    складывать придется так младшие части
    1+1=0 (и перенос в следующий разряд 1 (CF=1))

    при сложении старших разрядов учтем перенос
    0+1+1(перенос)=0 (и перенос в следующий разряд 1 (CF=1))
    и того
    100
    Ответ отправил: Airyashov (статус: Студент)
    Ответ отправлен: 03.12.2008, 14:44

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237501 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 152.815
    Здраствуйте! У меня вот такой вопрос, мне нужно защитить страницу памяти в защищенном режиме в нулевом кольце. Для страничной памяти предусмотрены права доступа на чтение и запись, но насколько я понял они действуют только для разных уровней превилегий, на нулевом все и всем разрешено как на чтение так и на запись, возможна я и ошибаюсь, но вопрос от этого не меняется, можно защитить страницу на запись?
    Отправлен: 03.12.2008, 17:41
    Вопрос задал: Yura Koshman (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, Yura Koshman!
    На любом кольце предусмотрены для страниц памяти права на чтение/запись.
    Какие права будут прописаны, такие и будут действовать.
    Другой вопрос, что программа на нулевом кольце вполне может получить доступ до таблиц страниц
    при помощи соответствующих команд (хоть они и привилегированны, но на 0 кольце доступны!)
    и при желании подправить права доступа до любой страницы...
    ---------
    Удачи!
    Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
    Ответ отправлен: 04.12.2008, 09:52

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237595 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 4
    Комментарий оценки:
    Большое спасибо! Это то что мне и нужно было узнать.


    Вопрос № 152.835
    Здравствуйте уважаемые эксперты!!=) я начила изусчать ассемблер, и у меня такой вопрос:
    Как удалить из заданной строки лишние пробелы, т.е оставить между словами не более одного пробела.. помогите кто может..=(
    зарание спасибо=)
    Отправлен: 03.12.2008, 19:24
    Вопрос задала: Lastochka (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Зенченко Константин Николаевич
    Здравствуйте, Lastochka!

    Удалить лишние пробелы можно как в приложении.
    Команды компилятора:
    © Цитата:
    tasm pr1
    tlink pr1 /t

    Вопросы по программе задавайте в мини-форуме.
    Удачи!

    Приложение:

    ---------
    Итерация от человека, рекурсия — от Бога (Питер Дойч)

    Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
    Украина, Киев
    Тел.: +380979536619
    Адрес: Украина г.Киев
    ----
    Ответ отправлен: 03.12.2008, 20:01

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237539 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

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

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

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

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

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


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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2008, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное