Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2010, 23:58   #11
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

тогда уж
Код:
mov bl, byte ptr a[di]
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 19.04.2010, 13:41   #12
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Я же пояснил:
Цитата:
bcontents: ; содержимое буфера располагается за концом СОМ-файла
А у тебя exe-файл! Правильный способ у Goodwin98'а, а не у тебя
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 19.04.2010 в 13:45. Причина: бла-бла-бла
MalCer вне форума Ответить с цитированием
Старый 20.04.2010, 22:30   #13
sig_GB
Пользователь
 
Регистрация: 23.02.2010
Сообщений: 69
По умолчанию

Парни, подскажите, откуда баги растут:

1) работает верно только, если на вводе 2 (т.е. 2-ая строка), а в остальных случаях - уходит за 2-3 тысячи результат.

2) когда в конце результат выведен, жмём клавишу (я так понимаю любую) и начинаются свистопляски на экране - либо выводится я так понимаю весь стек, либо просто курсор бегает до бесконечности.
screen1.PNG
screen2.PNG
Код:
;  Дана матрица размерностью 7х5  
;Найти сумму элементов n-ой строки
;=================================
masm
model small
.data
;======= Матрица 7х5 ========
array dw 1,1,1,1,1,1,1
      dw 2,2,2,2,2,2,2
      dw 3,3,3,3,3,3,3
      dw 4,4,4,4,4,4,4
      dw 5,5,5,5,5,5,5,'$'
;Данные для работы 
mes0 db "=========== Matrix 7 on 5 ===========",0Dh,0Ah,'$'
mes1 db "Please, write number of stripe: $"
mes2 db "Result: $"
crlf db 0Dh,0Ah,'$'
size_elem=2
Sum dw 0

buf db 16 dup (?)
buf_end db '$'
buffer db 6 	 ; максимальный размер буфера ввода 
blength db ?	 ; размер буфера после считывания 
a dw 0		 ; содержимое буфера 
stack 256h
========= ... ========
Код:
     push ax                  ; записали в АХ номер строки и в стек его
;///=> Ищем сумму элементов n-ой строки матрицы 
     xor bx,bx                ; думал баги из-за этого - решил зачистить !?!?!
     xor si,si

     mov si,0		; si-столбцы в матрице 
     pop ax
     inc ax
     mov bx,ax		; bx-строки в матрице 
     push ax
     mov ax,7
     imul bx,ax
     dec bx
     mov cx,6
 iternal2:		;ВНУТРЕННИЙ ЦИКЛ по строкам 
      mov ax,array[bx][si]; в AX помещен очередной элемент матрицы 
      add Sum,ax
      add si,size_elem
      loop iternal2	; -> ВНУТРЕННИЙ ЦИКЛ
;///=> Вывод значения суммы на экран 
     mov dx,offset mes2
     mov ah,9
     int 21h
    
     xor ax,ax
     mov ax,Sum
     mov bx,10
     xor di,di
l1: 
     xor dx,dx
     div bx
     add dl,030h
     dec di
     mov buf_end[di],dl
     cmp ax,00h
     jnz l1
     lea dx,buf_end[di] ;смещение [buf_end+DI] загружается в регистр DX
     mov ah,09h
     int 21h
e1:
     mov ah,0
     int 16h
;EXIT
     int 20
     ret 
end start
Помог? Нажми на <Весы> слева.
С++, Pascal, Assembler 386 - под заказ.

Последний раз редактировалось sig_GB; 21.04.2010 в 00:30. Причина: добавил скриншот
sig_GB вне форума Ответить с цитированием
Старый 21.04.2010, 00:27   #14
sig_GB
Пользователь
 
Регистрация: 23.02.2010
Сообщений: 69
По умолчанию

накидал аналогию на паскале, нашел ошибку - надо АХ уменьшать перед PUSH на единицу. Но от этого код АСМа стал ещё больше глючить. Где я ошибаюсь!?!?
Рабочий код
Цитата:
Write(#13#10,'Please, write number of stripe: '); Readln(ax); dec(ax);
{;data}
Sum:=0;
si:=0; bx:=ax; ax:=7; bx:=bx*ax; bx:=bx+1; cx:=7;
{;program}
Repeat ax:=mas[bx+si]; Sum:=Sum+ax; si:=si+size_elem; dec(cx) until cx=0;
Writeln('Result = ',Sum);
Помог? Нажми на <Весы> слева.
С++, Pascal, Assembler 386 - под заказ.

Последний раз редактировалось sig_GB; 21.04.2010 в 00:31.
sig_GB вне форума Ответить с цитированием
Старый 21.04.2010, 19:57   #15
sig_GB
Пользователь
 
Регистрация: 23.02.2010
Сообщений: 69
По умолчанию

ошибка банальная - передавал в ВХ (адрес начальный матрицы) 0000. Считал, раз она (матрица-массив) описана вначале => и адрес у неё 0000.))))
===
так не работает...Хм.
Цитата:
mov ax,7
imul bx,ax
inc bx
add bx,array
mov cx,7
Помог? Нажми на <Весы> слева.
С++, Pascal, Assembler 386 - под заказ.
sig_GB вне форума Ответить с цитированием
Старый 21.04.2010, 20:29   #16
sig_GB
Пользователь
 
Регистрация: 23.02.2010
Сообщений: 69
По умолчанию

Вопрос исчерпан. Верный код найден. Ехху!
Код:
     dec ax
     push ax
;///=> Ищем сумму элементов n-ой строки матрицы 
     mov si,0		; si-столбцы в матрице 
     xor ax,ax
     pop ax
     mov bx,ax		; bx-строки в матрице 
     push ax
     mov ax,7
     imul bx,ax
     imul bx,size_elem
     mov cx,7
 iternal2:		;ВНУТРЕННИЙ ЦИКЛ по строкам 
      mov ax,array[bx][si]; в AX помещен очередной элемент матрицы 
      add Sum,ax
      add si,size_elem
      loop iternal2	; -> ВНУТРЕННИЙ ЦИКЛ
;///=> Вывод значения суммы на экран
Помог? Нажми на <Весы> слева.
С++, Pascal, Assembler 386 - под заказ.
sig_GB вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как организовать ввод строки с пробелами? Adminx Общие вопросы C/C++ 11 20.11.2009 02:33
Как в C++ организовать ввод данных в одну строчку? amdbodia Общие вопросы C/C++ 10 16.05.2009 18:03
Как осуществить ввод данных в одном цикле, их обработку в другом, и вывод результатов в третьем? ReM Паскаль, Turbo Pascal, PascalABC.NET 5 11.11.2008 18:21
Как организовать вывод сообщений программой в VCL режиме Delphi? Evgenii Помощь студентам 10 28.07.2008 11:28
Организовать ввод данных с файла созданного в первом задании и вывод их терминал. Saniok Помощь студентам 2 25.10.2007 22:25