|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.03.2008, 16:39 | #1 |
Пользователь
Регистрация: 28.02.2008
Сообщений: 13
|
Помогите с циклом
Помогите пожалуйста, написать следующую прогу на ассемблере:
Если число в состоит менее, чем из 3 десятичных цифр, сохранить их сумму, иначе сохранить 0. Попробывал написать, ничего не получилось, как то даже слабо представляю, как сделать чтобы посчиталась сумма цифр в числе. Пордскажите пожалуйста что писать в for и end_if! .MODEL SMALL ;----------Сегмент стека------------ STACKSG SEGMENT PARA STACK 'stack' DB 256 DUP(?) STACKSG ENDS ;----------------------------------- ;----------Сегмент данных----------- DATASG SEGMENT PARA 'data' KOL DW 100 REZ DB ? DATASG ENDS ;---------------------------------- ;----------Сегмент кода------------ CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG, DS:DATASG, SS:STACKSG MAIN PROC FAR PUSH DS ; Подготовка к SUB AX,AX ; возврату в PUSH AX ; ОС MOV AX, DATASG ; Настраиваем DS на MOV DS,AX ; сегмент данных MOV AX,0 MOV CX,KOL ; Кол-во повторов цикла LOOP For: End_if: MAIN ENDP CODESG ENDS END MAIN Спасибо заранее! |
26.03.2008, 20:11 | #2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Вот так можно подсчитать сумму цифр числа.
Код:
|
26.03.2008, 20:36 | #3 |
Пользователь
Регистрация: 28.02.2008
Сообщений: 13
|
Спасибо. Но я так до конца и не понял, считается арифмитическая сумма чисел или же просто считается кол-во цифр в числе?И еще был бы очень признателен,если бы помогли с самим циклом.как имеено написать, чтобы ассемблер понял что надор сравнивать кол-вл цифр с 3.И тут надо использовать for и end_if, или что то еще?Извините за такое большое кол-во вопросов, просто дали задание, ничего не объяснили...
|
26.03.2008, 21:13 | #4 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Код:
Код:
|
|
26.03.2008, 21:30 | #5 |
Пользователь
Регистрация: 28.02.2008
Сообщений: 13
|
Спасибо огромное, у меня получился следующий алгоритм программы.
Код: .MODEL SMALL ;----------Сегмент стека------------ STACKSG SEGMENT PARA STACK 'stack' DB 256 DUP(?) STACKSG ENDS ;----------------------------------- ;----------Сегмент данных----------- DATASG SEGMENT PARA 'data' KOL DW 156 REZ DB ? DATASG ENDS ;---------------------------------- ;----------Сегмент кода------------ CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG, DS:DATASG, SS:STACKSG MAIN PROC FAR PUSH DS ; Подготовка к SUB AX,AX ; возврату в PUSH AX ; ОС MOV AX, DATASG ; Настраиваем DS на MOV DS,AX ; сегмент данных mov ax, kol ; наше число xor dx, dx ; dl - накапливается сумма цифр ; dh - количество цифр mov bl, 10 ; делитель @@loop: div bl ; al - частное ; ah - остаток add dl, ah inc dh xor ah, ah cmp ax, 0 jne @@loop ; теперь dl - сумма цифр числа ; dh - количество цифр For: cmp dh, 3 jb @@below ; здесь >= 3 jnz end_if mov rez, dl End_if: MOV rez, 0 ; Переходим к след. элементу массива MOV REZ,AL ; RET ; Завершение работы MAIN ENDP CODESG ENDS END MAIN Но при попытке сделать tasm filename.asm пишется, что неправильный символ @@below.Скажите пожалуйста что тут не так... |
26.03.2008, 21:36 | #6 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
А что-ж не все скопировал ?
jb @@below - переход на метку. А где описание метки ? |
26.03.2008, 22:24 | #7 |
Пользователь
Регистрация: 28.02.2008
Сообщений: 13
|
Спасибо вроде теперь все понял, все скомпилировалось.Получилось следующие.
Код: Код:
|
26.03.2008, 22:45 | #8 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Похоже ты так и не разобрался.
Код:
; даже если к этому написать правильное условие ; все равно работать не будет. Попробуй выполнить на бумажке ; jnz end_if ; mov rez, dl ; End_if: MOV rez, 0 ; Переходим к след. элементу массива ; Вот этот комментарий непонятный. К какому элементу мы переходим ? ; MOV REZ,AL ; А теперь портим рещультат, да ? ; (все вопросы риторические) Учись пользоваться отладчиком и читай книжки по асму. Удачи. |
27.03.2008, 21:08 | #9 |
Пользователь
Регистрация: 28.02.2008
Сообщений: 13
|
alexBlack
Спасибо большое!!!! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с циклом.. | POPOV | Помощь студентам | 3 | 29.04.2008 18:36 |
Задача с циклом | POPOV | Общие вопросы Delphi | 13 | 01.02.2008 20:33 |
Проблемы с циклом, условием | Иринкаа | Помощь студентам | 13 | 19.11.2007 23:33 |