Задать массив символов - Assembler
Формулировка задачи:
Решение задачи: «Задать массив символов»
.model small .286 .data array db 1,2,3,4,5,6,7,8,9,"$" ;инициализируем массив. message db '' string db 10 dup ('0'),'$' S db 091h, '$' U db 093h, '$' M db 08Ch, '$' A db 080h, '$' Q db 000h, '$' I db 088h, '$' V db 082h, '$' R db 03Dh, '$' .stack 100h .code start: mov ax,@data mov ds,ax mov ax,3; чистим экран int 10h xor ax,ax xor bx,bx mov si,offset array ;загружаем в ESI начало массива again: lodsb cmp al,"$" ;AL равен нулю? jz sagain ;переходим к again, если AL не О ;mov al,[esi] ;загружаем в AL элемент массива ;inc esi ;перемещаем указатель на след. элемент add bx,ax ;ВХ = ВХ + АХ jmp again sagain: mov si,offset string+9 ; в конец строки mov ax,bx mov bl,10 a1: div bl add [si],ah ; остаток в строку dec si ; двигаемся к началу строки mov ah,0 test ax,ax ; делить больше нечего? jnz a1 ; тогда на выход mov dx,offset S ; выводим результат на экран mov ah,9 int 21h mov dx,offset U mov ah,9 int 21h mov dx,offset M mov ah,9 int 21h mov dx,offset M mov ah,9 int 21h mov dx,offset A mov ah,9 int 21h mov dx,offset Q mov ah,9 int 21h mov dx,offset M mov ah,9 int 21h mov dx,offset A mov ah,9 int 21h mov dx,offset S mov ah,9 int 21h mov dx,offset S mov ah,9 int 21h mov dx,offset I mov ah,9 int 21h mov dx,offset V mov ah,9 int 21h mov dx,offset A mov ah,9 int 21h mov dx,offset R mov ah,9 int 21h mov dx,offset message mov ah,9 int 21h mov ah,0 ;ждем пока не нажмут на клавиатуру int 16h mov ah,4Ch ; выходим из программы int 21h end start
Объяснение кода листинга программы
Код разделён на два логических блока: инициализация данных и основной цикл. В начальной части кода подключается библиотека для работы с клавиатурой и экраном (int 10h), инициализируется стек (pusha), а также задаётся начальный адрес массива в регистре ESI. Основной цикл содержит условие для цикла, который выполняется, пока в AL не станет равным нулю, после чего выполняется переход на другой участок кода. В данном случае это означает, что мы достигли конца строки. После этого выполняется обработка символа, полученного из массива: он добавляется в строку, после чего увеличивается указатель на следующий символ в строке. После выполнения основного цикла выполняется обработка символов, полученных из массива: они выводятся на экран с помощью функции int 21h, которая выводит символ на экран. В конце кода выполняется выход из программы с помощью функции int 21h.