Вариант 1
Пользователь вводит строку, содержащую цифры и другие символы. Нужно найти сумму цифр в этой строке и вывести на экран в виде символа ASCII.
Дополнительно: вывести сумму на экран в виде числа.
Другие языки программирования и технологии
Помогите написать задание по Ассемблеру:
> вывести на экран в виде символа ASCII
А если сумма цифр окажется меньше 32 или больше 255?
.model small
.stack 100h
.data
Prompt db 'Введите строку: ', 13, 10, 36
Result1 db 13, 10, 'ASCII символ: $'
Message1 db 'управляющий код$'
Message2 db 'код больше 255$'
SummMess db 13, 10, 'Сумма: $'
QuitMess db 13, 10, 10, 'Для завершения работы нажмите любую клавишу... $'
String db 80, ?,80 dup (?)
.code
N173270056:
mov ax, @data
mov ds, ax
mov dx, offset Prompt
mov ah, 9
int 21h
mov dx, offset String
inc ah
int 21h
dec ah
mov dx, offset Result1
int 21h
xor bx, bx
mov cl, String + 1
mov ch, bl
jcxz Empty
mov ah, bl
mov si, offset String + 2
Loop1:
lodsb
sub al, 30h
jb Next
cmp al, 9
ja Next
add bx, ax
Next:
loop Loop1
Empty:
mov dx, offset Message1
mov ah, 9
cmp bx, 32
jb Print_Res
mov dx, offset Message2
test bh, bh
jnz Print_Res
mov dl, bl
mov ah, 2
Print_Res:
int 21h
mov ah, 9
mov dx, offset SummMess
int 21h
mov ax, bx
xor cx, cx
mov bx, 10
Prepare:
xor dx, dx
div bx
or dl, 30h
push dx
inc cx
test ax, ax
jnz Prepare
mov ah, 2
Print_Num:
pop dx
int 21h
loop Print_Num
mov ah, 9
mov dx, offset QuitMess
int 21h
mov ax, 0C08h
int 21h
mov ah, 4Ch
int 21h
end N173270056

А если сумма цифр окажется меньше 32 или больше 255?
.model small
.stack 100h
.data
Prompt db 'Введите строку: ', 13, 10, 36
Result1 db 13, 10, 'ASCII символ: $'
Message1 db 'управляющий код$'
Message2 db 'код больше 255$'
SummMess db 13, 10, 'Сумма: $'
QuitMess db 13, 10, 10, 'Для завершения работы нажмите любую клавишу... $'
String db 80, ?,80 dup (?)
.code
N173270056:
mov ax, @data
mov ds, ax
mov dx, offset Prompt
mov ah, 9
int 21h
mov dx, offset String
inc ah
int 21h
dec ah
mov dx, offset Result1
int 21h
xor bx, bx
mov cl, String + 1
mov ch, bl
jcxz Empty
mov ah, bl
mov si, offset String + 2
Loop1:
lodsb
sub al, 30h
jb Next
cmp al, 9
ja Next
add bx, ax
Next:
loop Loop1
Empty:
mov dx, offset Message1
mov ah, 9
cmp bx, 32
jb Print_Res
mov dx, offset Message2
test bh, bh
jnz Print_Res
mov dl, bl
mov ah, 2
Print_Res:
int 21h
mov ah, 9
mov dx, offset SummMess
int 21h
mov ax, bx
xor cx, cx
mov bx, 10
Prepare:
xor dx, dx
div bx
or dl, 30h
push dx
inc cx
test ax, ax
jnz Prepare
mov ah, 2
Print_Num:
pop dx
int 21h
loop Print_Num
mov ah, 9
mov dx, offset QuitMess
int 21h
mov ax, 0C08h
int 21h
mov ah, 4Ch
int 21h
end N173270056

Эрмек Аракеев
Большое вам спасибо! Выручили) Было бы замечательно с вами поговорить как нибудь, например:... хотя бы сообщениями. Еще раз выражаю огромную благодарность за помощь!
Похожие вопросы
- Помогите написать задание по Ассемблеру (6 пример, задания для примера выше)
- Помогите написать программу на ассемблере, завтра экзамен а я в нём совсем не шарю.
- помогите написать программы в ассемблере
- срочно помогите написать программу на ассемблере вычисляющую R. R=x2+y2, где x=a+b-c, y=b*c-a. a,b,c вводятся с клавы
- Помогите написать программу на ассемблере по условию
- Помогите написать программу на Ассемблере
- Помогите написать небольшую программу на ассемблере (TASM). Подробности внутри.
- Помогите с заданием по написанию программы на языке ассемблер, вычисляющую значение переменной R.
- Люди, которые хоть немного разбираются в ассемблере, помогите написать программу)
- Помогите написать на ассемблере програму для вычисления виражения y=(c-(d/2)+33 )/(2*a*a-1). c=5,d=6,a=3.