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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2010, 18:46   #1
kood
Новичок
Джуниор
 
Регистрация: 15.01.2010
Сообщений: 1
По умолчанию Умножение чисел в ASCII-формате

Уважаемые пользователи помогите пожалуйста переделать прогу. Буду очень благодарен! (Сам не очень разбираюсь)

Задание:
Поле ASCA содержит значение 313733 в ASCII-формате, а другое поле ASCB содержит 35. Напишите команды для умножения этих чисел в ASCII-формате и записи произведения в поле ASCPRO.


Код:
NAME	ASCIIMULT
	
	DATA SEGMENT
	ASCA		DB	'313733'			;определяем поле первого множителя
	ASCB		DB	'35'				;определяем поле второго множителя
	ASCPRO		DB	3 DUP (0)		;поле для записи результата
	DATA	ENDS

CODE	SEGMENT						
	START:  ASSUME CS: CODE, DS: DATA, ES: DATA
	MOV	AX, DATA					
	MOV	DS, AX
	MOV	ES, AX
	
	MOV	CX, 03					;число циклов = 3
	LEA	SI, ASCA+2					
	LEA	DI, ASCPRO+2
	AND	ASCB, 0FH					
A10:	
	MOV	AL, [SI]					;загрузка ASCII символа
	AND	AL, 0FH				; очистка старшего полубайта 
	MUL	ASCB						;умножение
	AAM							; ASCII - коррекция
	ADD	AL, [DI]					;добавление
	AAA							;к сохраненному
	MOV	[DI], AL					;произведению
	DEC	DI
	MOV	[DI], AH		  ;сохранение переноса произведения
	
	DEC	SI
	LOOP	A10						;повторить цикл 3 раза
	LEA	BX, ASCPRO+2				;преобразование 
;произведения в ASCII: 
	MOV	CX, 03					;справа налево, 3 байта
A20:	
	OR	BYTE PTR [BX], 30H
	DEC	BX
	LOOP	A20						;цикл 3 раза
	MOV	AX, 1300H					;запрос вывода
	MOV	BX, 0031H					;страница и атрибуты
	LEA	BP, ASCPRO					;ASCII строка
	MOV	CX, 03					;длинна строки
	MOV	DX, 0824H					;строка
	INT	10H
	
	MOV	AH, 4CH					
	INT	21H

CODE	ENDS							;завершение работы

Последний раз редактировалось rpy3uH; 15.01.2010 в 19:33.
kood вне форума Ответить с цитированием
Старый 15.01.2010, 20:53   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

столбиком по байтам, но хранить это в ASCII это жестко, лучше в BCD
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 18.01.2010, 12:50   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

kood
Какая несуразица! Сам-то понял, что написал? Умножаешь число
313733 на 35 должен получить 10980655 и выделил под результат всего три байта, а это всего три цифры
Пойдем другим путем -- смущает обилие '3' в ASCA и ASCB скорее всего автор хотел умножить '173'=31h, 37h, 33h на '5'=35h тогда в результате '865' и трех байтов достаточно
Код:
.data 
ASCA DB '173'		; поле первого множителя
ASCB	DB '5'			; поле второго множителя
ASCPRO DB	'000$'
.code
mov si,offset ASCA
mov cx,3
xor ax,ax
cwd; dx=ax=0
a1: lodsb
     and al,0Fh
     imul dx,10
     add dx,ax
     loop a1; в результате dx=0ADh=173
     mov al,ASCB
     and al,0F
     mul dl;в результате ax=173*5=865=361h
	mov dl,10
	mov si,offset ASCPRO+2
	div dl
	add [si],ah; остаток от деления последней цифрой в результат
	aam
	xchg ah,al
	add [si-2],ax; остаток от деления и частное первой и второй цифрой в результат
	mov ah,9; результат на экран
	mov dx,offset ASCPRO
	int 21h
	mov ah,0; ждем пока не нажмут на любую клавишу
	int 16h
	mov ah,4ch; выходим из программы
	int 21h

Последний раз редактировалось Mikl___; 18.01.2010 в 13:14.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение огромных чисел Pedro Помощь студентам 3 19.04.2009 21:32
Умножение длинных чисел SeRhy Помощь студентам 1 28.11.2008 20:04
представить структуру чисел в графическом формате Demon20008 Помощь студентам 1 24.09.2008 11:05
умножение 16-разрядных чисел deeeman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 12.12.2007 13:26