Возвести в квадрат все элементы массива - Assembler
Формулировка задачи:
возвести в квадрат все элементы массива от 0 до 10.
это программа, как я понимаю, должна брать исходный массив (0 1 2 3 4 5 6 7 8 9 10), и возводить каждый элемент этого массива в квадрат в отдельности, а потом выводить получившийся массив, так? покажите код пожалуйста:
Решение задачи: «Возвести в квадрат все элементы массива»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment N dw 10 Array dw 67,-39, 74,-13,-28, 50,-71,-84, 7, 20 MsgBefore db 'Before: ', 0Dh, 0Ah, '$' MsgAfter db 'After: ', 0Dh, 0Ah, '$' CrLf db 0Dh, 0Ah, '$' _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax ;вывод исходного массива lea dx, [Array] mov cx, [N] call ShowArray mov ah, 09h lea dx, [CrLf] int 21h ;возведение всех элементов массива в квадрат mov cx, [N] lea si, [Array] push es mov ax, ds mov es, ax lea di, [Array] cld @ForI: lodsw imul ax stosw loop @ForI pop es ;вывод полученного массива lea dx, [Array] mov cx, [N] call ShowArray mov ah, 09h lea dx, [CrLf] int 21h ;завершение программы 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 ;Вывод массива слов (word) ;cx - количество выводимых элементов ;ds:dx - адрес массива слов ShowArray proc push ax push bx push cx push dx push si push di jcxz @@Exit ;если массив пустой - завершить mov si, 1 ;индекс элемента массива mov di, dx ;адрес текущего элемента массива @@ForI: mov ax, [di] call Show_AX mov ah, 02h mov dl, ' ' int 21h ;переход к следующему элементу inc si add di, 2 loop @@ForI @@Exit: pop di pop si pop dx pop cx pop bx pop ax ret ShowArray endp _TEXT ends end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д