WMmail.ru - сервис почтовых рассылок

четверг, 3 ноября 2011 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Женская одежда от 490 руб! Бесплатная доставка + подарок за регистрацию!
  
  
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2897
• повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2576
• повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2120
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1485
Дата выхода:04.11.2011, 01:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:193 / 61
Вопросов / ответов:1 / 1

Консультация # 184347: Здравствуйте! У меня возникли сложности с таким вопросом: необходимо написать в TASM программу благодаря которой введенное с клавиатуры число в 16 -ной системе счисления будет преобразовано и выведено на экран в виде двоичного числа....


Консультация # 184347:

Здравствуйте! У меня возникли сложности с таким вопросом:
необходимо написать в TASM программу благодаря которой введенное с клавиатуры число в 16 -ной системе счисления будет преобразовано и выведено на экран в виде двоичного числа.

Дата отправки: 29.10.2011, 16:40
Вопрос задал: Невалёный Виталий Владимирович (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Невалёный Виталий Владимирович!
Для ввода hex-числа написана своя процедура.
После ввода в буфере получаем hex-цифры 00h-0fh
При выводе группируем по две hex-цифры (побайтно)
При нечетном количестве дополняем самый старший байт цифрой 0.
Ну и напоследок, для получения символов '0' или '1' из hex-цифры,
последовательно сдвигаем очередной бит в FC и складываем с 30h командой adc

Код :
;ввести с клавиатуры число в 16 -ной системе счисления  ;и вывести на экран в виде двоичного числа  stk	segment	para stack	;Сегмент стека с выравниваем на 10h (para) 	dw	256 dup (?) stk	ends  data	segment sHex	db	'Enter hex: $' sBin	db	0dh,0ah,'Bin: $' sAny	db	0dh,0ah,'Press any key$'  ;данные для ввода строки с помощью функции 0ah buffer	label	byte max	db	16		;размер буфера cnt	db	0		;длина введенной hex-строки hexnums	db	16 dup (?)	;сама введенная hex-строка data	ends  code	segment assume	cs:code, ds:data, ss:stk main	proc 	mov	ax, data	;ds = es = data 	mov	ds, ax 	mov	es, ax  	lea	dx, sHex	;Enter hex: 	mov	ah, 9 	int	21h  	lea	bx, buffer	;Введем hex-число 	call	GetHex  	lea	dx, sBin	;Bin:  	mov	ah, 9 	int	21h  	call	OutBin		;Выведем двоичную строку, данные в [bx]  	lea	dx, sAny	;выводим строку Press any key 	mov	ah, 9 	int	21h  	mov	ah, 0		;ждем "any key" 	int	16h  	mov	ax, 4c00h 	int	21h main	endp  ;Введем hex-строку ;[bx] - адрес структуры, аналогичной для функции 0ah GetHex	proc 	lea	di, [bx+2]	;адрес строки 	xor	cx, cx		;счетчик GH_loop: 	mov	ah, 0		;ждем код 	int	16h 	cmp	al, 0dh		;по Enter-у заканчиваем ввод 	je	GH_ret 	cmp	al, 8		;backspace для исправления ошибки 	je	GH_backspace 	cmp	cl, [bx]	;проверим на переполнение буфера 	je	GH_beep		;первый байт - макс длина 	cmp	al, '0'		;меньше цифр 	jb	GH_loop		;игнорируем 	cmp	al, '9' 	jbe	GH_set_digit	;цифра - запоминаем 	or	al, 20h		;сделаем букву маленькой 	cmp	al, 'a' 	jb	GH_loop		;меньше 'a' игнорируем 	cmp	al, 'f' 	ja	GH_loop		;и больше 'f' 	mov	dl, al		;запомнили для вывода на экран 	sub	al, 'a'-10	;сделаем hex-цифру 'a'-'f' -> 0ah-0fh GH_set: 	inc	cx		;считаем 	mov	[di], al	;запоминаем 	inc	di		;адрес следующей hex-цифры GH_out: 	mov	ah, 2		;выводим введенный символ (в dl) 	int	21h 	jmp	GH_loop GH_set_digit:			;цифра 	mov	dl, al		;сохраним для вывода 	sub	al, '0'		;превратим в hex-цифру '0'-'9' -> 00h-09h 	jmp	GH_set		;запоминаем GH_backspace:			;backspace 	jcxz	GH_loop		;в начале строки игнорируем 	dec	cx		;уменьшаем счетчик 	dec	di		;и адрес 	mov	dl, al		;уменьшим адрес 	mov	ah, 2 	int	21h 	mov	dl, ' '		;затрем пробелом 	int	21h 	mov	dl, 8		;и опять на одну позицию назад 	jmp	GH_out GH_beep: 	mov	dl, 7		;при переполнении буфера просигналим beep-ом 	jmp	GH_out GH_ret: 	mov	[bx+1], cl	;запоминаем длину hex-строки 	ret GetHex	endp  OutBin	proc			;вывод последовательности 0 и 1 	lea	si, [bx+2]	;адрес строки 	xor	cx, cx		;длина 	mov	cl, [bx+1]	; строки 	jcxz	OB_ret		;пустая строка 	mov	ah, 2		;ф-я вывода на экран 	test	cl, 1		;для нечетной длины дополним старшую тетраду нулем 	jz	OB_loop		;для четной - на вывод 	mov	al, '0'		;0 в старшую тетраду 	inc	cx		;добавим и счетчик цикла 	jmp	OB_continue	;обойдем чтение байт OB_loop:			;цикл чтения hex чисел 	lodsb			;очередная тетрада OB_continue: 	push	cx 	mov	cx, 4		;выводим только 4 бит младшей тетрады 	shl	al, 4		;делаем их старшими OB_bit:				;цикл по битам 	shl	al, 1		;старший бит в С 	push	ax		;сохраним 	mov	dl, '0' 	adc	dl, 0		;dl = '0' или '1' 	int	21h		;выводим 	pop	ax 	loop	OB_bit		;4 бита 	pop	cx		;счетчик тетрад 	test	cl, 1		;разделим пробелом на границе 8 бит 	jz	OB_next		;четное число - в середине байта 	mov	dl, ' '		;пробел для наглядности 	int	21h OB_next: 	loop	OB_loop		;по всем тетрадам OB_ret: 	ret OutBin	endp  code	ends 	end	main

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 29.10.2011, 18:10

5
СПАСИБО
-----
Дата оценки: 29.10.2011, 18:18

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
 
Комментировать выпуск
     В избранное

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    03 ноября 2011, 00:33
RFpro.ru: Ассемблер? Это просто! Учимся программировать    23 октября 2011, 21:34
RFpro.ru: Ассемблер? Это просто! Учимся программировать    21 октября 2011, 21:33

Все выпуски рассылки

4 ноября 2011 отмечают:
День воинской славы России — День народного единства
День Казанской иконы Божией Матери
День железнодорожника Украины
День социального работника в Армении
Праздник Девятнадцатого Дня месяца Гудрат
Джазовый фестиваль Гранады

Именины: Александр, Константин, Максим, Николай, Анна, Василий, Владимир, Герман, Григорий, Елизавета, Емельян, Ираклий
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
WebDix советует...
Каждый день электронный журнал WebDix присылает вам совет, который относится либо к веб-дизайну, либо к графическим и анимационным программам, либо к продвижению и оптимизации. Начни день с хорошего совета!
Подписчиков: 425
  Самые свежие новости Рунета от Rinaldus.ru
Самые свежие новости Рунета от сайта Rinaldus.ru
Подписчиков: 110
  Всё об NFS. АвтоМода, ФанArt, множество модификаций и др.
Фанатам игры NFS (Carbon, Most Wanted, Underground и классика) - еженедельные новости крупнейших сайтов, уникальные авторские статьи об игре, сообщение о появлениях новых полезных файлов, Машины, Винилы, ФанArt, АвтоМода, Cheat-коды и многое другое.
Подписчиков: 181
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий