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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2010, 13:33   #1
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
Печаль как вывести текст на экран (TASM)

короче это генератор случайных чисел, ищет их по фоормуле которая в коде написана (выделена однако)
и вконце метка print печатает на экране число которое получилось
есть два вопроса по этому поводу:
1) пачиму после завершения работы программы она завершается с ошибкой (косяг с каким-то адресом)

2) как адаптировать эту прогу к 32 битным процам (именно на TASM)

Код:
TITLE PROG

.MODEL tiny
.STACK 256
.Data
	Y_ASCII	DB  7  DUP(?)	;переменная для хранения
							;символов ASCII
		SIGN 	DB (?)		;переменная для хранения
							;знака числа
rand_a  db         255
rand_m  db         255
seed    db         -1
.CODE
START:	MOV AX, @DATA		;Иницинировать сегментные
	MOV DS, AX		;сегментный регистр
	
;*********************************************************************************************************
; Процедура rand
; возвращает в АХ случайное положительное 32-битное число
; (от 0 до 231-2)
;
; /|\\\\\\\\\\\\\\\\\\\\\\\\\
; || X(j)=(ax(i) + c)mod M ||
; \|/////////////////////////


        push       dx
        mov        al,seed  ; считать последнее
                                       ; случайное число
        test       AL,AL             ; проверить его, если это -1,
        js         fetch_seed          ; функция еще ни разу не
                                       ; вызывалась и надо создать
                                       ; начальное значение
randomize:
        mul        rand_a    ; умножить на число а,
        div        rand_m    ; взять остаток от
                                       ; деления на 231-1
        mov        AL,dl
        mov         seed,AL  ; сохранить для
                                       ; следующих вызовов
        pop        dx
jmp short print	

fetch_seed:
        push       ds
        push       0040h
        pop        ds
        mov        AL, ds:006Ch ; считать
                                          ; двойное слово из области
        pop        ds                     ; данных BIOS по адресу
                                          ; 0040:0060 - текущее число
        jmp        short randomize        ; тактов таймера

print:


	CMP AX,0			;сравнить число с 0
	JNS M_11			;если >= 0 перейти на М_1
;-------------------------------------------------------------------------------------------------------------------

	NEG AX			;Преобразовать в прямой код
M_11:	XOR CX,CX		;очистить СХ
	MOV BX,10		;в ВХ поместить делитель 10
M_2:	XOR DX,DX		;очистить DX
	DIV BX			;разделить число на 10
	PUSH DX			;остаток поместить с стек
	INC CX			;увеличить СХ на 1
	CMP AX,0			;если АХ не равно 0
	JNE M_2			; повторить деление
	;----------------------------------------------------------------------------------------------------
	XOR SI,SI			;очистить SI	
	MOV AL,SIGN		;згрузить в AL знак числа
	MOV Y_ASCII[SI],AL		;в Y_ASCII знак числа
	INC SI			; увеличить SI 
M_3:	POP AX			;извлечь из стека в АХ
	ADD AL,30H		;вычислить код ASCII для цифры
	MOV Y_ASCII[SI],AL		;добавить  ASCII код в перемменную
				; Y_ASCII
	INC SI			;увеличить  SI на 1
	LOOP M_3		;повторять пока СХ не 0
	MOV Y_ASCII[SI],'$'		;символ конца строки в Y_ASCII
	MOV DX,OFFSET Y_ASCII	;Печать числа
	MOV AH, 09		
	INT 21H



;*********************************************************************************************************	
END START
некоторая часть кусков кода как всегда осталось из прошлого и не несет никакой функциональной нагрузки...
чайник юзеру не товарищ, а сам себе враг...

Последний раз редактировалось Аlex; 03.03.2010 в 13:39.
Аlex вне форума Ответить с цитированием
Старый 05.03.2010, 19:24   #2
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

ну тогда хоть скажите почему никто ничо не отвечает :-(
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 05.03.2010, 19:53   #3
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
пачиму после завершения работы программы она завершается с ошибкой (косяг с каким-то адресом)
Наверное патаму что нету выхода из программы.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести bmp изображение на экран?? lexuss Паскаль, Turbo Pascal, PascalABC.NET 12 09.04.2011 00:02
как вывести текст на экран в графическом режиме. alex(21) Паскаль, Turbo Pascal, PascalABC.NET 3 24.07.2009 15:56
Помогите вывести строку на экран в обратном порядке(TASM .small) depocomp Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 21.05.2009 11:22
Как вывести на экран... (Делфи)!!! DjVidan Помощь студентам 14 09.03.2009 16:31
Как вывести из текстового файла на экран русский текст? Mischa Помощь студентам 8 12.03.2008 06:23