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

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

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