Ввод матрицы и вывод ее побочной диагонали - Assembler

Узнай цену своей работы

Формулировка задачи:

Написать exe-программу, в которой нужно ввести двухмерный массив 4х4. И вывести с него побочную диагональ.

Решение задачи: «Ввод матрицы и вывод ее побочной диагонали»

textual
Листинг программы
model tiny 
.code
ORG 100h
begin: 
JMP start
 
start:
   MOV   AH,9          ; запрос на ввод..
   MOV   DX, offset mess0                                           
   INT   21h
 
   MOV   DI, offset buff       ; в DI будем писать STOSB'ом       
   MOV   BX,4          ; счётчик строк
   MOV   DX,4          ; счётчик чисел в строке
create:         ;<=====; начинаем ввод и сохранение ================//
   MOV   CX,2          ; ограничим число 2-мя знаками
   DEC   DX            ; уменьшаем счётчик чисел
@1:
   MOV   AH,1          ; ввод с эхо..
   INT   21h
   STOSB               ; сохраняем первый символ в DI
   LOOP  @1            ; ..следом второй.
   MOV   AL,' '        ; пробел/разделитель
   INT   29h
   STOSB               ; его тоже в DI..
   OR    DX,DX         ; последнее число в строке?
   JNZ   create        ; нет - заполняем строку дальше
   MOV   AH,9          ; строка закончилась..
   MOV   DX,offset crlf       ; новая строка!                       
   INT   21h
   DEC   BX            ; уменьшаем счётчик строк
   OR    BX,BX         ; последняя строка?
   JZ    next          ; да - выходим из цикла ввода
   MOV   DX,4          ; восстанавливаем кол-во чисел в строке
   JMP   create        ; заполняем следующую строку массива
 
next:           ;<=====; выводим результат на экран ================//
   MOV   AH,9          ; мессага..
   MOV   DX, offset mess1                                                
   INT   21h
 
   MOV   CX,4          ; сколько пар цифр выводить
   MOV   SI, offset buff       ; источник - буфер                         
print:
   LODSB               ; читаем первый символ
   INT   29h           ; выводим его на экран
   LODSB               ; второй символ..
   INT   29h
   LODSB               ; прихватим с собой пробел
   INT   29h
   ADD   SI,12         ; передвинем указатель на 4 триады символов
   LOOP  print         ; мотаем цикл пока СХ > 0
 
exit:                  ; выход!
   XOR   AX,AX
   INT   16h
   INT   20h
 
ret 
 
mess0  DB  'CREATE ARRAY...',13,10
       DB  '====================',13,10,'$'
mess1  DB  '====================',13,10
       DB  'RESULT: $'
crlf   DB  13,10,'$'
buff   DB  80 DUP(0)   ; буфер для выхлопа
end begin

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5