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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2009, 23:29   #1
frankfish
 
Регистрация: 02.03.2009
Сообщений: 3
По умолчанию прога на асемблере не работает с отрицательными числами

c клавы вводятся 5 чисел.найти найменьшее и вывести его порядковый номер. пр вводе отрицательных чисел - прога не выдает правильные результаты

Код:
.MODEL small
.STACK 100h
.DATA
CodeNewLine DB 13,10,'$'
Str1 DB 53 DUP(?)
StrRes DB 53 DUP(?)
min Dw 0
mas dw 53 DUP(?)
Nomer dw 0
masage DB 'min elem:','$'
povid1 DB 'nomer min:','$'
.CODE
mov ax,@data
mov ds,ax
lea di,mas
mov cx,0
F1:
push cx
mov DX,offset Str1
call ReadStr
call NewLine
call AsciiToBin
mov [di],ax
add di,2
pop cx
inc cx
cmp cx,5
jnz F1
;-------------------------------

lea si,mas
mov ax,[si]
mov min,ax
mov di,1
FORmin:
mov ax,min
cmp [si],ax
jnl t
mov ax,[si]
mov min,ax
mov Nomer,di

t:
add si,2
inc di
cmp di,6
jnz FORmin
;---------------------

call NewLine
mov ah,9
mov dx,OFFSET masage
int 21h

mov ax,min
mov bx, offset StrRes+50
mov byte ptr[bx], '$'
call BinToAscii

mov dx, bx
call WriteStr
call NewLine
call NewLine
mov ah,9
mov dx,OFFSET povid1
int 21h
mov ax,Nomer

mov bx, offset StrRes+50
mov byte ptr[bx], '$'
call BinToAscii

mov dx, bx
call WriteStr
call NewLine

mov ah,4ch
int 21h
ret

ReadStr PROC
MOV BX,DX
MOV AL,51
MOV [BX],AL
MOV AH,0AH
INT 21H
MOV CL,[BX+1]
ret
ReadStr ENDP

AsciiToBin PROC
mov ax, 0
mov si, 2
MulLoop:
mul si
mov ch, [bx]+2
sub ch, 30h
add al, ch
inc bx
dec cl
jnz MulLoop
ret
AsciiToBin ENDP

BinToAscii PROC
mov dx, 0
mov si, 10
DivLoop:
mov dx, 0
div si
add dl, 30h
dec bx
mov [bx], dl
cmp ax, 0
jnz DivLoop
ret
BinToAscii ENDP

NewLine PROC
mov ah,9
mov dx,OFFSET CodeNewLine
int 21h
ret
NewLine ENDP

WriteStr PROC
mov ah,9
int 21h
ret
WriteStr ENDP

END

Последний раз редактировалось Stilet; 12.03.2009 в 08:33.
frankfish вне форума Ответить с цитированием
Старый 12.03.2009, 09:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В целом разбираться не буду, но по-моему ты вообще неверно проверяеш.
Вот примерная проверка:
Код:
	.model flat,stdcall
	option casemap:none
   	include d:\masm32\include\user32.inc
   includelib d:\masm32\lib\user32.lib
.data
q		dw -100,-2,3,4,-5,6,8,8,8,21
s		dw 0
.code
start:
 mov ecx, 10
 mov dx,[q+ecx*2]
 dec ecx
aga:
 mov ax,[q+ecx*2]
 cmp dx,ax
 jle ugu
 mov dx,ax
ugu:
dec ecx
cmp ecx,0
jne aga
mov [s],dx
 ret
end start
В s будет минимальное число. только прога эта первое число не берет, разбираться времени нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая програма на асемблере Vladya Помощь студентам 4 05.04.2009 22:50