Tasm

  • Автор темы Cool J
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

Cool J

#1
Доброго времени суток!
На данный момент работаю с Ассемблером
TURBO ASSEMBLER 5.0
Есть некое задание... нужно выполнить в течении сегодняшнего - завтрашнего дня.
Открывал много книг, примеров... написал приблезительный шаблон програмы...
Но вот не удается достичь необходимой цели. Програма практически написаная... верней уже написана - работает но выводит совсем не то что нужно... Очень нужна помощь... Советом либо подсказкой... буду очень рад.

Итак перейду к делу:

Условие задачи таково...
Дано число k (0 < k < 11) и матрица размером 4 x 10. Найти сумы элементов всех ее рядов и столбцов. Найти суму и произведение элементов k-го столбца данной матрицы.

Код:
SEGM segment
assume CS:SEGM, DS:SEGM, ES:SEGM, SS:SEGM
org 100h
Begin:
;************************************** поиск сумм строчек*********************************************
mov si,0  ;si=столбцы в матрице 
mov bx,0  ;bx=строки в матрице
mov cx,4  ;число для внешнего цикла (по строчкам)

external: ;внешний цикл по строчкам
mov al,array[bx][si]		  ;в ax первый элемент матрицы
push cx	;сохранение в стеке счётчика внешнего цикла
mov cx,10 ;число для внутреннего цикла 
mov si,0

iternal:  ;внутренний цикл по строке
inc si	 ;передвижение на следующий элемент в строке
add al,tmp ;подсчет суммы строки
mov tmp,al ;запомнили сумму

loop iternal;цикл по строке cx раз
pop cx	 ;восстанавливаем CX из стека

;вывод на экран суммы н-ой строки
mov ah,02h ;вывод сообщения на экран
mov dl,tmp
add dl,30h ;додаємо до нашої цифри у масві 30h, оскільки, з саме з цього числа в таблиці ASCII кодів, починаютсья цифри
int 21h
mov dl,13 ;перехід на наступну строку, і встановлення курсора на початок строки
mov ah,02h
int 21h
mov dl,10
mov ah,02h
int 21h
;конец вывода на экран

mov tmp,0
add bx,1  ;передвигаемся на следующую строку
loop external		  ;цикл (внешний)
;***********************************теперь поиск сумм столбцов (и К-ой произведение)*********************************************
mov tmp,0 ;обнулиние
mov si,0  ;si=столбцы в матрице
mov bx,0  ;bx=строки в матрице
mov cx,10 ;число для внешнего цикла (по столбцам)

external1: ;внешний цикл по столбцам
mov al,array[bx][si]		  ;в ax первый элемент матрицы
push cx	;сохранение в стеке счётчика внешнего цикла
mov cx,4  ;число для внутреннего цикла (по стобцу)
mov bx,0

iternal1:  ;внутренний цикл по столбцу
add bx,1  ;передвижение на следующий элемент в столбце
add al,tmp ;подсчет суммы столбца
mov tmp,al ;запомнили сумму

mov ax,bx
cmp al,k  ;сравниваем номер столбца с заданным К
jne here  ;если не совпал с искомым, то переход на here
mov ax,0
mov al,array[bx][si]
mul tmp1  ;перемножаем
mov tmp1,ax;сохраняем

here:

loop iternal1;цикл по столбцу cx раз
pop cx	 ;восстанавливаем CX из стека

;вывод на экран суммы н-го столбца
mov ah,02h ;вывод сообщения на экран
mov dl,tmp
add dl,30h ;додаємо до нашої цифри у масві 30h, оскільки, з саме з цього числа в таблиці ASCII кодів, починаютсья цифри
int 21h
mov dl,13 ;перехід на наступну строку, і встановлення курсора на початок строки
mov ah,02h
int 21h
mov dl,10
mov ah,02h
int 21h
;конец вывода на экран

mov tmp,0
inc si	 ;передвигаемся на следующий столбец
loop external1		  ;цикл (внешний)
;*******************************************************************************
*****************************************
;вывод умножения к-того столбца
mov ah,02h ;вывод сообщения на экран
mov dx,tmp1
add dl,30h ;додаємо до нашої цифри у масві 30h, оскільки, з саме з цього числа в таблиці ASCII кодів, починаютсья цифри
int 21h
;конец выода на экран

mov ax,4c00h; ф-ця для коректного виходу, і для коректноого завершення роботи
int 21h
;data
array db 1,2,3,4,5,6,7,8,9,1,1,2,3,4,5,6,7,8,9,1,1,2,3,4,5,6,7,8,9,1,1,2,3,4,5,6,7,8,9,1;это массив 10 на 4, заполнял цыфрами что бы не было переполнения
k db 3	 ;номер заданного столбца
tmp db 0	;temp переменная для суммы 
tmp1 dw 1  ;temp переменная для произведения

SEGM ends
end Begin
(Коментарии к строком на Русско-Украинском, сам с Украины... за это прошу прощния)

После компеляции и линковки... запуска exe-шки:
вывело на екран такое
Код:
0
0
0
0
6
6
6
6
6
6
6
6
6
6
0
Но увидив масив вы поймете что полученый результат не соответсвует действительности...
Ех... очень нужно отладить эту програму...

Ответы давайте здесь, либо в ICQ 304719012
Попробую отблагодарить того кто поможет.

С уважением Виталий.
 
Статус
Закрыто для дальнейших ответов.