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

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


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

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

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

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

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

Выпуск № 1139
от 21.12.2008, 03:35

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

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

Вопрос № 154413: Здравствуйте! Задумал отобразить численный результат с плавающей точкой (уже как бы полученный в арифмет. сопроцессоре). Программа <u>еще не закончена как положено,</u> потому что столкнулся вот с каким местом. Я его <b>пометил;!!!!!!!!!...


Вопрос № 154426: Здравствуйте всем!!! я неочень плохо изучала на языке ассемблера! 1.сумма чисел вида(х*х-х), начиная с 2, для заданного числа циклов. 2.факториал заданного числа(не более 6) ...
Вопрос № 154427: Здравствуйте всем!!! не очень плохо знать на языке ассемблера 1. задание 2*x*x*x+3*y*y, если x<y 3*x*x+2*y*y*y, если x<y 3*x*x*x+12, если x=y 2. задание x*x+y*y+3*x, если x-y=0 (x-y)*(x-y)+2*x, если x...
Вопрос № 154439: Здравствуйте уважаемые эксперты! Объясните пожалуйста мне действительные числа в сопроцессор е. В книге пишет: «1) Рассмотрим, как представляется число 7,375 при использовании одинарной точности. (понимаю) 2) Во-первых, заметим, что 7,375=4+...

Вопрос № 154.413
Здравствуйте!
Задумал отобразить численный результат с плавающей точкой (уже как бы полученный в арифмет. сопроцессоре).

Программа еще не закончена как положено, потому что столкнулся вот с каким местом.
Я его пометил;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
После округления цифры «4» получается «3».
Т.е. у меня должно было быть:
0.34 * 10 = 3.4 округляем и «3» выводим
3.4-3=0.4
0.4* 10 = 4 округляем и «4» выводим Но вот здесь «4» округляется к «3»!!!!!!!!!!!!!!!!!!
Там хвостик какой-то появляется, т.е.
;{4-4 = -3.4694469519536142e-18}
Я в коде это пометил. Как можно с этим бороться??

Заранее благодарю.

Приложение:

Отправлен: 15.12.2008, 10:30
Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Бартосик Феликс Михайлович!
А это издержки арифметики с плавающей точкой...
Никогда нельзя расчитывать на точное совпадение!
Я бы все же рекомендовал использовать обычное округление до ближайшего,
Зная число знаков после запятой, умножаем на 10 в соответствующей степени
и выводим последовательность BCD командой FBSTP
Далее преобразовываем в строку, вставив в нужном месте точку. По-моему, так значительно проще.

Приложение:

---------
Удачи!

Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 15.12.2008, 11:56

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

    Оценка за ответ: 5
    Комментарий оценки:
    Спасибо, видимо так и буду делать.


    Вопрос № 154.426
    Здравствуйте всем!!!
    я неочень плохо изучала на языке ассемблера!
    1.сумма чисел вида(х*х-х), начиная с 2, для заданного числа циклов.
    2.факториал заданного числа(не более 6)

    Приложение:

    Отправлен: 15.12.2008, 12:15
    Вопрос задала: Miwka (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, Miwka!
    Задание 1
    Заметим, что x*x-x = x*(x-1). Пусть max - заданное число циклов, тогда
    Код:
    mov cx, 2 ;x
    xor bx, bx ;сумма
    calc_loop: ;цикл
    mov ax, cx ;x
    dec ax ;x-1
    mul cx ;x*(x-1) = x*x - x
    add bx, ax ;накапливаем сумму
    inc cx ;x=x+1
    cmp cx, max ;x<=max
    jbe calc_loop ;на повтор

    Задание 2
    Пусть max - заданное число, тогда
    Код:
    mov cx, 2 ;n
    mov bx, 1 ;здесь будем накапливать факториал
    calc_loop: ;цикл
    mov ax, bx ;F(n-1)
    mul cx ;F(n-1)*n
    mov bx, ax ;F(n)
    inc cx ;n=n+1
    cmp cx, max ;n<=max
    jbe calc_loop ;на повтор

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

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

    Оценка за ответ: 5
    Комментарий оценки:
    спасибо большое! я немножко поняла! еще раз спасибо!!!


    Вопрос № 154.427
    Здравствуйте всем!!!
    не очень плохо знать на языке ассемблера
    1. задание
    2*x*x*x+3*y*y, если x<y
    3*x*x+2*y*y*y, если x<y
    3*x*x*x+12, если x=y
    2. задание
    x*x+y*y+3*x, если x-y=0
    (x-y)*(x-y)+2*x, если x-y>0
    (y-x)*(y-x)+x, если x-y<0
    мне надо сдать на экзамен. заранее спасибо!!!!

    Приложение:

    Отправлен: 15.12.2008, 12:27
    Вопрос задала: Miwka (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, Miwka!
    Задание 1
    Предположу, что 2*x*x*x+3*y*y, если x>y
    Если не так, то чуть-чуть правим в программе...
    Код:
    mov ax, xvar ;x
    cmp ax, yvar ;сравним x и y
    jz equal
    jl less
    ;x>y
    mov ax, xvar ;ax = x
    imul ax ;ax = x*x
    imul xvar ;ax = x*x*x
    shl ax, 1 ;ax = 2*x*x*x
    mov bx, ax ;bx = 2*x*x*x
    mov ax, yvar ;ax = y
    imul ax ;ax = y*y
    add bx, ax ;bx = 2*x*x*x + y*y
    shl ax, 1 ;ax = 2*y*y
    add ax, bx ;ax = 2*x*x*x + 3*y*y
    jmp exit
    ;x<y
    less:
    mov ax, xvar ;ax = x
    imul ax ;ax = x*x
    mov bx, ax ;bx = x*x
    shl ax, 1 ;ax = 2*x*x
    add bx, ax ;bx = 3*x*x
    mov ax, yvar ;ax = y
    imul ax ;ax = y*y
    imul yvar ;ax = y*y*y
    shl ax, 1 ;ax = 2*y*y*y
    add ax, bx ;ax = 3*x*x + 2*y*y*y
    jmp exit
    ;x=y
    equal:
    mov ax, xvar ;ax = x
    imul ax ;ax = x*x
    imul xvar ;ax = x*x*x
    mov bx, ax ;bx = x*x*x
    shl ax, 1 ;ax = 2*x*x*x
    add ax, bx ;ax = 3*x*x*x
    add ax, 12 ;ax = 3*x*x*x + 12

    exit: ;ax - результат

    Задание 2
    Код:
    mov
    ax, xvar ;x
    cmp ax, yvar ;сравним x и y
    jz equal
    jl less
    ;x>y
    mov ax, xvar ;ax = x
    sub ax, yvar ;ax = x-y
    imul ax ;ax = (x-y)*(x-y)
    mov bx, ax
    mov ax, xvar ;ax = x
    shl ax, 1 ;ax = 2*x
    add ax, bx ;ax = (x-y)*(x-y) + 2*x
    jmp exit

    less:
    mov ax, yvar ;ax = y
    sub ax, xvar ;ax = y-x
    imul ax ;ax = (y-x)*(y-x)
    add ax, xvar ;ax = (y-x)*(y-x) + x
    jmp exit

    equal:
    mov ax, xvar ;ax = x
    mov bx, ax ;bx = x
    shl ax, 1 ;ax = 2*x
    add bx, ax ;bx = 3*x
    mov ax, xvar ;ax = x
    imul ax ;ax = x*x
    add bx, ax ;bx = 3*x + x*x
    mov ax, yvar ;ax = y
    imul ax ;ax = y*y
    mov ax, bx ;ax = 3*x + x*x + y*y

    exit: ;ax - результат

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

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


    Вопрос № 154.439
    Здравствуйте уважаемые эксперты!
    Объясните пожалуйста мне действительные числа в сопроцессоре. В книге пишет:
    «1) Рассмотрим, как представляется число 7,375 при использовании одинарной точности. (понимаю)
    2) Во-первых, заметим, что 7,375=4+2+1+1/4+1/8. (понимаю)
    3) Поэтому представление этого числа в двоичной форме имеет следующий вид: 111.011b=1010*1.11011b. (не понимаю)
    4) Обратите внимание на то, что и основание системы счисления, и порядок, в который оно возводится, записаны в двоичное системе. ( понимаю)
    5) Итак, хранимая мантисса числа будет равна 11011b, а порядок 2+127=129, в двоичной форме 10000001b. (не понимаю)
    6) Поскольку число положительное знаковый бит равен нулю. (понимаю)»
    Объясните пожалуйста:
    1) Почему: 1010*1.11011b?
    5) Почему: мантисса числа будет равна 11011b, а порядок 2+127=129?
    Огромное спасибо зарание!
    Отправлен: 15.12.2008, 13:51
    Вопрос задал: Олег Миколайович (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Лысков Игорь Витальевич
    Разберем на примере вещественного числа одиночной точности (32 бита)
    Итак, условно нарисуем, как seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm,где
    s - бит знака. Тут все понятно 0/1 означает +/-;
    eeeeeeee - 8 бит порядка. Для удобства принято следующее:
    Чтобы не иметь дело с отрицательными величинами,
    порядок задается в смещенной форме - он равен истинному порядку,
    увеличенному на значение смещения 127. В нашем примере получается 2+127=129
    mmm...mm - мантисса. Мантисса хранится в нормализованном виде,
    считается, что целой частью числа является 1, все остальное - дробная часть
    И это еще не все! Эта самая целая часть не хранится, а подразумевается (раз она всегда 1)!
    В нашем примере: 111.011 - ненормализованное число,
    нормализованное - 1.11011, порядок 2 (надо будет потом умножить на 2 в степени равной порядку),
    порядок с учетом смещения 2+127=129=10000001b,
    реально хранимая мантисса - 11011 (без целой части)
    Т.о. имеем число 0 10000001 11011000 000000000000000b

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

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

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


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

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

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

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

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

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

    В избранное