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

9.Жолдан әр төртінші символды жойып отыруға мүмкіндік беретін бағдарлама құрыңыз. Қорытындысын жаңа жолда сақтау қажет.

model tiny

.code

org 100h

start:

mov dx, offset message1

mov ah, 9

int 21h

mov dx, offset buf

mov ah, 0Ah

int 21h

mov dx, offset message2

mov ah, 9

int 21h

mov cl, buflen

xor di, di

mov si, offset string

xor bp, bp

xor bx, bx

xor dx, dx

mov bp, 4

cloop1:

mov bl, offset bufcon[di]

inc di

xor dx,dx

mov ax, di

div bp

cmp dx,0

jz dalee

mov [si], bx

inc si

dalee:

loop cloop1

mov bl,'$'

mov [si],bx

mov dx, offset string

mov ah,9

int 21h

ret

message1 db 'Enter the string: $'

message2 db 0Dh, 0Ah, '$'

string db 100h dup(?)

buf db 16

buflen db ?

bufcon:

end start

10.Бүтін санды А массиві берілген. Олардың ішінен ең кіші болатын екі элементтерді табу керек. Бағдарламаның әр қадамы бойынша бағдарламаланатын  регистрлердегі операция орындалу барысы жайында түсініктеме жазыңыз.

data segment

array dw 29, 7, 2, 4, 88, 0Fh, 23, 18, 1, 10

array_size equ $ - array

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, @data ; Сегменттік деректердің адресін деректердің

mov ds, ax ; сегменттік регистріне жүктеу

;Для поиска 2 минимальных чисел удобно

;реализовать часть алгоритма сортировки выбором

;------------------

xor di, di ;индекс текущего минимального элемента

mov bx, array_size / 2 ;число элементов (каждый по 2 байта)

NextSortStep:

mov cx, bx ;число элементов для текущей итерации

lea si, [di + array] ;адрес начала массива

lodsw ;загрузить нулевой элемент

dec cx ;уменьшить оставшееся число элементов

mov dx, ax ;принять нулевой элемент за минимальный

CheckNext:

lodsw ;загрузить следующий элемент

cmp ax, dx ;текущий меньше минимального?

jge NotSwap ;если нет - не меняем

mov dx, ax ;иначе - меняем текущий минимальный

xchg word ptr [array + di], ax ;и элементы местами в памяти

mov word ptr [si - 2], ax

NotSwap:

loop CheckNext ;если не конец массива - продолжить поиск

dec bx ;уменьшить число оставшихся элементов

;(без отсортированной части)

add di, 2 ;новое начало массива (1 элемент - 2 байта)

cmp di, 2*2 ;уже отсортировано 2 элемента?

jne NextSortStep ;если нет - продолжить сортировку

;-----------------

mov ax, word ptr [array] ;первый минимальный

call print_dec ;печать

call new_line

mov ax, word ptr [array + 2];второй минимальный

call print_dec ;печать

call new_line

mov ax, 4c00h

int 21h

ends

;Печать числа в десятичной системе

;Вход:

; o AX - число

print_dec proc near

pusha ;сохранить значение регистров в стеке

mov cx, 10 ;основание системы счисления

mov bx, sp ;сохранить адрес верхушки стека

NextDiv:

xor dx, dx

div cx ;разделить число на 10 (отделение цифры)

or dl, 30h ;перевод цифры в ascii-код

push dx ;сохранить полученное число в стеке

test ax, ax ;если результат деления не ноль -

jne NextDiv ;то продолжать деление

mov ah, 02h ;функция печати символа

;достаем цифры со стека в обратном порядке

NextDig:

pop dx ;достать очередное число

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