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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2012, 00:03   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Итоговая задача для практики

Здравствуйте! Нужно написать программу , которая вводит с клавиатуры определенное колличество цифр, а на экран выводит сумму наибольшей цифры, и цифру, стоящую на пятом месте в введенной строке, заранее спасибо)) вот мой вариант(прошу заметить, что других команд мы не используем****). Да, я конечно на асм программировать не умею, но что то пытаюсь сделать, кто знает как решить, помогите пожалуйста)

code segment para public 'code'
assume cs:code,ds:code,ss:code,es:code
org 100h
mov dx,code
mov ds,dx
mov ss,dx
mov es,dx

jmp m1000
np1 db 'BBedite 4isla$'
m1000:mov ah, 09h
lea dx, np1
int 21h


mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h

jmp m100
par1 label byte
max1 db 100
rd1 db ?
str1 db 101 dup(?)
m100:mov ah,10
lea dx,par1
int 21h


mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h

lea si,str1
mov cl,5
m1:
mov dx,[si]
dec si
loop m1 ; пытаюсь найти пятый элемент в строке

mov bx,dx
lea di,str1

cmp di,9
je m2
cmp di,8
je m3
cmp di,7
je m4
cmp di,6
je m5
cmp di,5
je m6
cmp di,4
je m7
cmp di,3
je m8
cmp di,2
je m9
cmp di,1
je m10
cmp di,0
je m11

m2: add bx,9
jmp m125
m3:add bx,8
jmp m125
m4:add bx,7
jmp m125
m5: add bx,6
jmp m125
m6:add bx,5
jmp m125
m7:add bx,4
jmp m125
m8:add bx,3
jmp m125
m9:add bx,2
jmp m125
m10:add bx,1
jmp m125
m11:add bx,0
m125:mov ah,2
mov dx,bx
int 21h


mov ah,4ch
int 21h
code ends
end
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 21.03.2012, 14:32   #2
zhan313
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 44
По умолчанию

Код:
code segment para public 'code'
assume cs:code,ds:code,ss:code,es:code
org 100h
start:
jmp m1000

np1 db 'BBedite 4isla$'
max1 db 100
rd1 db ?
str1 db 101 dup(?)

m1000:
mov ah, 09h
lea dx, np1
int 21h


mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h

mov ah,10
lea dx,max1
int 21h


mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h

lea si,str1 ; ищем наибольшую цифру
mov ch,0
mov cl,rd1
mov dl,0
m1:
cmp dl,[si]
ja m2
mov dl,[si]
m2:
inc si
loop m1

lea si,str1
add dl,[si+4] ; наибольшая+5-я цифра
sub dl,60h ; переводим в число
mov dh,dl
cmp dh,10 ; сумма >= 10
jb m3
sub dh,10 ; выделяем единицы из суммы
mov dl,'1' ; выводим 1 (сумма не превышает 18)
int 21h
m3:
mov dl,dh ; выводим единицы суммы
add dl,'0' ; преобразуем в символ
int 21h


mov ah,4ch
int 21h
code ends
end start
zhan313 вне форума Ответить с цитированием
Старый 21.03.2012, 21:25   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

спасибо)))
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 22.03.2012, 03:07   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию объясните алгоритм нахождения максимального элемента)

как это работает)))

Код:
lea si,str1 ; ищем наибольшую цифру
mov ch,0
mov cl,rd1
mov dl,0
m1:
cmp dl,[si]
ja m2
mov dl,[si]
m2:
inc si
loop m1
а тут по-идее должен получиться просто вывод всей строки, ну как бы ввел и вывел сразу))) объясни, пожалуйста, если не трудно подробнее))

sub dl,60h ; переводим в число

заранее спасибо)) просто хотел бы разобряться, чтобы научиться программировать на ассемблере)



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
from dark to light)

Последний раз редактировалось Serge_Bliznykov; 22.03.2012 в 08:31.
Алексей_2012 вне форума Ответить с цитированием
Старый 22.03.2012, 08:30   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
lea si,str1 ;получаем смещение массива
mov ch,0
mov cl,rd1 ;помещаем в cx длину массива (сделано в два этапа, поскольку 8-ми битная переменная в 16-битный регистр так просто не помещается)
mov dl,0 ; присваиваем  максимальному значению (которое будет в dl) 0
m1:
cmp dl,[si] ;сравниваем максимальное значение с кодом текущего элемента в массиве
ja m2 ;если максимальное значение больше или равно элементу, то переходим на m2
mov dl,[si] ;присваиваем максимальное значение текущему элементу
m2:
inc si ;переходим на следующий элемент
loop m1 ;циклически переходим на m1 пока элементы не закончатся.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 22.03.2012, 11:39   #6
zhan313
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 44
По умолчанию

sub dl,60h
Так как данные хранятся в ascii коде, то символы нужно перевести в число.
Например 2+2 будет 32h+32h в символьном представлении, т.е. чтобы получить число нужно из суммы вычесть 60h
zhan313 вне форума Ответить с цитированием
Старый 22.03.2012, 12:15   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
sub dl,60h ; переводим в число
лучше было написать так:
Код:
sub dl, '0'
хотя для программы это никакой разницы не представляет.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 23.03.2012, 05:06   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от zhan313
sub dl,60h ; переводим в число
Вообще-то ASCII-код 60h(96) соответствует символу "апостроф" (`), код "нуля" =30h(48)

Последний раз редактировалось Mikl___; 23.03.2012 в 06:03.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для практики likos18 Паскаль, Turbo Pascal, PascalABC.NET 6 09.12.2011 20:42
Итоговая таблица Abzim Microsoft Office Excel 4 17.11.2011 22:31
Двумерный массив(для практики надо) thierryandrey Помощь студентам 2 06.06.2011 08:22
Идеи для практики Ri}|{a9 Помощь студентам 1 29.03.2011 23:04
Rave Reports итоговая сумма поля goldragon Компоненты Delphi 0 21.05.2010 13:16