[emu8086] Приводится натуральное число n. Вычислите сумму k больших (находящихся слева) цифр - Assembler
Формулировка задачи:
1.Приводится натуральное число n. Вычислите сумму k больших (находящихся слева) цифр.
Решение задачи: «[emu8086] Приводится натуральное число n. Вычислите сумму k больших (находящихся слева) цифр»
textual
Листинг программы
@stack segment para stack db 1024 dup(?) @stack ends @data segment N dw 17826 K dw 3 CrLf db 0Dh, 0Ah, '$' @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc ;инициализация сегментного регистра данных mov ax, @data mov ds, ax ;записываем в стек цифры заданного числа mov ax, [N] mov bx, 10 ;делитель mov cx, 0 ;количество цифр в числе @@While: mov dx, 0 div bx push dx inc cx cmp ax, 0 jnz @@While ;извлекаем цифры из стека ;и если это один из старших K разрядов, ;то вычисляем сумму цифр mov ax, 0 ;сумма цифр mov di, 0 ;номер разряда @@For: pop dx inc di cmp di, [K] ja @@Next add ax, dx @@Next: loop @@For ;вывод результата call Show_AX ;завершение программы mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@Conv push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp @code ends end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д