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

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

.model small

.386

.stack 100h

.data

N DW 1

.code

START: mov ax, @data

mov ds, ax

xor ax, ax

mov ax, N

mov bx, N

fact: inc bx

mul bx

jo print

jmp fact

print: xor ax, ax

mov dx, bx

add dl, 30h

mov ah, 2

int 21h

MOV AX, 4C00h

INT 21h

END START

5Написать программу на языке ассемблер, которая осуществляет ввод с клавиатуры в память компьютера посимвольно строку символов длины L, упорядочивает введенные символы по порядку возрастания ASCII кодов

.model small

.stack 100h

.data

L DW 7

a DB 7 dup(?)

.code

START: mov ax, @data

mov ds, ax

xor ax, ax

mov bx, offset a

mov cx, bx

add cx, L

vvod: mov ah, 1

int 21h

mov [bx], al

inc bx

cmp bx, cx

jl vvod

sub bx, L

mov dx, cx

dec cx

xor ax, ax

sort: mov si, bx

inc si

sort2: mov al, [si]

cmp al, [bx]

jl zamena

inc si

cmp si, dx

jl sort2

jmp next

zamena:mov al, [si]

mov ah, [bx]

mov [si], ah

mov [bx], al

inc si

cmp si, dx

jl sort2

next: inc bx

cmp bx, cx

jl sort

mov bx, offset a

print: mov dl, [bx]

mov ah, 2

int 21h

inc bx

cmp bx, dx

jl print

mov ax, 4C00h

int 21h

END START

6Написать программу, в которой определены натуральные числа , размерностью двойные слова(4 байта) x и y. Написать подпрограмму, которая находит максимальное из них. Параметры и результат передаются через стек

.model small

.stack 100h

.data

x dd 10000h

y dd 14532h

z dd ?

.code

start:

mov ax, @data

mov ds, ax

mov bx, offset x

push [bx]

mov bx, offset y

push [bx]

mov bx, offset x+2

push [bx]

mov bx, offset y+2

push [bx]

call mimi

mov bx, offset z+2

pop [bx]

mov bx, offset z

pop [bx]

mov ax, 4C00h

int 21h

mimi proc

pop dx

pop ax

pop bx

cmp ax, bx

jb k1

ja k2

mov cx, ax; нужный старший записали сразу в сх

pop ax

pop bx

cmp ax, bx

jb finish

mov bx, ax

jmp finish

k1: mov cx, bx; старшая часть в сх

pop ax; достаём ненужный у

pop bx; достаём младшую часть числа

jmp finish

k2: mov cx, ax; записываем старшую часть в сх

pop bx

pop ax

jmp finish

; по окончанию старшая часть числа в сх, а младшая в bx, а мы это дело, потом, в стек закидываем

finish: push bx

push cx

push dx; адрес возврата

ret

mimi endp

end start