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

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


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

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

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

Лысков Игорь Витальевич
Статус: Специалист
Рейтинг: 290
∙ повысить рейтинг >>
Зенченко Константин Николаевич
Статус: Профессор
Рейтинг: 155
∙ повысить рейтинг >>
Шевченко Александр Владимирович
Статус: 3-й класс
Рейтинг: 23
∙ повысить рейтинг >>

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

Выпуск № 1147
от 29.12.2008, 09:05

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

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

Вопрос № 155550: Здравствуйте, уважаемые эксперты! Как в ручную посчитать следующую задачу: mov AH,-28 mov BL,7 1) add ax,bx ; AX=? ; CF, AF, PF, SF, ZF, OF - ? 2) mul BL ; AX=? 3...


Вопрос № 155554: Здравствуйте! У меня задача: дана прога, которая складывает два числа (написана на VB6) в откомпилированном виде. С помощью программы WinHEX сделать так, чтобы вместо сложения было вычитание. Скажите, пожалуйста, как это можно сделать, есть ли ...

Вопрос № 155.550
Здравствуйте, уважаемые эксперты!

Как в ручную посчитать следующую задачу:

mov AH,-28
mov BL,7

1) add ax,bx ; AX=?
; CF, AF, PF, SF, ZF, OF - ?

2) mul BL ; AX=?

3) imul BL ; AX=?

4) cbw
idiv BL ; AX=?

Задача происходит в четырёх разных вариантах. Для каждого варианта необходимо узнать содержание AX. И флаги состояния для первого. Только всё это надо сделать вручную.

Заранее - спасибо.
Отправлен: 23.12.2008, 22:45
Вопрос задал: Соболев Сергей Владимирович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Trulala

ASSUME cs:code, ds:data, ss:stk

data SEGMENT

data ENDS

code SEGMENT
entry_point:
mov ax,SEG data
mov ds,ax


mov al,-28
mov ah,0 ;ax = 00E4h, -28 = E4 в дополнительном коде

mov bl,07h
mov bh,0
add ax,bx ;ADDition - Сложение
;ax = 00EBh

;00E4h
;+
;0007h
;-----
;00EBh

;CF=0 - не было переноса из старшего(15-го) бита результата

;================================================================

;0000000011100100b
;+
;0000000000000111b
;-----------------
;0000000011101011b

;AF=0 - не было переносов из 3-го разряда младшей тетрады результата

;если bl=0Fh, то AF=1, так как в этом случае имеем перенос из 3-го разряда младшей тетрады результата

;0000000011100100b
;+
;0000000000001111b
;-----------------
;0000000011110011b = 0F3h

;================================================================

;11101011b - 6 единиц(6 - чётн ое число, чётное число делится без остатка на 2)

;PF=1 - 8 младших разрядов результата содержат чётное число единиц

;================================================================
;
;0000000011101011b
;
;SF=0 - старший бит результата равен 0
;
;================================================================
;
;ZF=0 - результат ненулевой
;
;================================================================
;
;OF=0 - в результате операции не происходит переноса в старший знаковый бит результата
;
;================================================================

mov al,-28
mov bl,7
mul bl ;MULtiply - целочисленное умножение без знака

;??E4h
;*
;07h
;-----
;063Ch

;старшая половина результата ненулевая - OF=1, CF=1, SF=?, ZF=?, AF=?, PF=?

;================================================================

mov al,-28
mov bl,7
imul bl ;Integer MULtiply - целочисленное умножение со знаком

;??E4h
;*
;07h
;-----
;FF3Ch = -196d = 11111111 00111100b

;перенос знакового бита в старший байт - CF=1, OF=1, SF=?, ZF=?, AF=?, PF=?

;================================================================

mov al,-28
mov bl,7
cbw
idiv bl

;FFE4h
;/
;07h
;-----
;00FCh

;после выполнения команды CF=?, OF=?, SF=?, ZF=?, AF=?, PF=?

nop

code ENDS

stk SEGMENT PARA STACK
DB 200h DUP(?)
stk ENDS

END entry_point
Ответ отправил: Trulala (статус: 3-й класс)
Ответ отправлен: 26.12.2008, 03:34

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

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


    Вопрос № 155.554
    Здравствуйте!
    У меня задача: дана прога, которая складывает два числа (написана на VB6) в откомпилированном виде. С помощью программы WinHEX сделать так, чтобы вместо сложения было вычитание.
    Скажите, пожалуйста, как это можно сделать, есть ли какие-нибудь методы поиска ?
    По крайней мере, переименовавыть Caption (заголовок) у формы с помощью этой программы я уже научился, а вот как заменить сложение вычитанием не знаю, помогите, пожалуйста.
    Спасибо!
    Отправлен: 23.12.2008, 23:11
    Вопрос задал: AkaProc (статус: 4-й класс)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 8)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, AkaProc!
    Программы на vb6 характерны тем, что все операции выполняются подпрограммами, вызываемыми из DLL, в данном случае, из Msvbvm60.dll
    Поэтому надо менять вызов подпрограммы.
    Посмотрев таблицу экспорта Msvbvm60.dll, находим, что адрес функции __vbaVarSub отличается от __vbaVarAdd на 29h
    Итак, в Exe-файле нам надо поменять в 3 местах:
    1) меняем 'Add' в имени __vbaVarAdd по адресам 1664h и 1d14h на 'Sub'
    2) меняем байт 2Dh по адресу 1074h на 56h (добавляем 29h до адреса вызова фукции в DLL)
    После всех этих манипуляций, в заголовке напишется "-1"
    Удачи!
    ---------
    Удачи!
    Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
    Ответ отправлен: 26.12.2008, 03:18

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

    Оценка за ответ: 5
    Комментарий оценки:
    Благодарю!
    Но только у меня возникла неясность: почему-то, когда я пытаюсь перейти на строку по указаному Вами адресу, он говорит, что такого адреса нет. У меня вообще адреса начинаются с 401000. Может, я что-то не так делаю ? Использую программу PE Explorer. Хотя... если честно, меня больше интересует то, как Вы догадались до того, где именно надо менять...


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

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

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

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

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

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

    В избранное