
Бывалый

Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле
Репутация: нет Всего: 3
|
| Код | .model small .stack 256h .data ;начало сегмента данных n dw 3 m dw 3 temp db 0 mes_in db 0ah, 0dh, 'Vvedi elementy matricy bez probelov i bez "enter": $'; mes_out db 0ah, 0dh, 'Vvedena matrica: $' mes_eof db 0ah, 0dh, 'eof$' sdvig_str db 0ah, 0dh, ' $' probel db ' $' mat db 3 dup (3 dup (?)) ;резервируем память под массив размером 3*3 ;байт _mat db 3 dup (3 dup (?)) ;резервируем память под массив размером 3*3 .code ;начало сегмета кода main: mov ax, @data ;связываем регистр ds mov ds, ax ;с сегметом данных через регистр ax xor ax, ax ;очищаем ax mov cx, 3 ;устанавливаем счетчик внешнего цикла (строки) xor bx, bx ;bx == строки == i xor si, si ;si == столбцы == j mov ah, 09h ;09h - вывод строки на экран lea dx, mes_in ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС external_in: push cx ;в стек счетчик внешнего цикла mov cx, 3 mov si, 0 internal_in: mov ah, 01h ;запросим ввод с клавы int 21h ;вызов прерывания ДОС mov mat[bx][si], al ;заносим в матрицу inc si ;типа j++ :-) loop internal_in next_in: pop cx ;обновляем cx add bx, 3 ;смещение на новую строку loop external_in ;все сначала ;Вывод матрицы mat mov ah, 09h ;09h - вывод строки на экран lea dx, mes_out ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС mov cx, 3 ;устанавливаем счетчик внешнего цикла (строки) xor bx, bx ;bx == строки == i xor si, si ;si == столбцы == j external_out: mov ah, 09h ;09h - вывод строки на экран lea dx, sdvig_str ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС push cx ;в стек счетчик внешнего цикла mov cx, 3 mov si, 0 internal_out: mov ah, 02h ;02h - вывод символа на экран mov dl, mat[bx][si] ;загружаем выводимый символ int 21h mov ah, 09h ;09h - вывод строки на экран lea dx, probel ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС inc si ;типа j++ :-) loop internal_out next_out: pop cx ;обновляем cx add bx, 3 ;смещение на новую строку loop external_out ;все сначала
;Заносим транспонированный вариант матрицы mat в _mat mov cx,m ;заносим в сх значение м=3 xor si,si ;обнуляем si m1: push cx ;заносим сх в стек, чтобы не потерять значение mov cx,n ;заносим в сх n=3 xor di,di ; обнуляем di m2: mov ax,n ;заносим в ах n=3 mul si ;умножаем ах на si add ax,di ;складываем ax и di, получаем смещение mov bx,ax ;переписываем значение ах в bx mov al,mat[bx] ;записываем значение элемента со смещением bx ; в al mov temp,al ;запоминаем элемент mov ax,m ;заносим в ах m=3 mul di ;умножаем ах на di add ax,si ;складываем ax и si, получаем смещение mov bx,ax ;переписываем значение ах в bx mov al,temp ;пишем в al из temp значение текущего эл-та ;матрицы mov _mat[bx],al ;пишем значение тек. Эл. «транспонированный ;массив» inc di ;инкремент di loop m2 ;переход к метке m2 inc si ;инкремент di pop cx ;достаем из стека cx loop m1 ;переход к метке m1
;Вывод матрицы _mat
mov ah, 09h ;09h - вывод строки на экран lea dx, mes_out ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС mov cx, 3 ;устанавливаем счетчик внешнего цикла (строки) xor bx, bx ;bx == строки == i xor si, si ;si == столбцы == j external: mov ah, 09h ;09h - вывод строки на экран lea dx, sdvig_str ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС push cx ;в стек счетчик внешнего цикла mov cx, 3 mov si, 0 internal: mov ah, 02h ;02h - вывод символа на экран mov dl, _mat[bx][si] ;загружаем выводимый символ int 21h mov ah, 09h ;09h - вывод строки на экран lea dx, probel ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС inc si ;типа j++ :-) loop internal next: pop cx ;обновляем cx add bx, 3 ;смещение на новую строку loop external ;все сначала
exit: mov ah, 09h ;09h - вывод строки на экран lea dx, mes_eof ;в dx копируем адрес mes int 21h ;вызов прерывания ДОС mov ax, 4c00h ;стандартное int 21h ;завершение end main ;программы
|
транспонирует матрицу Это сообщение отредактировал(а) Doc_d0s - 9.3.2006, 16:15
--------------------
Админ- это вождь Apache'й :)
|