програма не работает с отрицательными числами

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
frankfish
Сообщения: 1
Зарегистрирован: 02 мар 2009, 21:36
Откуда: ukraine, Vinnytsia
Контактная информация:

привет всем!
с клавы вводятся 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:','$'   
   	[B].CODE[/B]
	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  	[B][di][/B],ax
	add	di,2
	pop 	cx
	inc 	cx
	cmp 	cx,5
	jnz	F1
;-------------------------------	

	lea 	si,mas
	mov 	ax,[B][si][/B]
	mov 	min,ax        
	mov 	di,1
FORmin:
	mov 	ax,min		
	cmp 	[si],ax	
	jnl	t
	mov 	ax,[B][si][/B]
	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[B][bx][/B], '$'
	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[B][bx][/B], '$'
	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,[B][BX+1][/B]	
	ret
ReadStr	ENDP

AsciiToBin PROC
	mov	ax, 0
	mov	si, 2
MulLoop: 
	mul	si
	mov	ch, [B][bx][/B]+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	[B][bx][/B], 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
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Зачем такая большая строка для ввода

Код: Выделить всё

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
Ответить