
- •I.Ошский Государственный Университет
- •1. Предварительная подготовка
- •2 Порядок выполнения работы на эвм
- •Контрольные вопросы:
- •IV.Лабораторная работа №2 Массивы
- •23 04 05 67 05 06 07 99 67 08 09 23 87 09 00 08
- •Контрольные вопросы:
- •Лабораторная работа №3
- •Контрольные вопросы:
- •Лабораторная работа №4 Процедуры.
- •Теоретическая часть
- •Работа команд ret и retf
- •Состояние флагов после выполнения команды не меняется. Error: Reference source not found
- •Программа №7.1
- •Контрольные вопросы
Программа №7.1
.model tiny
.stack 100h
.data
outStrdb '0000$' ;Выходная строка
.code
; Входные данные для процедуры translByte AL-байт, который нужно перевести
; Выходные данные
; BX-смещение строки в первые два байта которой будет записан результат
translByte proc
push ax
push ax
shr al,4
cmp al,9
ja greater10
mov byte ptr [bx],'0'
add [bx],al
jmp next4Bit
greater10:
mov byte ptr [bx],'A'
sub al,10
add [bx],al
next4Bit:
pop ax
and al,0Fh
cmp al,9
ja _greater10
mov byte ptr [bx+1],'0'
add [bx+1],al
jmp exitByteProc
_greater10:
mov byte ptr [bx+1],'A'
sub al,10
add [bx+1],al
exitByteProc:
pop ax
ret
translByte endp
translWord proc
push ax
push ax
shr ax,8
call translByte
pop ax
and ax,00FFh
add bx,2
call translByte
sub bx,2
pop ax
ret
translWord endp
start:
mov ax,@data
mov ds,ax
mov bx,OFFSET outStr
mov ax,60000
call translWord
mov ah,9
mov dx,OFFSET outStr
int 21h
mov ax,4c00h
int 21h
endstart
6. Написать программу № 7.2, с использованием процедур, которая запрашивает строку (ввод с клавиатуры), и затем переводит все символы по следующему алгоритму:
Вариант 1. Если символ в нижнем регистре, перевести его в верхний регистр; если в верхнем – в нижний;
Вариант 2. Вывести строку в обратном порядке;
Вариант 3. Вывести строку, в закодированном виде, от каждого кода символа строки отнимается число 10;
Вариант 4. Удалить все символы в верхнем регистре;
Вариант 5. Найти позицию символа (вводится с клавиатуры) в строке и вывести позицию (и) в шестнадцатеричном виде.
Контрольные вопросы
Расскажите основные отличия между процедурами на языке Ассемблера от языков высокого уровня?
Расскажите основные отличия между адресацией процедур типа FAR и NEAR?
Какое смешение имеют локальные переменные, объявленные директивой LOCALS и почему?
Разумно ли использование в программе с типом памяти Tiny процедуры с типомвызова FAR?
Где применяется косвенный вызов процедуры?
Чем отличается косвенный вызов процедуры от прямого вызова?
Что такое опережающий вызов процедуры?
Какой ключ нужно использовать для компиляции программы, в которой есть опережающий вызов процедуры?
Возможен ли вызов процедуры расположенной внутри другой процедуры, в основной программе?
Найдите ошибку в следующем коде
. Model tiny
.
.code
proc test1
.
.
retf
endp
start:
.
.
call test1
.
.
end start