Социальная сеть FreeStudents | Галерея

Правила  •  Поиск  •  Войти  •  Зарегистрироваться!
Лаба по ассемблеру
 
Начать новую тему   Ответить на тему    Список форумов -> Помоги студенту!
 
Автор Сообщение
Weman



Репутация: +5   
Возраст: 20
Гороскоп: Лев Год Дракона
Пол: <br />Пол:Муж
Сообщения: 536
Стаж: 1 год 11 месяцев
[] Сообщение04.04.2007 21:21 Лаба по ассемблеру Ответить с цитатой

Помогите с задачкой: найти и сохранить количество десятичных цифр в числе (число в памяти будет храниться в 16СС).

Исходное число хранится в двухбайтовой ячейке сегмента данных, результат необходимо сохранить в однобайтовую ячейку сегмента данных. Под словосочетанием "сохранить результат" понимается запись результат в однобайтовую ячейку в сегменте данных. Следует испрользовать только итерационные циклы и условные операторы.

Я думаю, здесь надо как-то через сдвиг числа делать и смотреть на остаток от деления каждой цифры на 10.

Так или не так, какие есть варианты?


_________________
Завтранах-универсальный ответ на любую просьбу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail М-Агент
Kabal
Инноватор-самоучка


Репутация: +19/–1   
Возраст: 26
Гороскоп: Козерог Год Петуха
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург
Сообщения: 3252
Стаж: 2 года 9 месяцев
[] Сообщение04.04.2007 21:52 Ответить с цитатой

Какой используется ассемблер?

_________________

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Skype Name
Weman



Репутация: +5   
Возраст: 20
Гороскоп: Лев Год Дракона
Пол: <br />Пол:Муж
Сообщения: 536
Стаж: 1 год 11 месяцев
[] Сообщение04.04.2007 22:21 Ответить с цитатой

ассемблер для микропроцессора 8086

_________________
Завтранах-универсальный ответ на любую просьбу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail М-Агент
Sovie



Репутация: +20/–1   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург
Сообщения: 787
Стаж: 2 года 7 месяцев
[] Сообщение04.04.2007 22:25 Ответить с цитатой

Это шикарно, но нельзя ли поточнее, например:
1) MASM
2) TASM
3) NASM
4) Встроенный в Pascal, C или другой язык высокого уровня.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Weman



Репутация: +5   
Возраст: 20
Гороскоп: Лев Год Дракона
Пол: <br />Пол:Муж
Сообщения: 536
Стаж: 1 год 11 месяцев
[] Сообщение04.04.2007 22:28 Ответить с цитатой

Sovie
Лучше всего - написать на Tasm Смайлик


_________________
Завтранах-универсальный ответ на любую просьбу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail М-Агент
Sovie



Репутация: +20/–1   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург
Сообщения: 787
Стаж: 2 года 7 месяцев
[] Сообщение04.04.2007 22:32 Ответить с цитатой

Так. С ассемблером выяснилои. Теперь по заданию.
Weman писал(а):
найти и сохранить количество десятичных цифр в числе

Напиши просто цифрами что было и что должно получиться. Пример входных и выходных данных. А то я трудом понимаю, что от тебя тут нужно.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Weman



Репутация: +5   
Возраст: 20
Гороскоп: Лев Год Дракона
Пол: <br />Пол:Муж
Сообщения: 536
Стаж: 1 год 11 месяцев
[] Сообщение04.04.2007 22:36 Ответить с цитатой

Например:

в памяти: 0093
результат: 4

в памяти: FFFF
результат: 0

в памяти: 0A34
результат: 3

Что-то вроде этого должно получаться Смайлик


_________________
Завтранах-универсальный ответ на любую просьбу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail М-Агент
Weman



Репутация: +5   
Возраст: 20
Гороскоп: Лев Год Дракона
Пол: <br />Пол:Муж
Сообщения: 536
Стаж: 1 год 11 месяцев
[] Сообщение05.04.2007 20:57 Ответить с цитатой

Ну есть какие-нибудь варианты как сделать?

_________________
Завтранах-универсальный ответ на любую просьбу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail М-Агент
Weman



Репутация: +5   
Возраст: 20
Гороскоп: Лев Год Дракона
Пол: <br />Пол:Муж
Сообщения: 536
Стаж: 1 год 11 месяцев
[] Сообщение14.04.2007 18:13 Ответить с цитатой

Сегодня уточнил задание по лабе у преподавателя. Оказалось все намного проще!

Есть какое то число, надо ,грубо говоря, просто посчитать его длину.
Т.е. есть например:
число 1234 - результат 4
число 93 - результат 2

Метод решения состоит в том, чтобы исходное число делить на 10 после каждого деления увеличивать счетчик цифр на 1 и смотреть, чтобы частное было не равно нулю.

Вот в принципе метод решения такой. Кто может помочь с написанием кода на ассемблере? Смайлик


_________________
Завтранах-универсальный ответ на любую просьбу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail М-Агент
Sovie



Репутация: +20/–1   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург
Сообщения: 787
Стаж: 2 года 7 месяцев
[] Сообщение15.04.2007 14:27 Всего отзывов: 1 Ответить с цитатой

Код:
#include <iostream>
using namespace std;

void main () {
   short iValue;
   cout << "Enter value -> ";
   cin >> iValue;
   _asm {
      mov ax, iValue    // ax = iValue
      mov bl, 10        // Делить будем на 10
      mov cx, 1         // Счётчик цифр
      Continue:         // Метка продолжения
      div bl            // Непосредственно деление
      cmp al, 0         // Всё, больше нечего делить?
      je Exit           // Если нечего, то на выход
      inc cl            // Если есть что, увеличить счётчик
      mov ah, 0         // ah = 0, ибо тут остаток от прошлого деления
      jmp Continue      // Продолжим-с
      Exit:             // Метка выхода
      mov iValue, cx    // Сохраним результаты
   }
   cout << "Result -> " << iValue << endl;
}


Добавлено спустя 22 минуты 40 секунд:

Предыдущий код хорошо тестить на iValue = 1234.
Имей в виду, что short = 2 байта. Если хочешь, чтобы было 4 байта, твори следующее:

Код:
    int iValue;
    short iResult;

    cout << "Enter value -> ";
    cin >> iValue;
    // iValue = 123456;
     
    _asm {
        mov dx, word ptr [iValue][2]
        mov ax, word ptr [iValue]
        mov bx, 10 
        mov cx, 1
        Continue:
        div bx   
        cmp ax, 0
        je Exit
        inc cl
        mov dx, 0
        jmp Continue
        Exit:
        mov iResult, cx
    }
    cout << "Result = " << iResult << endl;


Удобно прогонять на 123456.
При 1234567 частное не влезает в ax. Процессор генерирует прерывание типа 0. Что делать, не знаю.

Отдельное списибо Artflasher за фокусы с регистровой парой и поддержку.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Weman



Репутация: +5   
Возраст: 20
Гороскоп: Лев Год Дракона
Пол: <br />Пол:Муж
Сообщения: 536
Стаж: 1 год 11 месяцев
[] Сообщение21.04.2007 14:56 Ответить с цитатой

Sovie спасибо ОГРОМНОЕ! Во всем разобрался - оказалось довольно легко, я думал будет сложнее!
Скоро сдавать пойду Смайлик


_________________
Завтранах-универсальный ответ на любую просьбу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail М-Агент
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов -> Помоги студенту! Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы
© 2004—2008 «Сайт Свободных Студентов»