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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2011, 22:07   #1
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
Восклицание Печать числа

Подскажите почему не выводится сумма чисел. И вообще не получается вывести число. Программа просто запустилась, подождала нажатия клавиши и все.
Код:
	.model	small
	.stack	100h	

	.data
x db 8h
y db 10h

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

	mov dl, x
	add dl, y
	add dl, '0'
	mov ah, 2 			; печатаем символ
	int 21
	mov ah, 0
	int 16h				; ожидаем нажатия любой клавиши
	mov ax, 4c00h
	int 21h          	        ; выходим из программы

end start
Vistar вне форума Ответить с цитированием
Старый 04.02.2011, 22:33   #2
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Надо h поставить после int 21.

И вместо
Код:
        add dl, '0'
	mov ah, 2 			; печатаем символ
	int 21
правильнее(для двузначных чисел) написать так:
Код:
        xor ax,ax
        mov al,dl
        aam 
        add ax,3030h 
        mov dl,ah 
        mov dh,al 
        mov ah,02 
        int 21h 
        mov dl,dh 
        int 21h
Просто добавление '0' сработает только для вывода одной цифры.

Последний раз редактировалось Stilet; 05.02.2011 в 15:22.
Ant1971on вне форума Ответить с цитированием
Старый 05.02.2011, 01:09   #3
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
По умолчанию

Ant1971on, большое спасибо. А 3030h мы добавляем как конец строки?
Vistar вне форума Ответить с цитированием
Старый 05.02.2011, 02:04   #4
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

3030h добавляется к AX, где после команды aam будет уже лежать сумма в двоично-десятичном (неупакованном) представлении. После добавления 3030h сумма в AX преобразуется в ее ASCII-символы, которые затем и выводятся на экран.
Ant1971on вне форума Ответить с цитированием
Старый 05.02.2011, 04:07   #5
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
По умолчанию

а как печатать двойное слово? после суммирования этих чисел выводится I5
Код:
d0	dd	12345678
d1	dd	87654321
Код:
		; d0 <- d0+d1
		mov eax, [d0]
		add eax, [d1]
		mov edx, eax
		
		; печатаем число
		xor ax,ax
                mov al,dl
                aam 
                add ax,3030h
                mov dl,ah 
                mov dh,al 
                mov ah,02 
                int 21h 
                mov dl,dh 
                int 21h
Vistar вне форума Ответить с цитированием
Старый 05.02.2011, 12:50   #6
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Я же предупредил, что прежний способ годится только для двузначных чисел. Для вывода двойного слова можно сделать так:
Код:
;Предполагается, что выводимое число в eax
;проверка знака числа:

	test eax,80000000h ;число положительное ?
	jz cnvrt	;да, преобразуем в десятичное
	push eax
	mov al,'-'	;выводим минус
	int 29h
	pop eax
	neg eax		;берем модуль

;перевод числа в eax в десятичную сист. счисления:

cnvrt:	
	xor ecx,ecx	;счетчик десятичных цифр
	mov ebx,10	;основание сист. счисления
ckl:
	xor edx,edx	;расширим делимое
	div ebx
	push edx	;получаемые цифры кладем в стек
	inc cx
	test eax,eax	;делитель - ноль ?
	jnz ckl		;еще нет, продолжим

outpt:			;вывод числа на экран

	pop eax
	add al,'0'	;десятичную цифру -> в ASCII
	int 29h		;вывод цифры
	
	loop outpt
Если числа беззнаковые, кусок кода до метки cnvrt нужно убрать.
Ant1971on вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить:у=а*(в*в*в)*с,где а,в,с-двоичные числа.Для хранения числа использ.массив! Таняпервокурсница Помощь студентам 4 04.06.2010 12:08
Как числа в двоичном виде вывести в столбик по 4 числа? Equalizer Общие вопросы C/C++ 11 27.09.2009 14:15
Печать двоичного представления числа в формате слова. Lina__N Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 06.06.2009 12:06
Даны натуральные числа m,n. Посчитать сумму m последнего числа n. лялька Паскаль, Turbo Pascal, PascalABC.NET 6 25.12.2008 15:22
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49