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

7Напишите последовательность команд, корректно работающую со стеком без использования команд pop и push с применением базой индексной адресации и выполняющую перечисленные ниже задачи:

Вытолкнуть первые два элемента из стека, сложить их и поместить ре­зультат в стек.

Скопировать пятый элемент от вершины стека в регистр dx.

Удалить из стека 10 элементов.

.model small

.stack 100h

.data

.code

start:

mov ax, @data

mov ds, ax

mov si, 0

k1: sub sp, 2

mov bp, sp

mov [bp], si

inc si

cmp si, 11

jne k1

mov bp, sp

mov ax, [bp]

add bp, 2

add ax, [bp]

mov [bp], ax

mov sp, bp

mov bp, sp

add bp, 8

mov dx, [bp]

add sp, 20

mov ax, 4C00h

int 21h

end start

8Написать программу на ассемблере ia-16, вычисляющую максимальное значение числа n, при котором n!

не переполняет двойное слово

.model small

.386

.stack 100h

.data

.code

START: mov ax, @data

mov ds, ax

xor ax, ax

mov si, 1

mov bx, 1; тут будет храниться наш факториал

mov cx, 0

xor dx, dx

fact:

inc si

mov ax, cx

mul si

jo FINISH

mov cx, ax

mov ax, bx

mul si

mov bx, ax

add cx, dx

jo FINISH

jmp fact

FINISH:xor ax, ax

dec si; тут ответ

MOV AX, 4C00h

INT 21h

END START

9Написать программу на языке ассемблер ia-16, в которой определены две переменных х и у двойные слова и подпрограмму, вычисляющую разность х - у. Параметры передаются через стек процессора

.model small

.stack 100h

.data

x dd 1287432

y dd 0056363

otv dd ?

.code

start:

mov ax, @data

mov ds, ax

push ax; выделим место в стеке для того, чтоб записать туда ответ

push ax; сейчас закинули туда мусор

mov bx, offset y

push [bx]

push [bx + 2]

mov bx, offset x

push [bx]

push [bx + 2]

call mimi

pop ax

pop ax

pop ax

pop ax

mov bx, offset otv

pop [bx + 2]

pop [bx]

mov ax, 4C00h

int 21h

mimi proc

mov bp, sp

mov ax, [bp + 4]

sub ax, [bp + 8]

mov [bp + 12], ax

jnc k1

mov bx, 1

jmp k2

k1:

mov bx, 0

k2:

mov ax, [bp + 2]

sub ax, [bp + 6]

sub ax, bx

mov [bp + 10], ax

ret

mimi endp

end start

13Написать программу для ввода с клавиатуры натурального числа порядка n с последующим его преобразованием в машинное представление

.model small

.stack 100h

.data

.code

start:

mov ax, @data

mov ds, ax

xor cx,cx

read:

mov ax, 0

mov ah, 01h

int 21h

mov ah, 0

cmp al, 30h

jb k1

cmp al, 39h

ja k1

sub al, 30h

mov bx, ax

mov ax, cx

mov cx, 10

mul cx

mov cx, ax

add cx, bx

jmp read

; в сх ответ

k1: MOV AX, 4C00h

INT 21h

END START