@Krimer_infsec

Не работает код, что делать?

Всех приветствую, мне необходимо найти сумму элементов матрицы, которые находятся над её главной диагонали. Но, приведённый ниже код ничего не выводит в консоли. Ассемблер: TASM.
.model small
.data
matrix db 1, 2, 3, 4, 5, 6, 7, 8, 9

rows equ 3 ; Количество строк
cols equ 3 ; Количество столбцов

.code
start:
    mov ax, @data
    mov ds, ax

    xor cx, cx ; Инициализируем счетчик суммы

    ; Вложенные циклы для перебора элементов матрицы
    mov si, 0 ; Индекс строки
outerLoop:
    mov di, si ; Индекс столбца
innerLoop:
    ; Сравниваем позицию элемента с главной диагональю
    cmp di, si
    jle skipAdd
    ; Если элемент выше диагонали, сохраняем его индекс в регистре bx
	; Если элемент выше диагонали, сохраняем его индекс в регистре bx
	mov bx, si           ; Загружаем индекс строки в bx
	mov al, cols
	mul al               ; Умножаем индекс строки (bx) на количество столбцов (cols)
	add bx, di           ; Добавляем индекс столбца (di) для получения адреса элемента
	mov al, [matrix + bx] ; Загружаем значение элемента в регистр al
	add cl, al           ; Добавляем значение элемента к сумме
skipAdd:
    inc di
    cmp di, cols
    jl innerLoop
    inc si
    cmp si, rows
    jl outerLoop

    ; Вывод суммы элементов выше главной диагонали
    mov ah, 2
    mov dl, cl
    int 21h

    mov ah, 4Ch
    int 21h

end start
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
; Вывод суммы элементов выше главной диагонали
    mov ah, 2
    mov dl, cl
    int 21h

функция 2 прерывания int21h выводит один символ с кодом в dl. Если код суммирования работает верно, это 2 + 3 + 6 = 11. Символ с кодом 11 -- непечатный, и, даже если бы он был печатным, подозреваю, что это не то, что тебе было нужно. В общем случае нужно переводить полученную сумму в строку цифр и эту строку печатать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы