- •Лабораторная работа №1. Изучение архитектуры эвм. Машинное исполнение, Требования языка Ассемблер.
- •1. Имеется команда:
- •1,1,2,3,5,8,13,...(Каждое число в последовательности представляет собой сумму двух предыдущих чисел). Для организации цикла используйте команду loop.
- •2. Напишите программу для вычисления сумму первых 15 нечетных чисел Фибоначчи с первыми 5 четными числами Фибоначчи. Суммы должны вычисляться в подпрограммах.
- •Лабораторная работа №3 Изучение экранных операций.
- •Лабораторная работа №4 Изучение команд обработки строк
- •1.Замените в строке string символ & на символ пробела
- •Лабораторная работа №5. Изучение обработки двоичных данных, данных в форматах ascii и bcd, таблиц.
- •Dw 2316h
- •Datay dw 0237h
- •Dw 4052h
- •4. Определите 3 отдельные связанные таблицы, содержащие следующие данные:
- •Datax dw 0148h
1.Замените в строке string символ & на символ пробела
STRLEN EQIU 15: длина поля STRING
STRING DB ‘THE TIVE & IS NOW’
(вместо STRING используется ввод произвольной строки)
.MASM
MODEL small
STACK 256
.data
strlen equ 18
string db 'To live&is to die$'
.code
assume ds:@data,es:@data
main:
mov ax,@data ;настройка ds и
mov ds,ax ;es на начало
mov es,ax ;сегмента данных
mov ax,0600h ;очистка экрана
mov bh,07h
mov cx,0
mov dx,184fh
int 10h
mov ax,0200h ;установка курсора
mov bh,0h
mov dh,7h
mov dl,20h
int 10h
mov ah,09 ;вывод исходной
lea dx,string ;строки
int 21h
cld ;DF:=0
lea di,string ;в es:di-адрес строки
mov al,26h ;в al-символ &
mov cx,strlen ;в cx-длина строки
repne scas string ;поиск
dec di ;уменьшение по выходе
mov al,20h ;код пробела
stos string ;запись в строку
mov ax,0200h ;установка курсора
mov bh,0h
mov dh,8h
mov dl,20h
int 10h
mov ah,09 ;вывод изменённой
lea dx,string ;строки
int 21h
mov ah,1h ;readkey
int 21h
mov ax,4c00h ;завершение
int 21h ;программы
end main
Имеются следующие определения:
DATASG SEGMENT PARA
CONAME DB 'SPASE EXPLORES INS'
PRLINE DB 20 DUP(")
Используя команды обработки строк, выполнить:
а) пересылку данных из CONAME в PRLINE слева направо;
MASM
MODEL small
STACK 256
.data
coname db 'Space Explores Ins $'
prline db 20 dup (?)
strlen dw 20
.code
assume ds:@data,es:@data
main:
mov ax,@data ;привязка ds и es
mov ds,ax ;к сегменту
mov es,ax ;данных
cld ;DF:=0
lea si,coname ;адрес источника
lea di,prline ;адрес приёмника
mov cx,strlen ;длина строк
rep movsb ;пересылка
lea dx,prline ;вывод полученной
mov ah,09h ;строки
int 21h
mov ax,4c00h ;завершение
int 21h ;программы
end main
б) пересылку данных из CONAME в PRLINE справа налево;
MASM
MODEL small
STACK 256
.data
coname db 'Space Explores Ins $'
prline db 20 dup (?)
strlen dw 20
.code
assume ds:@data,es:@data
main:
mov ax,@data ;привязка ds и es
mov ds,ax ;к сегменту
mov es,ax ;данных
std ;DF:=1
lea si,coname ;в si-адрес
add si,strlen ;конца источника
dec si
lea di,prline ;в di-адрес
add di,strlen ;конца приёмника
dec di
mov cx,strlen ;длина строк
rep movsb ;пересылка
lea dx,prline ;вывод полученной
mov ah,09h ;строки
int 21h
mov ax,4c00h ;завершение
int 21h ;программы
end main
в) загрузку третьего и четвертого байтов области CONAME в регистр АХ;
MASM
MODEL small
STACK 256
.data
coname db 'Space Explores Ins $'
prline db 20 dup (?)
strlen dw 20
outstring dw (?)
.code
assume ds:@data,es:@data
main:
mov ax,@data ;привязка ds и es
mov ds,ax ;к сегменту
mov es,ax ;данных
cld ;DF:=0
lea si,coname ;в si-адрес
add si,2 ;третьего элемента
lodsw ;пересылка слова
mov outstring,ax ;вывод из
lea dx,outstring ;аккумулятора
mov ah,09h
int 21h
mov ax,4c00h ;завершение
int 21h ;программы
end main
г) сохранение содержимого регистра АХ в области по адресу PRLINE +5;
MASM
MODEL small
STACK 256
.data
Coname db 'Space Explores Ins $'
prline db 20 dup (?)
strlen dw 20
outstring dw (?)
.code
assume ds:@data,es:@data
main:
mov ax,@data ;привязка ds и es
mov ds,ax ;к сегменту
mov es,ax ;данных
cld ;DF:=0
lea di,prline ;в di-адрес
add di,5 ;5-го элемента
mov al,'x' ;первый символ
stos prline[5] ;пересылка
mov al,'y' ;второй символ
stos prline[6] ;пересылка
lea dx,prline ;вывод полученной
mov ah,09h ;строки
int 21h
mov ax,4c00h ;завершение
int 21h ;программы
end main
е) сканирование области CONAME и поиск в ней символа " пробел ".
Если символ будет найден, то переслать его в регистр ВН.
masm
model small
.stack 100h
.data
CONAME db 'SPASE EXPLORES INS','$'
SimvolFound db 'Simvol Found BH=" "',13,10,'$'
SimvolNotFound db 'Simvol Not Found BH=0',13,10,'$'
simvol db ' ' ;сюда заносим символ для поиска
.code
assume ds:@data,es:@data
start:
mov ax,@data ;заносим в регистры
mov ds,ax ; ds и
mov es,ax ; es адрес сегмента данных
mov al,simvol ; в al заносим символ, который будем искать
cld ;сброс флага df
lea di,CONAME ;готовим сегмент(es) и смещение(di) строки для команды scas
mov cx,20 ;длинна строки
repne scas CONAME ;scas ищет символ в строке, а repne повторяет до тех пор, пока символы не совпадут()
je found ;Прыгаем на found если символ найден
mov bh,0 ;если символ не найден в bh заносим 0
jmp vivod1
found: ;если символ найден печатается сообщение Simvol Found
mov bh,simvol ;если символ найден, то заносим его в bh (по условию)
mov ah,9
lea dx,SimvolFound
int 21h
jmp zaderjka
vivod1: ;если символ не найден печатается сообщение Simvol Not Found
mov ah,9
lea dx,SimvolNotFound
int 21h
zaderjka: ;процедура задержки
mov ah,1 ;считываем код нажатой клавиши
int 21h ;считываем код нажатой клавиши
cmp al,27 ;сравниваем код клавиши с кодом клавиши Esc
jne zaderjka ;Если нет то прыгаем на zaderjka
exit:
mov ax,4c00h ; Exit
int 21h ; Exit
end start
