Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задача, не складывает 3-хзначные числа, нужна помощь в решении проблемы 
:(
    Опции темы
ankatito
Дата 8.1.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.1.2010

Репутация: нет
Всего: нет



Код

Задание такое:
внести элементы матрицы 4*3(слова) таким образом чтобы существовала строка  с максимальной суммой элементов и минимальной суммой элементов.
вывести на экран исходную матрицу
поменять местами строки с максимаотной и минимальной суммой элементов.
вывести на экран преобразованную матрицу.


программа работает если вводят одно- и двух-значные числа. если ввести число больше 100, то программа его не суммирует, просто пропускает.
подскажите как решить данную проблему)))


model small
include io.asm        ; 
.data
      message db 'Vvedite elementi matrizy (12 chisel) (chisla vvodytsya v intervale 0..99) ',10,'$'
    mas dw 4 dup (3 dup(?))
    sum dw 0
    rowmin dw 0    ; будет хранить адрес строки, сумма которой мин.
    rowmax dw 0    ; будет хранить адрес строки, сумма которой макс.
    maxs dw 0    ; будет хранить макс. сумму
    mins dw 0    ; будет хранить мин. сумму

.stack 100h
.code
main:
     mov ax, @data
     mov ds, ax

    lea dx, message        ; в dx адреса переменной message
    mov ah, 9h        ; вывод строки на экран
    int 21h

;//////////////////// ввод элементов массива \\\\\\\\\\\\\\\\\\\\\\\\\\\\

    mov cx,4        
    mov bx,0        
in_mas:            
    push cx        
    mov cx, 3        
    mov si,0        
string:            
    inint mas[bx][si]    
    add si,2        
     loop string ; конец цикла (по столбцам)
    pop cx            
    add bx,6        
     loop in_mas        ; конец цикла (по строкам)

    newline        ; переход на новую строку (пильщиков)

;//////////////////////// вывод матрицы на экран \\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    mov cx,4    
    mov bx,0    
    
stroka: 
    push cx        
    mov sum,0        
    mov si,0        
    mov cx,3        
    mov mins,66000

   stolbez:    
    push bx        
    push si            
    outword mas[bx][si]    
    mov ax,mas[bx][si]    
    add sum,ax        
    pop si
    pop bx
    add si,2    
    mov ah,2
    mov dl,9    
    int 21h
     loop stolbez    
    ; вывод на экран ( 
    mov dl,'('    
    mov ah,2h       
    int 21h    
    outword sum    ; выводим сумму на экран
    ; вывод на экран ) 
    mov dl,')'    
    mov ah,2h       
    int 21h    

    add bx,6    ; bx=bx+6 переходим к следующей строке
    pop cx        
    mov dl, 10    
    int 21h
    mov dl, 13    
    int 21h
    loop stroka ; конец внешнего цикла (по строкам)

;/////////////////////// поиск макс. и мин. сумм \\\\\\\\\\\\\\\\\\\\\\\\

    mov cx,4        
    mov bx,0        
    mov mins,66000    
    
stro: ; внешний цикл (по строкам)
    push cx        
    mov sum,0        
    mov si,0        
    mov cx,3    ;     
   stlb:    ; внутренний цикл (по столбцам)
    push bx        
    push si            
    mov ax,mas[bx][si]    
    add sum,ax        
    pop si
    pop bx
    add si,2        
     loop stlb        
    
    mov ax,sum        
    cmp maxs,ax        
    jb maksi        
    ; >
      cmp mins,ax        
      jb viho        
    ; >
      mov mins,ax        
      mov rowmin,bx    
      jmp viho        ; прыгаем на метку viho 
  maksi:
    mov maxs,ax        
    mov rowmax,bx    
    viho:
    add bx,6    ; bx=bx+6 переходим к следующей строке
    pop cx        ; восстанавливаем сх из стека
    loop stro    

    newline    ; переходим на новую строку (пильщиков)

;////////////////// ОБМЕН СТРОК \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    mov si,0    ; si - счетчик элементов в строке
    mov cx,3    ; сх - счетчик повторений цикла

cyclec:    ;
    mov bx,rowmax                
    mov ax,mas[bx][si]        
    mov bx,rowmin        
    mov dx,mas[bx][si]        
    mov mas[bx][si],ax        
    mov bx,rowmax            
    mov mas[bx][si],dx        
    add si,2            
     loop cyclec            
    
;///////////// ВЫВОД ИЗМЕНЕННОЙ МАТРИЦЫ НА ЭКРАН \\\\\\\\\\\\\\\\\\\\\\\\\
 
    mov cx,4    
    mov bx,0    
    
stroka1: 
    push cx    
    mov sum,0    
    mov si,0    
    mov cx,3    

   stolbez1:        
    push bx        
    push si            
    outword mas[bx][si]    
    mov ax,mas[bx][si]    
    add sum,ax        
    pop si            
    pop bx            
    add si,2        ; si=si+2 переходим к следующему элементу в строке
    mov ah,2
    mov dl,9        
    int 21h
     loop stolbez1    
    
    ; вывод на экран ( 
    mov dl,'('    
    mov ah,2h       
    int 21h    
    outint sum    ; выводим сумму на экран
    ; вывод на экран ) 
    mov dl,')'    
    mov ah,2h       
    int 21h    

    add bx,6    
    pop cx        
    mov dl, 10    
    int 21h
    mov dl, 13    
    int 21h
    loop stroka1 

;////////////////// КОНЕЦ ПРОГРАММЫ \\\\\\\\\\\\\\\\\\\\\\\\\\

    mov ah,1    
    int 21h
                                 
    mov ax, 4C00h
    int 21h

 end main
Код



Код



PM MAIL   Вверх
Игорь1024
Дата 9.1.2011, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

Репутация: нет
Всего: нет



Может из-за 
Код

model small

т.е данные и стек находятся в одном сегменте, код в другом сегменте. Может данные выходят за границы?

Добавлено через 3 минуты и 33 секунды
Хотя нет. Я ошибся. Память ведь сразу резервируется.
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
JAPH
Дата 12.1.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 1
Всего: 23



Может, стоит посмотреть на io.asm, на макрос inint?


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.