Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачи(решённые)2.3.4 лабы.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
103.22 Кб
Скачать
  1. Ввести с клавиатуры два натуральных числа. Проверить есть ли у них одинаковые цифры. Если да, вывести их на экран. Преобразование строки в число произвести с помощью макрокоманды

input macro inter,var

mov ah,inter

lea dx,var

int 21h

endm

ravnchifr MACRO str1,str2,col1,col2

local l1,l2,l3

lea si,str1

xor ch,ch

mov cl,col1

l1:

lea di,str2

push cx

mov cl,col2

l2:

mov al,[si]

cmp al,[di]

jnz l3

mov ah,02h

mov dl,al

int 21h

l3:

inc di

loop l2

pop cx

inc si

loop l1

ENDM

codes SEGMENT para 'code'

assume cs:codes,ds:codes,es:codes,ss:codes

org 100h

main:

jmp begin

chislo1 db 20,?,20 dup (?)

chislo2 db 20,?,20 dup (?)

mes db 13,10,'Одинаковые цифры : ','$'

mespr db 13,10,'Введите пожалуйста число : ','$'

begin:

input 09h,mespr

input 0ah,chislo1

input 09h,mespr

input 0ah,chislo2

input 09h,mes

ravnchifr chislo1+2,chislo2+2,chislo1+1,chislo2+1

mov ah,4ch

int 21h

codes ends

end main

  1. Напишите программу, в которой вводится массив целых чисел. С помощью макроса отсортируйте массив любым известным алгоритмом.

obmen macro ch1,ch2

mov mas[si], ch2

mov mas[si+1], ch1

;mov temp,ch1

;mov ch1,ch2

;mov ch2, temp

endm

codesg segment para 'code'

assume cs:codesg, ds:codesg, ss:codesg, es:codesg

org 100h

begin:

call start

message db 'Vvedite elementi massiva ', '$'

mas db 15 DUP ('$')

start proc near

mov ah, 00h ; очистка экрана

mov al, 03h ;

int 10h

mov cx,14

mov dh, 00 ; установка курсора

mov dl, 01

mov bh, 00

mov ah, 02h ; вызов прерывания

int 10h

mov ah, 09h ; вывод на экран message

lea dx, message

int 21h

mov si,0

b:

mov ah, 01h ; ввод строки по одному символу

int 21h

mov mas[si], al

inc si

Loop b

mov di,0

mov cx,14

push dx

push ax

b2: push cx

mov cx,13

mov si,0

b1: mov dl, mas[si]

mov al, mas[si+1]

cmp dl, al

JGE m1

Jmp m2

m1: obmen dl,al

m2: inc si

Loop b1

pop cx

inc di

Loop b2

pop ax

pop dx

mov dh, 02 ; установка курсора

mov dl, 04

mov bh, 00

mov ah, 02h ; Вызов прерывания

int 10h

lea dx, mas

mov ah, 09h

int 21h ; Вывод введенной строки

mov ah,08

int 21h

mov ah,4ch

int 21h

start endp

codesg ends

end begin

  1. Дана длина ребра куба. Найти площадь грани.

vvod macro s, fun ;ввод и вывод символов

mov ah, fun

lea dx, s

int 21h

endm

Convert MACRO Text, num

LOCAL m1

XOR ax, ax

XOR cx, cx

xor dh,dh

MOV cl, real

MOV di, 10

LEA bx, Text

m1:

MUL di

MOV dl, [bx]

SUB dl, 48

ADD ax, dx

INC bx

LOOP m1

MOV num, ax

ENDM

NewLine MACRO ;??????? ?? ????? ??????

MOV ah, 02h

MOV dl, 0ah

INT 21h

MOV ah, 02h

MOV dl, 0dh

INT 21h

ENDM

WriteInt MACRO num

LOCAL m1

LOCAL m2

XOR cx, cx

MOV di, 10

MOV ax, num

m1:

MOV dx, 0

DIV di

INC cx

PUSH dx

CMP ax, 0

JG m1

MOV ah, 2h

m2:

POP dx

ADD dl, 48

INT 21h

LOOP m2

ENDM

sgrani macro reb

mov al, byte ptr reb

mul byte ptr reb

mov sgr, ax

NewLine

vvod str1, 09h

WriteInt sgr

endm

getch macro

mov ah, 1h

int 21h

endm

codes segment para 'code'

assume cs:codes, ds:codes, ss:codes, es:codes

org 100h

beg: call main

string db 'Vvedite znachenie rebra: $'

str1 db 'Ploshad grani: $'

r label byte

max db 10

real db ?

text db 10 DUP('$'),'$'

reb dw ? ;число

sgr dw ?

main proc near

vvod string, 09h

vvod r, 0ah

convert text, reb

sgrani reb

getch

mov ah, 4ch

int 21h

main endp

codes ends

end beg