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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2018, 19:36   #1
xplod1999
Новичок
Джуниор
 
Регистрация: 02.05.2018
Сообщений: 1
По умолчанию [Assembler] Выводит массив больше чем надо!

Здравствуйте!
Выводит фиксированный массив больше чем надо (8,2,4,5,6,7,9,0,1,6), не могу отловить почему.
Спасибо.

Код:
dat segment 'data'
	mas db 8,2,4,5,6,7,9,0,1,6,'-'
lfcn db 10,13,'$'

dat ends

stk segment stack 'stack'
  	db 100 dup(?)
stk ends

prg segment 'code'
	n equ 9
	assume cs:prg, ds:dat, ss:stk
vvodmas proc
       mov bl, 10 
       xor cx,cx
       xor ax,ax
       mov ax, si
       cbw
vvodmas endp



dprint proc
 push ax 
 mov ah , 2
 int 21h
 pop ax
 ret 
dprint endp


prdec proc
push cx
push bx
print:       
       
       mov bl, 10 
       xor cx,cx
       xor ax,ax
       mov ax, si
       cbw

ifmeg:
       cmp ax, 0
       jnl next
       mov dx, '-'

call dprint
next: 
       idiv bl 
       cmp ah, 0
       jg to_stk
       neg ah

to_stk:
       mov dl, ah
       add dl, '0'
       push dx
       inc cx
       cmp al, 0
       jz prnt
       xor ah , ah 
       cbw
       jmp next     	

prnt:  pop dx
       call dprint
       loop prnt
       pop  bx       
       pop  cx
       

ret
prdec endp



printmas proc

push cx
       	mov di, -1
       	mov cx, n+1

	lea bx, mas

m1:    
	inc di
	mov si, [bx+di]
	and si,0ffh
       	call prdec
       loop m1

pop cx

;        push ax 
;        mov ah,2
;        int 21h
;        pop ax
        ret 
printmas endp




begin:	mov ax,dat
	mov ds,ax
	mov es,ax
;	call vvodmas
	call printmas

        mov cx,n
	lea di,mas
	xor ax,ax
	std

loopk:	inc di
	lea si,mas
	mov al,[di]
comp:	cmp [si],al
	ja sdvig
	inc si
	cmp si,di
	je testk 
        jmp comp
sdvig:  mov dl,[di]
	push cx
	mov cx,di
	sub cx,si
	push si
	push di
	mov si,di
	dec si
loopi:	mov byte ptr [si],dl
	loop loopi
outsdv:	pop di
	pop si
        pop cx
	mov [si],dl
testk:  loop loopk
	call printmas
	mov ah,4ch
	mov al,0	
	int 21h
prg ends
end begin
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 05.06.2018 в 15:08.
xplod1999 вне форума Ответить с цитированием
Старый 04.06.2018, 21:14   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

xplod1999, числа от 0 до 9 можно выводить проще - просто прибавляй к ним 30h.
Маркером конца в данном случае служит знак минуса(-):
Код:
.model small
.stack 100h
.data

mas    db    8,2,4,5,6,7,9,0,1,6,'-'
lfcn   db    10,13,'$'
n      equ   9              ; кол-во строк.

.code
start: mov   ax,@data 
       mov   ds,ax 
       mov   es,ax 

       mov   cx,n           ; повторов..
@01:   lea   si,mas         ; что выводить
@02:   lodsb                ; читаем байты из DS:SI
       cmp   al,'-'         ; последний элемент массива?
       je    @03            ; да!
       add   al,30h         ; иначе: +30h
       int   29h            ; вывести AL на экран
       jmp   @02            ; читать сл.эл.массива..

@03:   lea   dx,lfcn        ; встретили маркет-конца(-)
       mov   ah,9           ; перевод строки 'CRLF'
       int   21h
       loop  @01            ; повторить цикл СХ-раз..

       mov   ah,8           ; ждать нажатия любой клавиши
       int   21h
       mov   ax,4c00h       ; выход в дос!
       int   21h
end start
end
Если числа в массиве больше(9),
то применяй свою/кривую процедуру вывода чисел на экран.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предложили больше чем просил ts-alan Свободное общение 18 09.12.2016 21:51
выводит то,что надо и то,чего нет c++ vadim93 Помощь студентам 4 22.12.2013 14:57
Аргументов ЕСЛИ больше чем 7 Freerider1972 Microsoft Office Excel 40 16.05.2011 10:44
C++: чистая арифметика, опять считает больше, чем надо Blondy Помощь студентам 14 01.04.2011 19:25
Больше чем LongInt Dionix Общие вопросы Delphi 7 17.07.2010 16:30