Решение задач по математике | Решение задачи по ассемблеру | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Решение задачи по ассемблеру


Системное программирование

Задание 3

Текст задания

Задание 3.1. В регистре AX задано число от 0 до 65535. Выведите это число на экран.

Задание 3.2. Используя 32-битные регистры процессора, напишите программу, выводящую на экран число 65536.

Задание 1

Текст программы

.model small

.stack 100h

.386 ;Разрешение трансляции команд процессора 386

.code

start:

mov ax, 65530 ;Заносим число 65530 в регистр AX

mov bx, 10 ;Заносим основание системы счисления, равное 10, в регистр BL

mov cx, 0 ;значение CX обнулятется

label1: mov dx, 0 ;устанавливается метка label1, значение DX обнуляется

div bx ;деление AX на BX

push dx ;сохранение значения регистра DX в стеке

add cx, 1 ;добавление к CX единицы

cmp ax, 0 ;сравнение AX с нулём

jnz label1 ;если условие выполняется, то переход на метку label1

label2: pop dx ;метка label2, сохранение DX в стеке

call print ;вывод DL на экран

loop label2 ;повторение с метки label2, пока значение CX не станет равно нулю

mov ax,4C00h ;завершение программы

int 21h

print proc ;процедура для вывода значения DL на экран

push ax

mov ah, 02h

add dl, 30h

int 21h

pop ax

ret

print endp

end start

Задание 2

Текст программы

.model small

.stack 100h

.386

.code

start:

mov eax, 65536 ;Заносим число 65536 в регистр EAX

mov bx, 10 ;Заносим основание системы счисления, равное 10, в регистр BX

mov cx, 0 ;значение CX обнулятется

label1: mov edx, 0 ;устанавливается метка label1, значение EDX обнуляется

div ebx ;деление EAX на EBX

push edx ;сохранение значения регистра EDX в стеке

add cx, 1 ;добавление к CX единицы

cmp eax, 0 ;сравнение EAX с нулём

jnz label1 ;если условие выполняется, то переход на метку label1

label2: pop edx ;метка label2, сохранение EDX в стеке

call print ;вывод DL на экран

loop label2 ;повторение с метки label2, пока значение CX не станет равно нулю

mov eax, 4C00h

int 21h

print proc

push eax

mov ah, 02h

add dl, 30h

int 21h

pop eax

ret

print endp

end start

Контрольные вопросы

1.  По какой схеме выполняется операция деления?

Ответ: Байтовая команда делит 16-битовое делимое на 8-битовый делитель. Делимое находится в регистре AX. В результате деления получается два числа: частное помещается в регистр AL, а остаток – в AH.

2.  Как формируется машинный код для команд безусловного перехода типа SHORT, NEAR и FAR?

Ответ: Безусловному переходу соответствует команда JMP, она осотовляется по шаблону «jmp метка». Эта команда может осуществлять переход вплоть до 32768 байт. Если команда, на которую делается переход находится в том же сегменте памяти, что и команда jmp – переход называется внутрисегментным или ближним (near jmp). Если при этом адрес перехода находится в пределах от -128 до +127 байтов от команды jmp – такой переход называется коротким (short jmp). При использовании short jmp и near jmp изменяется только значение в регистре IP. Если команда находится в каком-либо другом сегменте программы – такой переход называется межсегментным или дальним (far jmp) – изменяется значение в регистре IP, а также значение CS.

3.  Каковы условия перехода для чисел со знаком и для чисел без знака?

Ответ: Чтобы сделать из положительного числа отрицательное, необходимо инвертировать все его биты и затем к младшему разряду прибавить единицу.

4.  С помощью команд условного и безусловного перехода выполните программную реализацию алгоритма ветвления для определения наименьшего числа из двух заданных.

R1 — первое число хранится в регистре AX;
R2 — второе число хранится в регистре BX;
R3 — результат заносится в регистр DX;

vr2, cont — метки команд.

Ответ:

cmp ax, bx

jl vr2

mov dx, bx

jmp cont

vr2: mov dx, ax

cont:

5.  Какие действия выполняют команды организации цикла?

Ответ: При каждой встрече с оператором loop, ассемблер сравнивает регистр CX с нулём, и если он ему не равен, то значение CX уменьшается на 1 и происходит переход к нужной метке.

6.  Какой диапазон образуют знаковые числа, которые можно умножать на 2 путем сдвига в одном байте?

Ответ: (n+1) – разрядный прямой код (n цифровых разрядов и один знаковый) позволяет представлять целые числа в диапазоне

[-(2n-1); 2n-1].

7.  Как с помощью команды сдвига проверить содержимое регистра AH на четность?

Ответ: Командой shr ah, 1 выполнить логический сдвиг вправо на 1 и затем узнать значение флага CF. Если он = 1, то число чётное, в противном случае – нечётное.

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020