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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2012, 00:58   #1
mosxe
Пользователь
 
Регистрация: 22.11.2011
Сообщений: 18
По умолчанию Ввод числа

Здравствуйте.
Есть программа, которая вводит четыри 16-тиричных чисел и преобразует их в двоичные числа.

Код:
data Segment
	; буфер для подпрограмм ввода вывода
	strdsc db 5,0
	strbuf db 5 dup (?)
data ends

stek segment stack
	dw 128 dup (?)
stek ends
code segment
assume cs: code, ds:data, ss: stek
start:
mov ax, data
mov ds, ax

call inputhex
	
call outputbin

mov ah,1
int 21h
mov ax, 4c00h
int 21h

; подпрограмма вывода числа в двоичном виде
; в ax число
OutputBin proc 
	push cx
	push ax
	mov cx,16 ; число битов
out_loop:
	rcl ax,1 ; смещаем на 1 бит влево, этот бит в cf
	push ax
	mov ah,2
	mov dl,48 ; выводим 0
	jnc out_0 ; если cf =0
    mov dl, 49 ; иначе выводим 1
	out_0:
	int 21h 
	pop ax
loop out_loop
	pop ax
	pop cx
	ret 
OutputBin endp

; подпрограмма ввода 16-го числа
; в ax результат
InputHex proc near
	push bx 
	push cx 
	push dx 
	push si 
	mov dx,offset strdsc ; начало буфера со строкой
	mov ah,0Ah 
	int 21h ; чтение сторки в буфер
	mov dl,0Ah 
	mov ah,2  ; перенос строки
	int 21h
	xor ax,ax 
	xor cx,cx

	mov cl,[strdsc+1] ; количество символов в строке
	mov si,offset strbuf ; продолжение буфера
	mov bx,16  ; число для умножения
s1:	
	mul bx ; умножаем ax на 16
	mov dl,[si] ; символ из строки
    cmp dl,64
jg s2
	sub dl,48  ; вычитаем из кода символа чтобы получить число
jmp end_1
s2:
	sub dl,55
end_1:	
	add ax,dx ; складываем числа
	inc si ; переход к следующему символу	
loop s1 ; цыкл перевода строки
	pop si
	pop dx
	pop cx
	pop bx
	ret
InputHex endp

code ends
end Start
Т.к. программу составлял частями, а ввод числа можно сказать тупо копирнул.

В буфер у нас записываются числа, которые мы вводим. Но со строчки mov bx,16
У меня возникают проблемы, с какой целью мы сравниваем аски код, например 64.
Здесь sub dl,48 мы вычитаем сам код, чтобы потом получилось у нас 16-е число?
Вот в таких мелочах я что-то запутался, прошу маленько помочь.
Заранее благодарен.
mosxe вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ввод числа bize Microsoft Office Excel 3 07.06.2012 21:41
ввод/вывод числа Corus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 06.12.2011 15:38
Автоматический ввод проверочного числа nitroden Общие вопросы .NET 1 07.10.2010 18:02
Ввод и вывод числа Strogg Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.03.2009 17:44