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

stacksg segment para stack 'Stack'

dw 32 dup(?)

stacksg ends

write macro str

mov ah,02h

mov dl,'*'

int 21h

mov ah,09h

lea dx,str

int 21h

endm

datasg segment para 'Data'

message db 'Hello World!$'

datasg ends

codesg segment para 'Code'

begin:

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

push ds

sub ax,ax

push ax

mov ax,datasg

mov ds,ax

mov dh,0

mov dl,0

mov bh,0

mov ah,02h

int 10h

write message

mov ah,8

int 21h

mov ah,4ch

int 21h

codesg ends

end begin

  1. Написать программу, которая спрашивала бы сокращенное имя, а печатала бы полное. В случае незнакомого имени – печатать "я с Вами не знакома".

exit macro

mov ah,4ch ; Выход в DOS в 21 прерывании

int 21h

endm

vivod macro mm

mov ah, 09h ; Вызов функции вывода

lea dx, mm

int 21h

endm

iff macro string1,string2,i,net

local m1,m2

cld ;Сравнение вперед

mov SI, offset string1 ;DS:SI ® strl

mov DI, offset string2 ;ES:DI ® str2

mov CX,i ;Длина сравниваемых строк

repe cmpsb ;Поиск различия в строках

je m1

jmp m2

m1: vivod string2 ;Переход, если строки совпадают

mov bx,10

m2: vivod net

endm

codesg segment para 'code'

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

org 100h

begin: call start

im1 db 'vadim','$'

im2 db 'maksim','$'

im3 db 'aleksandr','$'

im4 db 'vladik','$'

net1 db '','$'

net2 db 'Ia s vami ne znakom!!!','$'

mes db 'Vvedite sokrashennoi imia, a ia napishy polnoe: ', '$'

string label byte ;Список параметров

symb db 19 ;Максимальная длина

real db ? ;Реальная длина

all db 20 dup (?),'$' ; Введенные символы

start proc near

mov ah, 09h ; Вызов функции вывода

lea dx, mes ; Загрузка адреса строки сообщения

Int 21h ; Вызов 21 прерывания dos

lea dx, string ; Загрузка адреса списка параметров

mov ah, 0ah ; Запрос функции ввода

Int 21h ; Вызов 21 прерывания dos

mov dh, 02 ; Установка позиции курсора

mov dl, 01

mov bh, 00

mov ah, 02h ; Вызов функции установки курсора

int 10h

mov bl,real ; Поместить указатель на конец строки

mov all[bx],'$'

mov bx,00 ; обнуляю флаг

iff string+2,im1,3,net1 ;проверяю каждое введенное слово на схожесть с именами

iff string+2,im2,4,net1

iff string+2,im3,5,net1

iff string+2,im4,4,net1

cmp bx,00;проверяю флаг

je m1

jmp m2

m1: vivod net2;если флаг обнулен тогда пишу что такого имени нет

m2: exit;выход из программы

start endp

codesg ends

end begin

  1. Ввести с клавиатуры натуральное число. Проверить будут ли его цифры все различны. Вывести на экран сообщение. Преобразование строки в число производить в макрокоманде.

input macro inter,var

mov ah,inter

lea dx,var

int 21h

endm

ravnchifr MACRO strб,col ;ў®§ўа и Ґв 1 Ґб«Ё Ґбвм ®¤Ё­ Є®ўлҐ жЁдал

local l1,l2,l3,l4

mov ax,0

lea si,strб

xor ch,ch

mov cl,col

l1:

mov di,si

inc di

push cx

dec cx

jz l4

l2:

mov dl,[di]

mov dh,[si]

inc di

cmp dl,dh

jz l3

loop l2

pop cx

inc si

loop l1

jmp l4

l3:

mov ax,1

l4:

ENDM

codes SEGMENT para 'code'

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

org 100h

main:

jmp begin

chislo db 20,?,20 dup (?)

mes db 13,10,'Есть одинаковые цифры !!!','$'

mesn db 13,10,'Одинаковых цифр нет','$'

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

begin:

input 09h,mespr

input 0ah,chislo

ravnchifr chislo+2,chislo+1

test ax,ax

jz m2

input 09h,mes

jmp m3

m2:

input 09h,mesn

m3:

mov ah,4ch

int 21h

codes ends

end main