Другие языки программирования и технологии
кто умеет переводить с 16-ричной на десятичную и наоборот также на двочные каким образом
Тебе на печать чтоле? Ну лови.
PUBLICL2S
COMMENT |
Подпрограмма преобразования числа в строку. Числа - длинные целые
(LongInt в Паскале, long в Cи, DWORD в ассемблере) . Для работы с числами
меньшей длины нужно явно преобразовывать их в формат DWORD
(по-разному для знаковых и беззнаковых) :
Байт со знаком:
MOVAL, [Байт]
CBW
CWD
Беззнаковый байт:
MOVAL, [Байт]
XORAH, AH
CWD
Слово со знаком:
MOVAX, [Слово]
CWD
Беззнаковое слово:
MOVAX, [Слово]
XORDX, DX
(C) 1992 A.Ilin
|
;==============================================================================
L2Sprocnear
COMMENT |
Преобразует знаковое длинное целое (DWORD) в текстовое представление без
ведущих нулей (со знаком "минус" перед числом, если оно отрицательное и
основание системы счисления равно 10).
Вход: DX:AX = преобразуемое число,
CX = основание системы счисления (от 2 до 16),
ES:DI = адрес начала буфера для результата (до 12 байтов) .
Выход: ES:DI = не изменяется,
AL = длина строки-результата (в байтах) .
Портит: AX, BX, CX, DX, SI;
очищает флаг Direction.
Ограничения: Правильность задания основания системы счисления не
проверяется, для значения вне диапазона 2..16 результат
не гарантируется.
|
pushds
movbl, 1
pushdi
cld
xchgbx, ax
oral, al
jzL2S@1
cmpcx, 10
jneL2S@1
ordx, dx; negative (only for radix = 10) ?
jnsL2S@1
moval, '-'; store 'minus' sign for decimal negative
stosb
negbx
adcdx, 0; convert to positive
negdx
L2S@1:
movsi, di; beginning of number image
L2S@4:
xchgdx, ax
xordx, dx
orax, ax
jzL2S@2
divcx
L2S@2:
xchgbx, ax
divcx
xchgdx, ax
xchgbx, dx
addal, '0'
cmpal, '9'; is it numeric char ?
jbeL2S@3
addal, 'A'-'0'-10; no - convert to hex digit A..F
L2S@3:
stosb; store digits in reverse order
movax, dx
orax, bx
jnzL2S@4; convert next digit
movcx, di
pushes
popds
L2S@5:; end of conversion - reverse string
decdi; advance end index to previous character
lodsb; load char from beginning and advance addr.
xchg[di], al
mov[si-1], al; exchange ends of string
leaax, [si+1]
cmpax, di; done ?
jbL2S@5; no - continue reversing
popdi; yes - restore string starting address
subcx, di
moval, cl; AL = string length
popds
ret
L2Sendp
Это под дос ессно. Под Flat сам переделывай.
PUBLICL2S
COMMENT |
Подпрограмма преобразования числа в строку. Числа - длинные целые
(LongInt в Паскале, long в Cи, DWORD в ассемблере) . Для работы с числами
меньшей длины нужно явно преобразовывать их в формат DWORD
(по-разному для знаковых и беззнаковых) :
Байт со знаком:
MOVAL, [Байт]
CBW
CWD
Беззнаковый байт:
MOVAL, [Байт]
XORAH, AH
CWD
Слово со знаком:
MOVAX, [Слово]
CWD
Беззнаковое слово:
MOVAX, [Слово]
XORDX, DX
(C) 1992 A.Ilin
|
;==============================================================================
L2Sprocnear
COMMENT |
Преобразует знаковое длинное целое (DWORD) в текстовое представление без
ведущих нулей (со знаком "минус" перед числом, если оно отрицательное и
основание системы счисления равно 10).
Вход: DX:AX = преобразуемое число,
CX = основание системы счисления (от 2 до 16),
ES:DI = адрес начала буфера для результата (до 12 байтов) .
Выход: ES:DI = не изменяется,
AL = длина строки-результата (в байтах) .
Портит: AX, BX, CX, DX, SI;
очищает флаг Direction.
Ограничения: Правильность задания основания системы счисления не
проверяется, для значения вне диапазона 2..16 результат
не гарантируется.
|
pushds
movbl, 1
pushdi
cld
xchgbx, ax
oral, al
jzL2S@1
cmpcx, 10
jneL2S@1
ordx, dx; negative (only for radix = 10) ?
jnsL2S@1
moval, '-'; store 'minus' sign for decimal negative
stosb
negbx
adcdx, 0; convert to positive
negdx
L2S@1:
movsi, di; beginning of number image
L2S@4:
xchgdx, ax
xordx, dx
orax, ax
jzL2S@2
divcx
L2S@2:
xchgbx, ax
divcx
xchgdx, ax
xchgbx, dx
addal, '0'
cmpal, '9'; is it numeric char ?
jbeL2S@3
addal, 'A'-'0'-10; no - convert to hex digit A..F
L2S@3:
stosb; store digits in reverse order
movax, dx
orax, bx
jnzL2S@4; convert next digit
movcx, di
pushes
popds
L2S@5:; end of conversion - reverse string
decdi; advance end index to previous character
lodsb; load char from beginning and advance addr.
xchg[di], al
mov[si-1], al; exchange ends of string
leaax, [si+1]
cmpax, di; done ?
jbL2S@5; no - continue reversing
popdi; yes - restore string starting address
subcx, di
moval, cl; AL = string length
popds
ret
L2Sendp
Это под дос ессно. Под Flat сам переделывай.
вас интересует вручную или на калькуляторе?
Здесь гляньте - http://www.arbinada.com/pmk/node/39
Я умею. :) Зайди в калькулятор, выбери инженерный, Dec - десятичный, hex - шеснадцатиричный
Похожие вопросы
- Как переводить из 16-ричной системы счисления в восьмеричную?
- Как написать программу для перевода числа с 8-ричной в 16-ричную систему? (язык Pascal или delphi в крайнем случае C++)
- Максимальная система счисления 16 ричная? Если нет, то как дальше считают? С помощью каких символов.
- Linux, bash: можно как-то работать с 16-ричными значениями?
- как переводить из 16-ную в 10-чную из 10-чную в 16-чную систему счисления на ассемблере без калькулятора
- Напомните, как переводить двоичное число в десятичное?
- как переводить числа из 26 ричной системы в 10ричную.. можете предоставить объяснение.. срочно нужно.. к зачету нужно
- Кто может кратко написать как перевести из 2-х счисления в 8-х, 16-х, 10-х. А также наоборот из 10-х,16-х,8-х в 2-х
- Как перевести число 753,(46) из 8-ричной системы счисления в 6-ричную?
- Как перевести из 16-и ричной системы любое число в 2-ую, 8-ую и 10-ую системы счисления?