- •1.A массивінің элементтері 0 және 1 сандары. Бұл массивті барлық бірлері массивтің басында, ал соңында нөлдері тұратындай етіп сұрыптаңыз.
- •4.Енгізілгенжолдыбасыпшығарушыбағдарламажазыңыз, әрцифрдыекіретқайталаукерек. Бағдарламаныңәрқадамыбойыншабағдарламаланатын регистрлердегіоперацияорындалубарысыжайындатүсініктемежазыңыз.
- •5.Массив элементтерін көбейтуге мүмкіндік беретін бағдарлама жазыңыз. Бағдарламаның әр қадамы бойынша бағдарламаланатын регистрлердегі операция орындалу барысы жайында түсініктеме жазыңыз.
- •7.Жолдан әр үшінші символды жойып отыруға мүмкіндік беретін бағдарлама құрыңыз. Қорытындысын жаңа жолда сақтау қажет.
- •9.Жолдан әр төртінші символды жойып отыруға мүмкіндік беретін бағдарлама құрыңыз. Қорытындысын жаңа жолда сақтау қажет.
- •Int 21h ;распечатать
- •11. Массив элементтерін қосуға мүмкіндік беретін бағдарлама жазыңыз. Бағдарламаның әр қадамы бойынша бағдарламаланатын регистрлердегі операция орындалу барысы жайында түсініктеме жазыңыз.
- •Int 21h ;завершение программы
- •Int 21h ;распечатать
- •14.A массивінің элементтері 0 және 1 сандары. Бұл массивті барлық нөлдері массивтің басында, ал бірлері соңында тұратындай етіп сұрыптаңыз.
- •Int 21h ;распечатать
- •22.БүтінсандыАмассивіберілген. Олардыңішіненеңүлкенболатынекіэлементтердітабукерек. Бағдарламаныңәрқадамыбойыншабағдарламаланатын регистрлердегіоперацияорындалубарысыжайындатүсініктемежазыңыз.
- •Int 21h ;распечатать
- •Int 21h ;завершение программы
- •Int 21h ;распечатать
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 ;достать очередное число
