Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Милена1
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 12
#1

Из записи натурального числа N выбросить все цифры, кратные заданной - Assembler

22.04.2016, 20:14. Просмотров 405. Ответов 3
Метки нет (Все метки)


http://www.cyberforum.ru/asm-beginners/thread1884389.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2016, 20:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Из записи натурального числа N выбросить все цифры, кратные заданной (Assembler):

Найти все трехзначные числа кратные 7, сумма цифр которых тоже кратна 7
Написать программу на ASSEMBLE, которая находит все трехзначные числа кратные...

Оприделить равны ли между собой старшая и младшая цифры в записи числа
Нужно написать программу на ассемблере с разными циклами, помогите плизз ...

Определить, являются ли четными или нечетными цифры в записи двузначного числа
Определить являются ли четные или нечетные цифры в записи какого то двузначного...

Выбросить из записи данного натурального числа n все цифры 0 и 5
дано натуральне число n. выбросить из записи числа n все цифри 0 і 5....

Выбросить из записи введенного натурального числа n цифры 0 и 5
Я не могу записать эту задачу на языке си с помощью цикла, использовать массив...

3
Mikl___
Автор FAQ
11365 / 5908 / 534
Регистрация: 11.11.2010
Сообщений: 10,932
23.04.2016, 03:43 #2
Милена1,
а другие языки программирования ты знаешь? Попробуй эту задачу выполнить на Паскале, Си или Бейсике... Результаты выложишь здесь, а дальше поможем
1
Милена1
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 12
23.04.2016, 15:17  [ТС] #3
но вот на с++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    int a, s=0, i=1 , n, k;
    cin >> a >> n;
    while (a)
    {
        if ((k = a % 10)%n!=0)
        {
            s += k*i;
            i *= 10;
        }
        a /= 10;
    }
    cout << s;
}
0
R71MT
2979 / 1109 / 264
Регистрация: 29.07.2014
Сообщений: 2,118
Записей в блоге: 4
23.04.2016, 21:09 #4
Милена1, пример с 16-тиричным числом 8F5Ch размером в 2 байта (16 бит).
Разбиваем его на 4 тетрады, в каждой из которых можно закодировать числа 00..0Fh (00..15d):
Assembler
1
2
  hex  =  8    F    5    C  
  bin  =  1000 1111 0101 1100
Из этого следует, что тебе нужно выталкивать из твоего числа по 4 бита, и проверять их на кратность заданной константе. Как-нельзя-лучше подходит для этого команда SHLD. У неё 3 операнда:
Assembler
1
    SHLD приёмник, источник, счетчик
SHLD сдвигает влево биты приёмника на количество бит, указанных в третьем операнде(счётчике). Освободившееся место приёмника занимают старшие биты источника. При этом значение источника не меняется. Для следующей тетрады источник нужно сдвигать вручную. Вот что можно из этого наваять..

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
org 100h
jmp start
 
mes0   db  13,10,'Default digit: F9A3h'
       db  13,10,'Binary codes : 1111 1001 1010 0011b'
       db  13,10,'Type constant: $'
ress   db  13,10,'       Result: $'
digit  dw  0F9A3h
const  db  0
 
start:
    mov   dx,mes0         ;
    call  message         ;
    mov   ah,8            ; вводим константу
@@: int   21h             ;
    cmp   al,'0'          ; игнорируем всё,
    jb    @b              ;     ..кроме цифр 0..9
    cmp   al,'9'          ;
    ja    @b              ;
    int   29h             ;
    and   ax,0Fh          ; переводим символ в цифру,
    push  ax              ;     ..и запоминаем её
    mov   dx,ress         ;
    call  message         ;
 
    pop   bx              ; ВХ = константа (делитель)
    xor   ax,ax           ; АХ будет результат (пока очищаем)
    mov   si,[digit]      ; натуральное число
    mov   cx,4            ; кол-во цифр в числе
@@: shld  ax,si,4         ; см.описание выше!
    push  ax              ; запомним АХ
    and   ax,0Fh          ; оставляем только мл.тетраду числа
    cwd                   ; очищаем место под остаток (DX=0)
    div   bx              ; разделить АХ на ВХ
    pop   ax              ; восстановим число
    or    dx,dx           ; в DX есть остаток?
    jnz   ok              ; есть - пропускаем тетраду в приёмник
    shr   ax,4            ; иначе: удаляем её от туда
ok: rol   si,4            ; сдвинем на 4 влево источник (сл.тетрада для проверки)
    loop  @b              ; проверяем оставшиеся цифры..
                          ; в АХ у нас результат! ==============================
    call  hexOut          ;      ..выводим его на экран
    mov   al,'h'          ; вставляем в конец литер "hex"
    int   29h             ;
 
exit:                     ;
    xor   ax,ax           ;
    int   16h             ;
    int   20h             ; выход!
 
;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
message:                  ;
   mov   ah,9             ;
   int   21h              ;
ret                       ;
;-----------------------------------------------------------------------
; процедура выводит EАХ на экран в HEX
hexOut:                   ;
   pusha                  ;
   xchg  dx,ax            ; DX = число
   mov   cx,4             ; кол-во цифр для вывода
@@:                       ;
   shld  ax,dx,4          ; получить в AL очередную цифру
   rol   dx,4             ; удалить ее из DX
   and   al,0Fh           ; оставить в AL только эту цифру
   cmp   al,0Ah           ; три команды, переводящие
   sbb   al,69h           ;    ..шестнадцатеричную цифру из AL
   das                    ;         ..в соответствующий ASCII-код
   int   29h              ; вывод на экран
   loop  @b               ; повторить для всех цифр
   popa                   ;
ret                       ;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2016, 21:09
Привет! Вот еще темы с решениями:

Вычеркнуть все вхождения заданной цифры из записи натурального числа
Есть решение , нужно переделать с помощью рекурсивной функции или процедуры. ...

Выбросить из записи числа все заданные цифры, оставив прежним порядок остальных цифр
Ребятки умняшки, помогите написать простенькую задачку :) Дано натуральное...

Выбросить из натурального числа цифры 0 и 5
Доброго времени суток! Только начал разбираться в Паскале. Есть задача: ...

Для натурального числа определить истинность предиката «все цифры в записи числа равны»
Для натурального числа определить истинность предиката «все цифры в записи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru