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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 16:44   #1
Александр16
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 12
По умолчанию Турбо ассемблер - построить массив путём сдвига исходного массива и умножить все элементы полученного массива на два

Дан массив Y1...Y20, построить массив Z1..Z20, элементы которого соответствуют элементам Yi, сдвинутым на одну позицию, т.е. Z1=Y2, Z2=Y3,...Z20=Y1. Умножить все элементы Zi на 2.
Почему вводит одни нули?

Код:
title laba8
codsg segment para 'code'
	org 100h
	assume cs:codsg,ds:codsg,ss:codsg,es:nothing
begin proc
kurs	macro	x,y
		mov		ah,02
		mov		bh,00
		mov		dh,x
		mov		dl,y
		int		10h
	endM

vvod	macro	x
		mov		ah,0ah
		lea		dx,x
		int		21h
	endM

vivod	macro	x
		mov	ah,09
		lea	dx,x
		int	21h
		endM

;zadanie
;ekran

		mov	ah,00
		mov	al,03
		int	10h

		kurs	4,30
		vivod	vvodmas
;vvod massiva
		mov	cx,20
		mov	si,0

m20:
		kurs	7,n
		mov		ah,0ah
		lea		dx,data
		int		21h
		push	cx

		call	ascbin
		mov		ax,binv
		mov		y[si],ax

		add		si,2
		pop		cx
		add		n,3
		loop	m20

;sdvig

mov	di,0
mov	si,0

       lea di,Z
       lea si,Y
       inc si 
       mov cx,19
cyc:
       lodsb     ; Y[2..20] -> al
       shl al,1   ; al*2
       stosb     ; Z[1..19] <- al
       loop cyc
       lea si, Y  
       lodsb      ; Y[1] -> al
       shl al,1   ; al*2
       stosb     ; Z[1..19] <- al

;vivod massiva
	mov	cx,20
	mov	di,0
	mov	n,5

m30:
	mov	asci,' '
	mov	asci+1,' '
	mov	asci+2,' '
			push	cx
			kurs	17,n
			mov		ax,Z[di]
			mov		binv,ax
			call	binasc
			mov		ah,09
			lea		dx,asci
			int		21h

			add		di,2
			add		n,4
			pop		cx
			loop	m30

			mov		ah,00
			int		16h
			int		20h
			ret
begin	endp

ascbin	proc
mov	mul10,1
	mov	binv,0
	mov	cx,10
	lea	si,number-1
	xor	bx,bx
	mov	bl,real
b20:	mov	al,[si+bx]
	and	ax,000fh
	mul	mul10
	add	binv,ax
	mov	ax,mul10
	mul	cx
	mov	mul10,ax
	dec	bx
	jnz	b20
	mov	ax,0
	mov	ax,binv
	ret
ascbin	endp
;------------
BinASC	proc
	mov	cx,10
	lea	si,asci-1
	mov	bx,3
	mov	ax,binv
c20: cmp	ax,0010
	jb	c30
	xor	dx,dx
	div	cx
	or	dl,30h
	mov	[si+bx],dl
	dec	bx
	jmp	c20
c30: or al,30h
	mov	[si+bx],al
	ret
BinAsc	endP

Data	label	byte
max		db	5
real	db	?
number	db	3 dup(' '),'$'
asci	db	3 dup(' '),'$'
mul10	dw	1
binv	dw	0
n		db	5

i		dw	0
y	dw	20 dup(0)
z	dw	20 dup(0)
vvodmas db	'Vvedite elementi massiva','$'
vivodmas db	'noviy massiv','$'
cosg	ends
end	begin

Последний раз редактировалось Александр16; 12.02.2012 в 17:28.
Александр16 вне форума
Старый 12.02.2012, 19:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

И чем же Вас ваша прошлая тема не устроила?!

если Вы "забыли",
напоминаю
Турбо ассемблер - построить массив путём сдвига исходного массива и умножить все элементы полученного массива на два


Кросспостинг (создание одинаковых тем) запрещён правилами форума.

Модератор.
Serge_Bliznykov вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Турбо ассемблер - построить массив путём сдвига исходного массива и умножить все элементы полученного массива на два Александр16 Помощь студентам 5 12.02.2012 20:30
Из исходного массива заполнить два других массива DarkStalkerus Паскаль, Turbo Pascal, PascalABC.NET 1 14.12.2011 14:19
Элементы матрицы. Все ненулевые элементы массива D(k) расположить в начале массива E(k) и подсчитать их к Вася Маклауд Помощь студентам 0 03.04.2011 17:21
Построить массив, в который поместить все элементы второго массива, оканчивающиеся на цифру 5 Паскалька^^ Паскаль, Turbo Pascal, PascalABC.NET 11 07.01.2009 02:54