Код | .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
|
|