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

vvod macro str, fun

mov ah,fun

lea dx,str

int 21h

endm

cmpstr1 macro s11,s22,real11,real22,col,ravn,Yes1,NO1

local s,t,m1,m2,m3,exit

xor si,si

s: xor di,di

t: mov cl,byte ptr s22[di]

cmp byte ptr s11[si],cl

je m1

inc col

mov si,col

cmp si,real11

je m3

jmp s

m1: inc ravn

inc si

inc di

mov cx,ravn

cmp cx,real22

je m2

jmp t

m2: vvod Yes1,09h

jmp exit

m3: vvod NO1,09h

jmp exit

exit:endm

codesg segment para 'code'

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

org 100h ; Їа®ЇгбвЁвм 256 Ў ©в

begin: jmp start

message db 'Введите строку: ','$'

message2 db 'Введите подстроку: ','$'

string1 label byte

maxs1 db 40

reals1 db ?

s1 db 40 dup ('$')

string2 label byte

maxs2 db 10

reals2 db ?

s2 db 10 dup ('$')

coll dw 0

ravnno dw 0

real1 dw ?

real2 dw ?

Yes db 'YES********','$'

NO db 'NO+++++++++','$'

start:

vvod s1,09h

mov ah,02

mov dl,0dh

int 21h

mov dl,0ah

int 21h

vvod message,09h

vvod string1,0ah

;vvod s2,09h

mov ah,02

mov dl,0dh

int 21h

mov dl,0ah

int 21h

vvod message2,09h

vvod string2,0ah

mov ah,02

mov dl,0dh

int 21h

mov dl,0ah

int 21h

xor ax,ax

mov al,reals1; перевод длині введенной строки из байта в слово

mov real1,ax

xor ax,ax

mov al,reals2;перевод длині введенной подстроки из байта в слово

mov real2,ax

cmpstr1 s1, s2, real1, real2, coll, ravnno, Yes, NO

mov ah, 4ch;

int 21h

codesg ends

end begin

  1. Напишите программу, в которой вводятся целые числа а, b. Напишите макрокоманду определения min.

Write MACRO mes ;вывод сообщения на экран

LEA dx, mes

MOV ah, 09h

INT 21h

ENDM

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

WriteLine MACRO mes ; вывод сообщения на экран

Write mes

ENDM

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

getch MACRO

MOV ah, 8h

int 21h

ENDM

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

Exit MACRO

MOV ah, 4ch

INT 21h

ENDM

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

ReadLine MACRO

LEA dx, Temp

MOV ah, 0ah

INT 21h

ENDM

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

newline macro ; переход на новую строку

mov ah, 02h

mov dl,0ah

int 21h

mov ah,02h

mov dl,0dh

int 21h

endm

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

min macro f1,f2 ; минимальное число

local x,en

mov ax, f1

mov bx, f2

cmp ax,bx

ja x

mov dx, ax

jmp en

x: mov dx,bx

en:

endm

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

Convert MACRO num ;перевод строки в число

LOCAL m1

XOR ax, ax

XOR cx, cx

MOV cl, real

MOV di, 10

LEA bx, Text

m1:

MUL di

MOV dl, [bx]

SUB dl, 48

ADD al, dl

INC bx

LOOP m1

MOV num, ax

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

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

codesg segment para 'code'

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

org 100h

begin:

call start

amsg db 'Vvedite a:', '$'

ra dw ?

bmsg db 'Vvedite b:', '$'

rb dw ?

str1 db 'Rezultat = ', '$'

minn1 dw 0

Temp LABEL BYTE

len db 3

Real db ?

Text db 4 DUP(0)

start proc near

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

WriteLine amsg

ReadLine

Convert ra

newline

WriteLine bmsg

ReadLine

Convert rb

newline

min ra,rb

mov minn1,dx

WriteLine str1

WriteInt minn1

getch

exit

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

start endp

codesg ends

end begin