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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2014, 10:28   #1
pokosmosu
Новичок
Джуниор
 
Регистрация: 07.09.2014
Сообщений: 1
По умолчанию Не выводит отрицательное значение

В ассемблере новичок и столкнулся с такой проблемой.

Программа по нахождению определителя матрицы 3х3 не выводит отрицательный det. С положительным значением все в порядке. Отрицательные выводит лишь отнимая от 65536. Допустим если определитель -16, то в ответе напишет 65520. Помогите разобраться друзья.

код

Код:
686
.model flat,stdcall		;model pamyati (lineynaya) i vizova podprogramm
option casemap:none		;razlichaem registr simvolov
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\msvcrt.inc
includelib \masm32\lib\msvcrt.lib

.data
stdout  	dword   ?
stdin   	dword   ?
realRead   	dd   	?
buf		db	30 dup(?)
stp		db	"Vvedite chislo ", 0
st1		db	"massiv", 0
st2		db	27 dup(0)
ifmt	db	"%d", 0

el1		dw	0
el2		dw	0
el3		dw	0
el4		dw	0
el5		dw	0
el6		dw	0
el7		dw	0
el8		dw	0
el9		dw	0
det		dw	?

;clear	dd	FFFF0000h
eln1	dd	?
eln2	dd	?
eln3	dd	?
eln4	dd	?
eln5	dd	?
eln6	dd	?
eln7	dd	?
eln8	dd	?
eln9	dd	?

.code
start:
    call	AllocConsole
    
    ;read element
    invoke GetStdHandle,STD_OUTPUT_HANDLE
    mov stdout,eax
    invoke GetStdHandle,STD_INPUT_HANDLE
    mov stdin,eax
    
    lea esi, el1	;start address el1
 	read_console:
    inc di	;count
    xor eax, eax	;clear eax
    lea ebx, buf	;address buf
    mov	[ebx], eax	;clear buf
    invoke WriteConsoleA, stdout, ADDR stp, 15, NULL, NULL
    invoke ReadConsole, stdin, ADDR buf, 4, ADDR realRead, NULL
	invoke crt_atoi, ADDR buf
	mov [esi], ax
	add esi, 2	;next addres (el2, el3 ...)
	cmp di, 9
	jne read_console
	
	;invoke MessageBox, NULL, NULL, NULL, NULL
	
	xor eax, eax
	;search det
	mov ax, el1
	imul el5
	imul el9
	mov di, ax	;det = el1*el5*el9
	
	mov ax, el3
	imul el4
	imul el8
	add di, ax	;det += el3*el4*el8
	
	mov ax, el2
	imul el6
	imul el7
	add di, ax	;det += el2*el6*el7
	
	mov ax, el3
	imul el5
	imul el7
	sub di, ax	;det += el3*el5*el7
	
	mov ax, el2
	imul el4
	imul el9
	sub di, ax	;det += el2*el4*el9
	
	mov ax, el1
	imul el6
	imul el8
	sub di, ax	;det += el1*el6*el8
	
	mov det, di
	invoke wsprintf, ADDR st2, ADDR ifmt, det
	invoke MessageBox, NULL, ADDR st2, ADDR st1, MB_OK
	
ex:
    invoke ReadConsole,stdin,ADDR buf,5,ADDR realRead,NULL
    invoke ExitProcess,0
end start

Последний раз редактировалось Stilet; 07.09.2014 в 10:50.
pokosmosu вне форума Ответить с цитированием
Старый 07.09.2014, 10:51   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Код:
movsx edi,di
invoke wsprintf, ADDR st2, ADDR ifmt, edi
vadimych вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменной t присвоить значение истина, если в одномерном массиве имеется хотя бы одно отрицательное и четное число (Паскаль) zzz99 Помощь студентам 3 13.03.2014 13:28
Не выводит максимальное значение qpuTuJlb Общие вопросы Delphi 5 26.02.2013 05:49
Delphi. получить сумму тех чисел которые кратны 5 и имеют отрицательное значение Crabobass Помощь студентам 4 06.03.2011 22:21
Отрицательное значение TextBox segail Microsoft Office Excel 7 08.11.2009 20:35
не выводит значение функции... blackbanny Общие вопросы C/C++ 6 17.10.2009 15:19