Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
86
Добавлен:
11.02.2014
Размер:
102.4 Кб
Скачать

Программа №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. Найти позицию символа (вводится с клавиатуры) в строке и вывести позицию (и) в шестнадцатеричном виде.

Контрольные вопросы

  1. Расскажите основные отличия между процедурами на языке Ассемблера от языков высокого уровня?

  2. Расскажите основные отличия между адресацией процедур типа FAR и NEAR?

  3. Какое смешение имеют локальные переменные, объявленные директивой LOCALS и почему?

  4. Разумно ли использование в программе с типом памяти Tiny процедуры с типомвызова FAR?

  5. Где применяется косвенный вызов процедуры?

  6. Чем отличается косвенный вызов процедуры от прямого вызова?

  7. Что такое опережающий вызов процедуры?

  8. Какой ключ нужно использовать для компиляции программы, в которой есть опережающий вызов процедуры?

  9. Возможен ли вызов процедуры расположенной внутри другой процедуры, в основной программе?

  10. Найдите ошибку в следующем коде

. Model tiny

.

.code

proc test1

.

.

retf

endp

start:

.

.

call test1

.

.

end start

32

Соседние файлы в папке лабораторные работы по ASSAMBLER