Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2016, 19:34   #1
bobtb
Новичок
Джуниор
 
Регистрация: 03.12.2015
Сообщений: 2
Восклицание Сумма делителей числа TASM

Добрый вечер!

Задача такова: Вычислить сумму делителей введённого числа и вывести на экран: равна ли сумма самому числу.
Для примера: 6 и 28 должны выдать, что сумма их делителей равна самому числу.

Заранее спасибо!!!
Вот мой каркас (считывание числа):

Код:
lab3 segment
assume cs:lab3, ds:lab3, es:lab3, ss:lab3
org 100h
begin: jmp main
	mes1 db 'Ravno'
	mes2 db 'Ne ravno'
	a	db	?
	b	db	?
	
	cit1 label byte
	max1 db 6
	real1 db ?
	date1 db 6 dup (0)
	
	cit0 label byte
	max0 db 1
	real0 db ?
	date0 db 0
	
	mes0  db 0Ah,0Dh,'$'
	mes3 db 'Vvedite a: $'
	
	ASCII_num proc
	xor ax,ax
	xor cx,cx
	mov cl,real1
	mov si,offset date1
	xor bx,bx
	mov bl,10
	m_p1:
		xor dx,dx
		push cx
		mov cl,[si]
		sub cl,30h
		mul bx
		add ax,cx
		inc si
		pop cx
	loop m_p1
	ret
ASCII_num endp
	
main:
;a
	mov ah,9 
	lea dx,mes3
	int 21h
	
	mov ah,0Ah
	lea dx,cit1
	int 21h
	
	call ASCII_num
	mov a,al
;/a
	
	mov ah,9
	lea dx,mes0
	int 21h
	
	;если верно
	mov ax,62002 
	mov number,ax 
	mov bx,10 
	mov cx,0 

;ГЛАВНЫЙ КОД ЦИКЛА (СУММА ДЕЛИТЕЛЕЙ И СРАВНЕНИЕ С ЧИСЛОМ)
;.....
;/	
	;вывод
	mov ah,0Ah
	lea dx,cit0
	int 21h
	
	ret
	lab3 ends
	end begin
Мне помогли и сделали вот такую программу, но она написана другим методом, который я не понимаю вообще, комментарии писал сам. Возможно кто-то поймёт эту программу и сможет переделать её под мой каркас, желательно с комментариями. Проблема - при вводе числа 6 показывает правильно,но при 28 и выше считает не правильно.

Код:
model tiny
.code
;начало сегмента кода
org 100h
begin:
    mov ah,9
    lea dx,mess1 ;вызов строки
    int 21h
    call chislo ;вызов процедуры
	
    mov cx,di
    mov ax,di
    xor bx,bx
    dec cx ;cx=cx-1
p1: xor dx,dx
    div cx
    or  dx,dx
    jnz p2
    add bx,cx
p2: loop    p1
    lea dx,mess2
    cmp bx,di
    jnz p3
    lea dx,mess3
p3: mov ah,9
    int 21h
    ret
	
mess1 db 10,13,'Vvedite chislo:$'
mess2 db 10,13,'Summa delitelei ne ravna vvedeonomu chislu$'
mess3 db 10,13,'Summa delitelei ravna vvedeonomu chislu$'

chislo: mov si,10
    xor di,di
i01:    xor ax,ax
    int 16h
    cmp al,13
    jz  i02
    cmp al,'0'
    jb  i01
    cmp al,'9'
    ja  i01
    int 29h
    and ax,0fh
    xchg    ax,di
    xor dx,dx
    mul si
    add di,ax
    jmp i01
i02:    ret
    end begin

Последний раз редактировалось bobtb; 29.05.2016 в 20:45.
bobtb вне форума Ответить с цитированием
Старый 29.05.2016, 20:30   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от bobtb Посмотреть сообщение
Задача такова: Вычислить сумму делителей введённого числа
Для примера: 6,28 должны выдать, что сумма их делителей равна самому числу.
Не понял, какое из этих чисел является "введённым числом"?
28 это сотая, или второе число? Переформулируй вопрос.
FASM понимаешь или именно на тасме надо?
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 29.05.2016, 20:43   #3
bobtb
Новичок
Джуниор
 
Регистрация: 03.12.2015
Сообщений: 2
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Не понял, какое из этих чисел является "введённым числом"?
28 это сотая, или второе число? Переформулируй вопрос.
FASM понимаешь или именно на тасме надо?
эти числа для примера, чтобы не искали какие числа имеют сумму делителей равной самому числу.

короче говоря, при вводе 10 - должно вывести нет, при вводе 6 должно ввести да, 28 это второечисло

я тасм еле понимаю, фасм тем более
bobtb вне форума Ответить с цитированием
Старый 29.05.2016, 21:06   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от bobtb Посмотреть сообщение
я тасм еле понимаю
..я тоже
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить, больше ли сумма простых делителей числа М, произведения составных делителей числа N. Radmir. v Помощь студентам 5 10.11.2014 22:23
наибольшая сумма делителей Олег112 Помощь студентам 1 08.11.2012 23:32
Сумма делителей каждого числа последовательности zhannabs Помощь студентам 3 13.01.2011 04:59
Макс сумма делителей Bek-Z Помощь студентам 2 24.12.2010 20:51
Сумма простых делителей Lion_paint Паскаль, Turbo Pascal, PascalABC.NET 0 05.05.2009 19:28