Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > разбить число по разрядам


Автор: susanin 3.4.2007, 19:41
необходимо указанное в сегменте данных число разбить на разряды..т.е. например число 125-будет 3 разряда 1, 2, 5....как можно это сделать???

Автор: spin2 3.4.2007, 19:51
Делить на 10?

Автор: W4FhLF 4.4.2007, 15:12
Тебе надо узнать кол-во разрядов или разбить число на разряды и записать куда-то?

Автор: susanin 4.4.2007, 22:04
уточняю. мне надо сделать пограммку, которая бы складывала нечетные цифры, из которых состоит число. например 1378-результатом работы программы будет сумма 1+3+7, т.к. они нечетные....загвоздка состоит в том, что я не знаю, как можно выделить из числа каждую цифру и определить ее четночть/нечетность... подскажите какие нибудь идейки....

Автор: Kuvaldis 5.4.2007, 10:03
Код

.MODEL SMALL
 
.DATA
     Num    DW    1378    ; 2-байтовое число   
     Ten     DW    10        ; делитель (в asm нельзя делить на непосредственное значение)

.code 
program: 
       MOV AX,@DATA       
        MOV DS,AX
;--------------         
         MOV  AX,  Num   ; требование команды DIV (делимое должно быть в AX) 

SIGN: NEG  AX      ; ПОЛУЧЕНИЕ НЕОТРИЦАТЕЛЬНОГО ЧИСЛА 
         JS    SIGN        
     
         XOR  CX,  CX;     будем считать сумму нечетных здесь

; делим число на 10 до тех пор,  пока данное число не станет меньше 10

WHILE1:
         CMP  AX, 0            ; если число стало 0,  то выйти из цикла
         JE     ENDWHILE1      
         XOR   DX,  DX        ; обнулить DX (так как DIV делит пару DX: AX на 2-байтовое число Ten)               
          DIV  Ten                ; разделить число на 10              
          ; очередная цифра - как остаток от деления и сидит в dx
         TEST  DX ,  1          ; у любого нечетного числа самый младший бит - в 1,  при помощи test его и проверяем
         jz       next
         add   cx,  dx
next:
         JMP   WHILE1
ENDWHILE1:

;--------------
MOV AX, 4C00H
INT 21H
END program

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)