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

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

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

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

local x,en

mov ax, f1

mov bx, f2

cmp ax,bx

ja x

mov dx, bx

jmp en

x: mov dx,ax

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

cmsg db 'Vvedite c:', '$'

rc dw ?

fmsg db 'Vvedite d:', '$'

rd dw ?

str1 db 'Rezultat = ', '$'

maximum dw 0

Temp LABEL BYTE

len db 3

Real db ?

Text db 4 DUP(0)

start proc near

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

WriteLine cmsg

ReadLine

Convert rc

newline

WriteLine fmsg

ReadLine

Convert rd

newline

max rc,rd

mov maximum,dx

WriteLine str1

WriteInt maximum

getch

exit

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

start endp

codesg ends

end begin

  1. Напишите программу, в которой вводятся целые числа а, b, c, d. Найти max{min(a, b), min(c, d)}, для чего написать макрокоманды определения max и 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

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

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

local x,en

mov ax, f1

mov bx, f2

cmp ax,bx

ja x

mov dx, bx

jmp en

x: mov dx,ax

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 ?

cmsg db 'Vvedite c:', '$'

rc dw ?

fmsg db 'Vvedite d:', '$'

rd dw ?

str1 db 'Rezultat = ', '$'

minn1 dw 0

minn2 dw 0

maximum dw 0

maximumm dw ?

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

WriteLine cmsg

ReadLine

Convert rc

newline

WriteLine fmsg

ReadLine

Convert rd

newline

min ra,rb

mov minn1,dx

min rc,rd

mov minn2,dx

max minn1,minn2

mov maximum,dx

WriteLine str1

WriteInt maximum

getch

exit

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

start endp

codesg ends

end begin