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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2009, 17:44   #1
bullvinkle
Временно — юрист.
Форумчанин
 
Аватар для bullvinkle
 
Регистрация: 31.03.2008
Сообщений: 204
По умолчанию Неправильно работает программа из книги Абеля.

Учу АСМ по Питеру Абелю.
Вот программа, которая выводит почти все символы аски. Ошибка была изначально в книге (метку Д30 я сам доставил).
Вобщем компилируется, но выдает потом хрен знает что.
Код:
TITLE	A08DISAS (COM)	Вывод набоа символов ASCII
	.MODEL	SMALL
	.CODE
	ORG	100H
BEGIN:	JMP	SHORT	A10MAIN
ASCHAR	DB	00,	'$'
;		Главеая процедура
.286	;	-----------------
A10MAIN	PROC	NEAR
	CALL	B10SCREEN	;Очистка экрана
	CALL	C10CURSOR	;Установка курсора
	CALL	D10DISPLY	;Вывод символов
	MOV	AX,4C00H
	INT	21H
A10MAIN	ENDP
;	Очиска экрана и установка атрибутов:
;	------------------------------------
B10SCREEN	PROC	NEAR
	PUSHA			;Сохранение значений регистров
	MOV	AX,0600H	;Прокурутка целого экрана (очистка)
	MOV	BH,07		;Атрибуты: бeлый шрифт на черном фоне
	MOV	CX,0000		;Верхний левый угол
	MOV	DX,184FH	;Нижний правый угол
	INT	10H
	POPA			;Возврат значений регистров
	RET
B10SCREEN	ENDP
;	Установка курсора в ячейку 08,00
;	--------------------------------
C10CURSOR	PROC	NEAR
	PUSHA
	MOV	AH,02H		;Запрос на установку курсора
	MOV	BH,00		;Страница 0
	MOV	DX,0800H        ;Строка 8, столбец 0
	INT	10H             ;
	POPA                    ;
	RET                     ;
C10CURSOR	ENDP
;	Вывод символов ASCII 00h  -FFH, кроме символов от 08Н до 0DH
;	------------------------------------------------------------
D10DISPLY	PROC
	PUSHA
	MOV	CX,256
	LEA	DX,ASCHAR
D20:	CMP	ASCHAR,08H
	JB	D30
	CMP	ASCHAR,0DH
	JB	D40
D30:	MOV	AH,09H
	INT	21H
D40:	INC	ASCHAR
	LOOP	D20
	POPA
	RET
D10DISPLY	ENDP
	END	BEGIN
Отладчик пишет предупеждение (или хз что это) сразу после LOOP D20 в процедур d10disply и после этого СХ, который был равен 100Н становится 0000, хотя должен FFH. Может еще что-то не так, я не уследил.
И сразу попутно вопрос: зачем в каждой процедуре сохранять и восстанавливать значение регистров?

Последний раз редактировалось bullvinkle; 22.02.2009 в 17:47.
bullvinkle вне форума Ответить с цитированием
Старый 22.02.2009, 19:56   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
Сообщение

1. Надо установить графический режим (например такой):

Код:
	mov	ah, 00h
	mov	al, 03h
	int	10h
в процедуре A10MAIN

2. Попробуйте запихать cx в стек перед int 21h (09h):

Код:
D10DISPLY	PROC
	PUSHA
	MOV	CX,256
	LEA	DX,ASCHAR
D20:	CMP	ASCHAR,08H
	JB	D30
	CMP	ASCHAR,0DH
	JB	D40
D30:
	push	cx
	MOV	AH,09H
	INT	21H
	pop	cx
D40:	INC	ASCHAR
	LOOP	D20
	POPA
	RET
D10DISPLY	ENDP
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 22.02.2009, 20:43   #3
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Цитата:
зачем в каждой процедуре сохранять и восстанавливать значение регистров?
Это для того, чтобы ты не потерял значение регистров по ходу выполнения программы
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 23.02.2009, 10:56   #4
bullvinkle
Временно — юрист.
Форумчанин
 
Аватар для bullvinkle
 
Регистрация: 31.03.2008
Сообщений: 204
По умолчанию

Ой! Спасибо за советы, но это я тупонул
Я просто компилировал как ЕХЕ, а надо СОМ.
bullvinkle вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неправильно работает свойство Memo.CaretPos Armorer Общие вопросы Delphi 9 24.05.2011 18:26
Спецы!! Проверьте прогу почему работает неправильно?? SanSanblch Общие вопросы Delphi 2 05.12.2008 18:17
задача работает неправильно, подскажите! IvanIvan Помощь студентам 1 26.05.2008 22:21
Скрипт неправильно работает aleksa76 JavaScript, Ajax 4 21.05.2008 17:47
Запрос неправильно работает... yulia БД в Delphi 0 27.05.2007 20:41