- •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 ;распечатать
Int 21h ;распечатать
cmpbx, sp ;это последнее число, положенное в стек?
jneNextDig ;если нет - продолжить печать
popa
ret
print_decendp
;Процедура перевода курсора на новую строку
;Вход/Выход: -
new_line proc near
pusha
movah, 02h ;функция печати символа
movdl, 0Ah ;Перевод строки
int 21h
movdl, 0Dh ;Возврат каретки
int 21h
popa
ret
new_lineendp
endstart
23.Екікез-келгенондықоңбүтінсандардықосубағдарламасынжазыңыз. Бағдарламаныңәрқадамыбойыншабағдарламаланатын регистрлердегіоперацияорындалубарысыжайындатүсініктемежазыңыз.
Summa
.model tiny
.code
org 100h
start:
call scanToBuffer
call translateFromSymToNum
push ax
call scanToBuffer
call translateFromSymToNum
xor si,si
mov si,ax
pop ax
push ax
mov ah,9
mov dx,offset message2
int 21h
pop ax
; қосуды жүзеге асыру
add ax,si
call printFromAX
ret
scanToBuffer:
; пернетақтадан сандарды енгізу
mov dx,offset message1
mov ah,9
int 21h
mov dx,offset buffer
mov ah,0Ah
int 21h
mov dx,offset crlf
mov ah,9
int 21h
ret
translateFromSymToNum:
; ASCII-форматтағы санды буферденАХ–тегі бинарлы санға ауыстыру
xor di,di
xor ax,ax
mov cl,blength
xor ch,ch
xor bx,bx
mov si,cx
mov cl,10
xor bp,bp
cloop1:
mov bl,byte ptr bcontents[di]
cmp bl,'-'
jnz dalee1
mov bp,1
jmp short dalee2
dalee1:
sub bl,'0'
jb mes_error
cmp bl,9
ja mes_error
mul cx
add ax,bx
dalee2:
inc di
cmp di,si
jb cloop1
cmp bp,1
jnz dalee3
call reverse1
dalee3:
ret
reverse1:
not ax
add ax,1
ret
printFromAX:
; АХрегистрінен экранға санды шығару
push ax
mov si,ax
and si,8000h
cmp si,0
jz dalee4
call reverse2
dalee4:
mov si,10
mov di,0
cloop2:
xor dx,dx
div si
push dx
inc di
cmp ax,0
ja cloop2
mov cx,di
cloop3:
pop dx
add dl,'0'
mov ah,2
int 21h
loop cloop3
pop ax
ret
reverse2:
push ax
push dx
mov dl,'-'
mov ah,2
int 21h
pop dx
pop ax
call reverse1
ret
mes_error:
mov dx,offset err_msg
mov ah,9
int 21h
ret
message1 db 'Enter decimal number: $'
message2 db 'Result is: $'
err_msg db 'Bad number entered'
crlf db 0Dh,0Ah,'$'
buffer db 6
blength db ?
bcontents:
end start
24.Кез-келгенекіекілікоңбүтінсандардыкөбейтубағдарламасынжазыңыз. Бағдарламаныңәрқадамыбойыншабағдарламаланатын регистрлердегіоперацияорындалубарысыжайындатүсініктемежазыңыз.
.model tiny .code org 100h start: call scanToBuffer call translateFromSymToNum push ax call scanToBuffer call translateFromSymToNum xor si,si mov si,ax pop ax push ax mov ah,9 mov dx,offset message2 int 21h pop ax ; қосудыжүзегеасыру add ax,si OutBin proc mov bx,ax mov cx,16 ob1: shl bx,1 jc ob2 mov dl,'0' jmp ob3 ob2: mov dl,'1' ob3: mov ah,2 int 21h loop ob1 OutBin endp ret scanToBuffer: ; пернетақтадансандардыенгізу mov dx,offset message1 mov ah,9 int 21h mov dx,offset buffer mov ah,0Ah int 21h mov dx,offset crlf mov ah,9 int 21h ret translateFromSymToNum: ; ASCII-форматтағысандыбуферденАХ–тегібинарлысанғаауыстыру xor di,di xor ax,ax mov cl,blength xor ch,ch xor bx,bx mov si,cx mov cl,10 xor bp,bp cloop1: mov bl,byte ptr bcontents[di] cmp bl,'-' jnz dalee1 mov bp,1 jmp short dalee2 dalee1: sub bl,'0' jb mes_error cmp bl,9 ja mes_error mul cx add ax,bx dalee2: inc di cmp di,si jb cloop1 cmp bp,1 jnz dalee3 call reverse1 dalee3: ret reverse1: not ax add ax,1 ret printFromAX: ; АХрегистріненэкранғасандышығару push ax mov si,ax and si,8000h cmp si,0 jz dalee4 call reverse2 dalee4: mov si,10 mov di,0 cloop2: xor dx,dx div si push dx inc di cmp ax,0 ja cloop2 mov cx,di cloop3: pop dx add dl,'0' mov ah,2 int 21h loop cloop3 pop ax ret reverse2: push ax push dx mov dl,'-' mov ah,2 int 21h pop dx pop ax call reverse1 ret mes_error: mov dx,offset err_msg mov ah,9 int 21h ret message1 db 'Enter decimal number: $' message2 db 'Result is: $' err_msg db 'Bad number entered' crlf db 0Dh,0Ah,'$' buffer db 6 blength db ? bcontents: end start
25.Бүтін санды А массиві берілген. Олардың ішінен айырымы ең үлкеніне тең болатын екі элементтерді табу керек. Бағдарламаның әр қадамы бойынша бағдарламаланатын регистрлердегі операция орындалу барысы жайында түсініктеме жазыңыз.
data segment
A dw 1,250, -370, 5, 7, -128, -86, -120, 97, 8
A_len equ ($ - A) / 2
n1 dw ?
n2 dw ?
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
movax, @data
movds, ax ;инициализация сегмента данных
mov es, ax
mov di, A_len - 1 ;длина
xorbx, bx
decbx ;текущий минимальный модуль разницы
NextIter:
shldi, 1 ;масштабирование на размер элементов
movdx, wordptr [A + di] ;элемент, с которым будут сравниваться остальные
shrdi, 1
movcx, di ;число элементов для сравнения
movsi, offsetA ;адрес начала массива
NextCheck:
lodsw
sub ax, dx ;разница
jnsNotNeg
negax ;модуль разницы (для отрицальтельных)
NotNeg:
cmp ax, bx
jnb NotSwap
movbx, ax ;если текущий модуль меньше -
movax, wordptr [si - 2] ;заменить минимальный на текущий
movwordptr [n1], ax ;сохранить пару чисел
mov word ptr [n2], dx
NotSwap:
loop NextCheck
dec di
jne NextIter
mov dl, ' '
mov ax, word ptr [n1]
callprint_dec ;печать первого числа
mov ah, 2h
int 21h ;пробел
mov ax, word ptr [n2]
call print_dec ;второе число
mov ax, 4c00h
