Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Nachnem_zhe_razbor_sey.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.69 Mб
Скачать
  1. Шестой и седьмой абзацы

man: ;преобразование ASCII кода в числа в 16ричный формат

mov dl, input[bx] ;запись в dl ASCII-кода из массива input

cmp dl, 60h

jle man0

sub dl, 57h ;если разряд равен a..f, то вычесть из него 57h

jmp man2

man0: cmp dl, 40h ;сравнение разряда с 40h

jle man1

sub dl, 37h ;если разряд равен A..F, то вычесть из него 37h

jmp man2

man1: sub dl, 30h ;если разряд равен 0..9, то вычесть из него 30h

man2:

mov middle1[bx], dl

inc bx

inc cl

cmp cl, 27h

jle man

Еще раз, массив input хранит у нас 40 чисел, представляющих собой ASCII коды чисел и букв. Данная программа преобразует эти коды в числа: код «0» в число 0, код «1» в число 1, код «2» в число 2, …, код «А» или код «а» в число 10, код «В» или код «b» в число 11, код «С» или код «с» в число 12, код «D» или код «d» в число 13, код «E» или код «e» в число 14, код «F» или код «f» в число 15. Полученные после преобразования числа заносятся в массив middle1.

Посмотрим на таблицу ASCII кодов, согласно которой символы с 48 до 57 представляют собой число от 0 до 9; также символы с 65 по 70 представляют собой числа с 10(А) до 15(F); и символы с 97 по 102 представляют собой числа с 10(а) до 15(f).

Теперь разберем построчно программу:

man: ;преобразование ASCII кода в числа в 16ричный формат

mov dl, input[bx] ;запись в регистр dl ASCII-кода из массива input, bx – это номер числа,

;который меняется

cmp dl, 60h ; сравним номер ASCII-кода символа, введенного с клавиатуры,

; с числом 60h (96)

jle man0 ; если код символа меньше, либо равен 96, то перейдем к метке «man0»

; если номер кода меньше 97, то это не строчные буквы «а», «b», ... «f»

; а если номер кода соответствует «а», «b», ... «f», то от него

; необходимо отнять 87 (57h в шестнадцатеричной форме)

sub dl, 57h ; из регистра dl отнимаем 87 и в нем остается соответственно

; (97-87=10 и 102-87=15) число от 10 до 15

jmp man2 ; переход к метке процедуры «man2»

; после того как в регистре dl осталось число от 10 до 15, его

; необходимо записать в массив middle1 и увеличить bx на единицу

; ( bx – номер элемента массива input), что и происходит в процедуре

; «man2»

; вспомним строчку jle man0

man0: cmp dl, 40h ;сравнение регистра dl с числом 64 (40 h – в шестнадцатеричной

; форме), после которого идут заглавные буквы «A», «B», ... «F»

jle man1 ; если код символа в регистре dl меньше, либо равен 64, переходим к

; метке «man1» в тексте программы

sub dl, 37h ; а если код ASCII символа в регистре dl соответствует символам «A»,

; «B», … «F», то вычитаем из регистра dl число 55 (37h). В таком случае

; в регистре dl останется число от 10 до 15 (65-55=10 и 70-55=15).

jmp man2 ; переход к метке процедуры «man2»

; после того как в регистре dl осталось число от 10 до 15, его

; необходимо записать в массив middle1 и увеличить bx на единицу

; ( bx – номер элемента массива input), что и происходит в процедуре

; «man2»

; вспомним строчку jle man1

man1: sub dl, 30h ;если ASCII соответствует символам от «0» до «9», то отнимаем 48(30h)

; в результате в регистре dl остается число от 10 до 15.

; Согласно логике тут стоит строчка «jmp man2», которая упущена

; автором программы, ввиду того, что процедура «man2» описывается

; сразу ниже

man2: ; эта процедура вызывается тогда, когда в регистре dl осталось число

; от 0 до 15 (от 0 до F)

mov middle1[bx], dl ; записываем получившееся число из регистра в массив middle1 по

; элементу с номером bx

inc bx ; после чего увеличиваем номер элемента массива bx на 1

inc cl ; увеличиваем cl на 1

; так как у нас массив input насчитывает 40 чисел, повторяем эту

; процедуру «man» преобразования ASCII кода в 16-ричное число

; 40(27h) раз

cmp cl, 27h ; сравниваем номер раза в регистре cl с 40

; как по мне, то регистр cl использовать не обязательно, достаточно

; после «inc bx» написать сразу «cmp bx, 27h»

jle man ; если меньше, либо равно, то повторяем процедуру «man».

; После преобразования кодов в числа продолжаем программу

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]