LINUX.ORG.RU

Assembler + Dos - помогите разобраться с выводом


0

0

Добрый день!
В нижеописанное программе в строку s вводится символы, а затем они 
должны быть выведены по 5 в ряд. Использую для вывода
прерывание Dos int21 c 02A в регистре Ah,т.е. вывожу посимвольно. Идея такая: определяю адрес строки
(и соответсвенно 1-го в ней символа, помещаю в dl переменную, по вычисленному адресу и накидываю еденицу туда,где находится текущий адрес(так как строка у меня байтовая), но ничего не работает,программа выдает ошибку Может я что-то с адресацией напутал?
Просьба помочь разобраться!

p.s. показываю только сегмент данных и сегмент кода.

.data

	;; input

	maxl	db	30
	actl	db	?
	s	db	27	dup('$')
	;; ----------------------------
	;; enter
	ent	db	13,10,'$'
	;; ----------------------
	;; Output variable

	adr	dw	?
	count	dw	?
	

.code		

; PROGRAM
	;; Massiv INPUT

	mov	ah,0Ah
	lea	dx,maxl
	int	21h
	;; enter
	mov	ah,09h
	lea	dx,ent
	int	21h

	;; Massiv OUTPUT

	lea	ax,s		; determinig s offset
	mov	adr,ax		; saving string s DS:offset in adr var
	mov	bx,adr
	mov	ax,25
	mov	count,ax	; main_loop counter
main_loop:
	mov	cx,5		; sub_loop counter
sub_loop:
	mov	ax,02h		; -------------------
	mov	dl,[bx]		; putting to dl  current symbol
	int	21h		; -------------------
	add	bx,1
	dec	count		; decrising main_loop counter
	loop	sub_loop	; repeating this operations for 5 times
	
	;; enter
	mov	ah,09h
	lea	dx,ent
	int	21h
	;; --------------
	
	mov	ax,5		; -----------------------------------
	cmp	count,ax	; checking main_loop counter
	jns	main_loop	; if count-5 >= then going to main_loop
	;; Massiv OUTPUT end
anonymous

ggosh,scuko!!!!!!!!!!!!!!!!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.