Преобразование двухбайтных чисел в стрмнгн ■ стрмнгов в двухбайтные числа.
111 rmniiiiuiiniiiiiiiiiiiiiiii'
Довольно часто при программировании в невинных кодах приходится выводить иа вкраи числа, записанные в паияти компьютера в двухбайтной виде или переводить введенное по цифраи число в двухбайтную форму.
Приведенные нияе две процедуры реаают эти задачи. Первая процедура (Листинг 1) в строке 40 считывает исходное двухбайтное число нэ ячеек 23->28 и 23729.
Далее происходит следующее: в регистровую пару DE загружается число 6SS36-10000, т.е. SSS36. Процедура SIGN складывает содер-кииое HL с содерхииым DS, фактически, уиеньаая содеряимое HL на 10000. При этой яклвчается счетчик я регистре С (увеличенный на 4В для получения ASCI I кодов). Если содеркииое ML больве 10000 (флаг CARRY включен), то продолжается сложение. Если же при очередной сложении переполнения HL не получается, то в строках 210-280 содеркииое HL увеличивается иа 10000 и становится реально иеиьае 10000. В итоге иы а регистре С получаем ASCII-код первой цифры пятиразрядного числа, иакодяяегося в HL. Далее те ж» действия происходят для 2-ой, З-вЯ и 4-ой цифр. Последижл цифра выводится уже непосредственно процедурой PRINT. Для вывода на
['"ТАТтТ'ТАТАТАЧ^АТ'ТтТАТтЧТ"'!
11111111
'^"aiaiaiiwiii'^fluuwa1
команда RST «10.
Коса* ассемблерного дмстимга приводится дамп невинных кодов с контрольными суммами.
00010 00020 ОООЗО 00040 00050 00060 00070 00080 00090 00100 00110 00120 00130 00140 00150 00160 00170 00180 00190 00200 00210 00220 00230 00240 00250 00260 00270 00280 00290 00300 00310 00320 00330 00340 00350 00360 00370 00380 00390
Листинг 1
NUM
ORG 32500 EQU 23728
LO HL,(NUM) L0 DE,55536 CALL SIGN LO OK.64536 CALL SIGN LD DE,65436 CALL SIGN LD DE,65526 CALL SIGN LD A.L ADD A,«30 CALL PRINT RET
LO С.Я2Г INC С ADD HL.DE JR С.LOOP LO A.D CPL LO D.A LD E.A CPL
LD E.A INC DE ADD HL.DE LD А.С CALL PRINT RET
PUSH HL PUSH DE PUSH ВС RST »10 POP ВС POP DE POP HL RIT
7KP4 7EPC 7P04
7 РОС 7Г14 7Г1С 7P24
7P2C
Даип мавинных кодов:
2A 80 SC 11 ГО D8 CD 16:64 7F 11 18 PC CD 16 7P 11:91 9C ГГ CD 16 7Г 11 Г6 ГГ:86 CD 16 7Г 7D C6 30 CD 29:56 7Г C9 0E 2Г 0C 19 38 ГС:71 7A 2Г 57 7B 2Г 5Г 11 19:00 79 CD 20 7Г С9 ES BS CS:D9 D7 Cl 01 El С9 00 00 00:BE
выполняет действия, обратные тан,
которые производит первая проце- 00010
дура. 00020
Предполагается, что стринг, 00030
пзобраяающий число, находится с 00040
адреса 23296 и запыхается кодой 00050
13. 00060
На первой ааге цикла 60-200 в 00070
регистровую пару ВС попадает со- 00080
держииое аккумулятора. Затаи суи- 00090
иируется содеряииое регистровых 00100
пар HL и ВС. 00110
На второй шаге в строках 00120
100-150 происходит, фактически, 00130
уинэхение содержимого HL на 10. 00140
Далее а регистровую пару ВС эасы- 00150
лается содержиное аккунулятора и 00160
ас6 повторяется снова. 00170
Проверка на конец стринга про- 00180
изводится в строках 60-70 и если 00190
конец достигнут, то выполняется 00200 переход на конец процедуры. При
этой содержиное HL помещается в 00210
ячейку 23728. 00220
Посла ассеиблериого листинга приводится дяип иаяинных кодов с контрольными сумиами.
Следует отметитв, что процеду- 7ГЗА
ры ассемблированы почти подряд, 7Г42
что позволяет их использовать как 7Г4А
общий блок кодов длиной 100 байт. 7Р52 При этой нужно обращать вмииание на корректное использование паияти обеини процедурами,
ORG 32570 EQU 23296 EQU 23728 LD HL, 0 LD DE.STRING LD A,(DE) CP ROD JR X.END SOB «30 ADD HL.HL LD B.H LD C.L ADD HL.HL ADD HL.HL ADD HL,ВС LD В.Я00 LD C.A ADD HL.BC INC DE JR NEXT
LD (NUM).HL RET
END
Дамп маямииых кодов:
: 21 00 00 11 00 SB 1A FF:SE
: 0D 28 OF D6 30 29 44 4D:CS
: 29 29 09 06 00 4F 09 13:95
: 18 EC 22 80 SC C9 00 00:CC