Читайте также:
|
|
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
4. Напишите программу, в которой вводятся целые числа а, 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
5. Вывести на экран своё имя, фамилию и группу, используя макрокоманду.
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
6. Написать программу, которая спрашивала бы сокращенное имя, а печатала бы полное. В случае незнакомого имени – печатать "Я с Вами не знакома".
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
Дата добавления: 2015-08-17; просмотров: 74 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Напишите программу, в которой вводятся целые числа а, b. Напишите макрокоманду определения min. | | | Ввести с клавиатуры натуральное число. Проверить будут ли его цифры все различны. Вывести на экран сообщение. Преобразование строки в число производить в макрокоманде. |