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

ms: ;создание чисел из разрядов числа т.к. считывание с клавиатуры происходит поразрядно

xor dx,dx

mul x

xor dx,dx

mov dl,middle1[bx]

add ax,dx

inc bx

inc ch

cmp ch,03h

jle ms

mov y, bx

mov bx, z

mov middle2[bx], ax

xor ax,ax

inc bx

inc bx

mov z, bx

mov bx, y

inc cl

xor ch, ch

cmp cl, 09h

jle ms

Данный кусок программы предназначен для создания из массива middle1, содержащего 40 однобайтных чисел, массива middle2, состоящего из 10 двухбайтных чисел!!!! блеа

В основу данного фрагмента программы положен принцип умножения четырехбитного двоичного числа (от 0 до 15) на 16 (в шестнадцатеричном виде 16=10h= «х» переменная, объявленная в начале).

Дело в том, что у нас есть четыре числа со значениями от 0 до 15 или от 0000 до 1111; из них мы должны получить одно двухбайтовое число. Например у нас есть числа 1, A, 9, C, которые мы объединяем в число 1A9Ch (h на конце значит в шестнадцатеричном виде).

Особенность умножения на 16, покажу на примере:

14= 0000 1110 (14=000Dh)

14*16=1110 0000 (14*16= 00D0h)

Таким образом видим, что при умножении на 16 разряды смещаются в лево, оставляя после себя нули.

Еще раз о том, как работает данный фрагмент программы!

Например, нам надо превратить четыре бита 1 A 9 С, в двухбайтное число 1А9С.

Алгоритм:

  1. Создаем число 0000 0000 0000 0000 = 0000h

  2. Прибавляем к нему 1 0000 0000 0000 0001 = 0001h

  3. Смещаем, умножая на 16 0000 0000 0001 0000 = 0010h

  4. Прибавляем A 0000 0000 0001 1010 = 001Ah

  5. Cмещаем, умножая на 16 0000 0001 1010 0000 = 01А0h

  6. Прибавляем 9 0000 0001 1010 1001 = 01А9h

  7. Смещаем, умножая на 16 0001 1010 1001 0000 = 1А90h

  8. Прибавляем С 0001 1010 1001 1101 = 1А9Сh

ну чтож …. перейдем к программе

ms: ;создание чисел из разрядов числа т.к. считывание с клавиатуры происходит поразрядно

xor dx,dx ;dx = 0

mul x ; mul это операция умножения с одной особенностью, результат идет

; в регистр АХ. То есть АХ=АХ * Х.

; В ввиду того, что х=16, выполняется смещение

xor dx,dx ;dx = 0 (НАХРЕНА еще раз? не знаю)

mov dl,middle1[bx] ;Записываем в регистр dl число (одно из четырех)

add ax,dx ; Прибавляем в конец число. Например из 0000h получаем 0001h

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

inc ch ; увеличиваем сh на 1

cmp ch,03h ; сравниваем ch c числом 3

jle ms ; повторяем процедуру «ms» ровно четыре раза (пока ch <= 3)

mov y, bx ;перемещаем в ‘у’ значение регистра bx (НАХУА)

mov bx, z ;перемещаем в регистр bx значение переменной ‘z’ (изначально

; равной нулю) (НАХУА)

mov middle2[bx], ax ;записываем получившееся в регистре АХ наше 4-х значное 2-х

;битное число, получившееся в результате прибавления и смещения,

; например 1А9Сh, в массив middle2.

xor ax,ax ; очищаем регистр АХ, для создания в памяти следующего числа

inc bx ; увеличиваем bx на 1. Регистр bx хранит номер числа в массиве

; middle2, т.е. меняется от 0 до 19, т.к. всего 10 чисел по 2 байта

inc bx ; увеличиваем bx на единицу так как 10 чисел по 2 байта

mov z, bx ; перемещаем значение из регистра bx в переменную Z (НАХУА)

mov bx, y ; перемещаем значение переменное у в регистр bx (НАХУА)

inc cl ; увеличиваем cl на 1, этот регистр меняется от 0 до 9 и хранит число

; циклов. Всего 10 повторов, т.к. 10 слов.

xor ch, ch ; ch = 0, регистр ch хранит номер 4

cmp cl, 09h ; следим за числом повторов, путем сравнения cl (от 0 до 9) с чисом 9

jle ms ; если меньше, либо равно, то возращаемся к метке ms (и так 10 раз,

; для каждого из слов)

; (НАХУА) – считаю, что можно обойтись без этого и сделать проще

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