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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2010, 14:28   #1
fightclub
 
Регистрация: 09.01.2010
Сообщений: 4
По умолчанию Задача с матрицей

Прошу исправить мой убогий код и объяснить ошибки. Задача такая: в двумерном массиве подсчитать сумму отрицательных элементов а среди положительных найти максимальный.
Кто знает что это за ошибки? И может кто-нибудь поможет? Заранее благодарен.
Цитата:
IBM Macro Assembler/2 Version 1.00 1/9/10 15:48:56
Page 1-1


assume SS:seg1,ds:seg2,cs:seg3
0000 seg1 segment stack
0000 0080[ db 128 dup(?)
??
]

0080 seg1 ends
0000 seg2 segment
0000 07 FE 04 05 F8 mas1 DB 7,-2,4,5,-8
0005 02 04 FF F7 02 db 2,4,-1,-9,2
000A 07 08 09 FC FE db 7,8,9,-4,-2
000F 04 05 06 02 FF db 4,5,6,2,-1
0014 0005 len_mas1 dw 5
0016 00 sum db 0
0017 ?? max db ?
0018 seg2 ends
0000 seg3 segment

0000 entry:
0000 B8 ---- R mov ax,seg2
0003 8E D8 mov ds,ax
0005 33 C0 xor ax,ax
0007 B9 0004 mov cx,4
000A 8D 1E 0000 R lea bx,mas1
000E l1:
000E 51 push cx
000F 33 F6 xor si,si
0011 8B 0E 0014 R mov cx,len_mas1
0015 l2:
0015 80 38 00 cmp byte ptr[bx+si],0
0018 7C 16 jl sum
rgr.ASM(28) : error 45: Must be associated with code
001A 8A 00 mov al,byte ptr[bx+si]
001C A2 0017 R mov max,al
001F E2 00 loop max1


0021 max1:
0021 46 inc si
0022 3A 00 cmp al,byte ptr[bx+si]
0024 7F 02 jg max2
0026 E2 E6 loop l1

0028 max2:
mov max,byte ptr[bx+si]
rgr.ASM(41) : error 52: Improper operand type
0028 46 inc si
0029 E2 EA loop l2
002B 59 pop cx
002C 03 1E 0014 R add bx,len_mas1
0030 E2 DC loop l1


sum1:
rgr.ASM(49) : error 6: Phase error between passes
IBM Macro Assembler/2 Version 1.00 1/9/10 15:48:56
Page 1-2


add sum,byte ptr[bx+si]
rgr.ASM(50) : error 52: Improper operand type
0037 46 inc si
0038 E2 DB loop l2
003A 59 pop cx
003B 03 1E 0014 R add bx,len_mas1
003F E2 CD loop l1

0041 A1 0017 R mov ax,max
rgr.ASM(57) : error 31: Operand types must match
0044 85 C0 test ax,ax
0046 79 00 jns oil
rgr.ASM(59) : error 9: Symbol not defined OIL
0048 B4 02 mov ah,02h
004A B2 2D mov dl,'-'
004C CD 21 int 21h
004E 58 pop ax
004F 50 push ax
0050 F7 D8 neg ax
oi1:
rgr.ASM(66) : error 6: Phase error between passes
0057 33 C9 xor cx,cx
0059 BB 000A mov bx,10
005C oi2:
005C 33 D2 xor dx,dx
005E F7 F3 div bx
0060 52 push dx
0061 41 inc cx
0062 85 C0 test ax,ax
0064 75 F6 jnz oi2
0066 B4 02 mov ah,02h
0068 oi3:
0068 5A pop dx
0069 80 FA 09 cmp dl,9
006C 76 03 jbe oi4
006E 80 C2 07 add dl,7
0071 oi4:
0071 80 C2 30 add dl,30h
0074 CD 21 int 21h
0076 E2 F0 loop oi3
0078 58 pop ax
0079 B4 4C mov ah,4ch
007B CD 21 int 21h
007D seg3 ends
end entry
IBM Macro Assembler/2 Version 1.00 1/9/10 15:48:56
Symbols-1


Segments and Groups:

N a m e Size Align Combine Class

SEG1 . . . . . . . . . . . . . . 0080 PARA STACK
SEG2 . . . . . . . . . . . . . . 0018 PARA NONE
SEG3 . . . . . . . . . . . . . . 007D PARA NONE

Symbols:

N a m e Type Value Attr

ENTRY . . . . . . . . . . . . . L NEAR 0000 SEG3

L1 . . . . . . . . . . . . . . . L NEAR 000E SEG3
L2 . . . . . . . . . . . . . . . L NEAR 0015 SEG3
LEN_MAS1 . . . . . . . . . . . . L WORD 0014 SEG2

MAS1 . . . . . . . . . . . . . . L BYTE 0000 SEG2
MAX . . . . . . . . . . . . . . L BYTE 0017 SEG2
MAX1 . . . . . . . . . . . . . . L NEAR 0021 SEG3
MAX2 . . . . . . . . . . . . . . L NEAR 0028 SEG3

OI1 . . . . . . . . . . . . . . L NEAR 0057 SEG3
OI2 . . . . . . . . . . . . . . L NEAR 005C SEG3
OI3 . . . . . . . . . . . . . . L NEAR 0068 SEG3
OI4 . . . . . . . . . . . . . . L NEAR 0071 SEG3

SUM . . . . . . . . . . . . . . L BYTE 0016 SEG2
SUM1 . . . . . . . . . . . . . . L NEAR 0037 SEG3


90 Source Lines
90 Total Lines
17 Symbols

46720 Bytes symbol space free

0 Warning Errors
7 Severe Errors
fightclub вне форума Ответить с цитированием
Старый 09.01.2010, 14:29   #2
fightclub
 
Регистрация: 09.01.2010
Сообщений: 4
По умолчанию

код такой:
assume SS:seg1,ds:seg2,cs:seg3
seg1 segment stack
db 128 dup(?)
seg1 ends
seg2 segment
mas1 DB 7,-2,4,5,-8
db 2,4,-1,-9,2
db 7,8,9,-4,-2
db 4,5,6,2,-1
len_mas1 dw 5
sum db 0
max db ?
seg2 ends
seg3 segment

entry:
mov ax,seg2
mov ds,ax
xor ax,ax
mov cx,4
lea bx,mas1
l1:
push cx
xor si,si
mov cx,len_mas1
l2:
cmp byte ptr[bx+si],0
jl sum
mov al,byte ptr[bx+si]
mov max,al
loop max1


max1:
inc si
cmp al,byte ptr[bx+si]
jg max2
loop l1

max2:
mov max,byte ptr[bx+si]
inc si
loop l2
pop cx
add bx,len_mas1
loop l1


sum1:
add sum,byte ptr[bx+si]
inc si
loop l2
pop cx
add bx,len_mas1
loop l1

mov ax,max
test ax,ax
jns oil
mov ah,02h
mov dl,'-'
int 21h
pop ax
push ax
neg ax
oi1:
xor cx,cx
mov bx,10
oi2:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz oi2
mov ah,02h
oi3:
pop dx
cmp dl,9
jbe oi4
add dl,7
oi4:
add dl,30h
int 21h
loop oi3
pop ax
mov ah,4ch
int 21h
seg3 ends
end entry
fightclub вне форума Ответить с цитированием
Старый 09.01.2010, 17:59   #3
fightclub
 
Регистрация: 09.01.2010
Сообщений: 4
По умолчанию

assume SS:seg1,ds:seg2,cs:seg3
seg1 segment stack
db 128 dup(?)
seg1 ends
seg2 segment
mas1 DB 7,-2,4,5,-8
db 2,4,-1,-9,2
db 7,8,9,-4,-2
db 4,5,6,2,-1
len_mas1 dw 5
sum db 0
max db ?
seg2 ends
seg3 segment

entry:
mov ax,seg2
mov ds,ax
xor ax,ax
mov cx,4
lea bx,mas1
l1:
push cx
xor si,si
mov cx,len_mas1
l2:
cmp byte ptr[bx+si],0; cравниваем элемент с нулем, если меньше нуля
jl sum1; то идем по отдельной ветки цикла и считаем сумму элементов иначе
mov al,byte ptr[bx+si]; делаем этот элемент макимальным и сравниваем его с другими
mov max,al; положительными элементами
loop max1


max1:
inc si; если следующий положительный элемент больше текущего, то
cmp al,byte ptr[bx+si]; делаем его положительным иначе все остается как есть
jg max2
loop l1

max2:
mov al,byte ptr[bx+si]
mov max,al
inc si
loop l2
pop cx
add bx,len_mas1
loop l1


sum1:
mov al,byte ptr[bx+si]; cкладываем текущий отрицательный элемент
add sum,al; c тем что уже находится в ал и результат записываем туда же.
inc si
loop l2
pop cx
add bx,len_mas1
loop l1

mov al,max; вывод на экран максимального элемента и суммы
test al,al
jns oi1
mov ah,02h
mov dl,'-'
int 21h
pop ax
push ax
neg ax
oi1:
xor cx,cx
mov bx,10
oi2:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz oi2
mov ah,02h
oi3:
pop dx
cmp dl,9
jbe oi4
add dl,7
oi4:
add dl,30h
int 21h
loop oi3
pop ax
mov ah,4ch
int 21h
seg3 ends
end entry

Народ помогите! Программа компилируется но ничего не показывает.
fightclub вне форума Ответить с цитированием
Старый 12.01.2010, 07:02   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

fightclub
зачем делать сложным, то что проще простого?
Код:
.286
.model small
.data
mas1	DB 7,-2,4,5,-8; фактически ты работаешь не с матрицей, а 
        DB 2,4,-1,-9,2; с одномерным массивом из 20 элементов
	DB 7,8,9,-4,-2
	DB 4,5,6,2,-1 
sum db 0 ; здесь будет сумма отрицательных элементов
mes db 'максимальное число равно '
max db ?,10,13
db 'сумма отрицательных элементов равна -'
sum_ dw ?; а здесь число для вывода на экран
db '$'
.code
start:	mov ax,@data
	mov ds,ax 
	mov bx,19 ; хотя элементов 20 но обращаются к ним начиная с 0-ого
a1: 	mov al,mas1[bx]; обрабатываем массив от последн. элемента к 1-му
	test al,al; в AL число положительное или отрицательное? 
	jg a2
	add sum,al; если отрицательное -- складываем
	jmp a3
a2:	cmp al,max;если положительное -- проверяем на максимальность
	jbe a3
	mov max,al
a3: 	dec bx ; переходим к следующему элементу
	jns a1 ; если BX<0 выходим из цикла
	add max,'0'; максимальное число не больше 9
	mov al,sum
	neg al; для вывода на экран приводим 16-ричное число
	aam  ; к нормальному виду
	xchg ah,al
	add ax,3030h
	mov word ptr sum_,ax
	mov ah,9; выводим все на экран
	mov dx,offset mes
	int 21h
	mov ah,0; ждем пока не нажмут любую клавишу
	int 16h 
	mov ah,4ch ; выходим из программы
	int 21h 
end start
Mikl___ вне форума Ответить с цитированием
Старый 15.01.2010, 10:31   #5
fightclub
 
Регистрация: 09.01.2010
Сообщений: 4
По умолчанию

Большое спасибо!
fightclub вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с матрицей bonys91 Помощь студентам 1 02.04.2009 20:02
Задача с матрицей Kawun Помощь студентам 9 26.03.2009 00:29
Задача,опять же с матрицей groth88 Паскаль, Turbo Pascal, PascalABC.NET 3 16.04.2008 13:22
Задача с матрицей H[o][o]K Помощь студентам 1 15.12.2007 16:51
Задача с матрицей, Паскаль Integra Помощь студентам 1 25.04.2007 16:14