Материал: 1328

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Приложение 1

Примеры (тексты) программ

Пример П.1.1

;lab3pr1.asm

 

; Примеры

 

mov al,b1

 

sar al,1

; арифметический сдвиг байта вправо

mov byte ptr rezult,al

 

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

 

mov al,b1

 

rol al,1

; циклический сдвиг байта влево

mov byte ptr rezult,al

 

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

 

mov al,b1

ror al,1 ; циклический сдвиг байта вправо mov byte ptr rezult,al

=================================================================

Пример П.1.2

; lab3pr2.asm COM-программа создания файла на диске и вывода в файл

codesg segmentPARA 'Code'

 

 

assume cs:codesg,ds:codesg,ss:codesg,es:codesg

 

org

100h

 

; обход PSP

begin:

 

jmp

main

;обход через данные

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

 

 

 

 

flda

dw

250

 

;определение данных

fldb

dw

125

 

 

fldc

dw

?

 

 

soob1

db

'Привет!','$',0ah,0dh

soob2

db

'Error

 

','$',0ah,0dh

fcbrec label byte

 

 

fcbdriv db

03

 

;диск С

fcbname db

'file1

'

 

fcbext

db

'dat'

 

 

fcbblk dw

0000

 

 

fcbrcsz dw

?

 

 

fcbflsz dd

?

 

 

 

dw

?

 

 

 

dt

?

 

 

fcbsqrc db

00

 

 

;

dd

?

 

 

 

 

 

 

Main

proc

near

 

 

 

mov ah,09

 

 

 

lea dx, soob1

 

 

int 21h ---------------------------------------------------

mov ah,16h lea dx,fcbrec

int 21h ---------------------------------------------------

61

cmp al,00 jnz error mov fcbrcsz,1 mov ah,1ah lea dx,soob2

int 21h ---------------------------------------------------

mov ah,15h lea dx,fcbrec

int 21h ---------------------------------------------------

jmp exit

error:

mov ah,09 lea dx, soob2

int 21h ---------------------------------------------------

exit:

 

ret

;возврат в DOS

main endp

 

codesg

ends

end

begin

=================================================================

Пример П.1.3

formula3 proc

;lab3pr3.asm, АБП(1), ЦСЛ(10), СДП(11)П, СДЛ(12)

;Примеры:

cmp x1,3 jz fabp_1 cmp x1,4 jz fcsl_10 cmp x1,5 jz fsdr_11 cmp x1,6 jz fsdl_12

;Вычислительная часть!

fabp_1:

;АБП(1)

mov al,b1

 

sar al,1

 

mov byte ptr rezult,al

 

ret

 

fcsl_10:

;ЦСЛ(10)

mov ax,w1

 

mov cx,10

 

csl_10:

 

rol ax,1

 

loop csl_10

 

mov word ptr rezult,ax

 

ret

 

fsdr_11:

;СДП(11)П

mov ax,word ptr d1

 

mov dx,word ptr d1[2]

 

mov cx,11

 

 

62

 

cmp cf,0

 

jnz cf1

 

cf0:

clc

 

 

jmp sdr_11

cf1:

stc

 

sdr_11:

 

 

rcr dx,1

 

rcr ax,1

 

loop sdr_11

 

jc rcf1

 

 

jnc rcf0

rcf1:

mov cf,1

 

jmp next

rcf0:

mov cf,0

next:

mov word ptr rezult,ax

 

mov word ptr rezult[2],dx

 

ret

 

fsdl_12:

;СДЛ(12)

 

mov ax,word ptr d1

 

mov dx,word ptr d1[2]

 

mov cx,12

sdl_12: clc

 

 

rcl ax,1

 

rcl dx,1

 

clc

 

 

loop sdl_12

 

mov word ptr rezult,ax

 

mov word ptr rezult[2],dx

 

ret

 

formula3

endp

=================================================================

Пример П.1.4

; lab3pr4.asm использование блока управления файлом FCB для создания файла

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

codesg segment para 'Code'

assume cs:codesg,ds:codesg,ss:codesg,es:codesg

org

100h

 

; обход PSP

begin: jmp

main

 

;обход через данные

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

 

reclen equ

32

 

 

namepar

label

byte

;список параметров:

maxlen

db

reclen

; макс.длина имени

namelen

db

?

; число введенных символов

namedta

db

reclen dup(' ')

; область передачи (DTA)

fcbrec

label

byte

;FCB для дискового файла

fcbdriv

db

04

; дисковод D

fcbname

db

'namefile'

; имя файла

fcbext

db

'dat'

; тип файла

fcbblk

dw

0000

; номер текущего блока

 

 

 

63

fcbrcsz

dw

?

 

; размер логической записи

fcbflsz

 

dd

?

 

; размер файла (DOS)

 

dw

?

 

 

; дата (DOS)

 

dt

?

 

 

; зарезервировано (DOS)

fcbsqrc

db

00

 

; номер текущей записи

 

dd

?

 

 

; относительный номер

crlf

db

13,10,'$'

 

 

errcde

 

db

00

 

 

prompt

db

'Name? ','$'

 

 

row

db

01

 

 

 

opnmsg

db

'*** Open error ***', '$'

wrtmsg

db

'*** Write error ***', '$'

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

main

proc

far

 

 

 

 

mov

ax,0600h

 

 

 

call

q10scr

 

 

;очистить экран

 

call

q20curs

 

;установить курсор

 

call

c10open

 

;открыть, установить DTA

 

cmp

errcde,00

 

;есть место на диске?

 

jz

a20loop

;

да - продолжить,

 

ret

 

 

;

нет - вернуться в DOS

a20loop:

 

 

 

 

 

call

d10proc

 

 

 

cmp

namelen,00

 

;конец ввода?

 

jne

a20loop

;

нет продолжить,

 

call

g10clse

;

да закрыть файл

 

ret

 

 

;

и вернуться в DOS

main

endp

 

 

 

 

;Открытие дискового файла:

c10open

proc near

 

mov

ah,16h

;функция создания файла

lea

dx,fcbrec

 

int

21h

 

cmp

al,00

;есть место на диске?

jnz

c20

; нет ошибка

mov

fcbrcsz,reclen

;размер записи (EQU)

lea

dx,namedta

;загрузить адрес DTA

mov

ah,1ah

 

int

21ah

 

ret

 

 

c20:

 

 

lea

dx,opnmsg

;сообщение об ошибке

call

x10err

 

ret

 

 

c10open

endp

 

;Ввод с клавиатуры:

d10proc

proc

near

mov

ah,09

;функция вывода на экран

 

 

64

lea

dx,prompt

 

;выдать запрос

int

21h

 

 

mov

ah,0ah

 

;функция ввода

lea

dx,namepar

 

;ввести имя файла

int

21h

 

 

call

e10disp

 

;прокрутка на экране

cmp

namelen,00

 

;имя введено?

jne

d20

;

да продолжить,

ret

 

;

нет выйти

d20:

 

 

 

mov

bh,00

 

;заменить символ Return

mov

bl,namelen

 

 

mov

namedta[bx],' '

 

;записать пробел

call

f10writ

 

;вызвать подпрограмму записи

;

 

 

 

cld

 

 

 

lea

di,namedta

 

;очистить

mov

cx,reclen/2

 

; поле

mov

ax,2020h

 

; имени

rep

stosw

 

 

ret

 

 

;выйти

d10proc

endp

 

 

;Прокрутка и установка курсора:

e10disp

proc near

 

 

mov

ah,09

 

;функция вывода на экран

lea

dx,crlf

 

;CR/LF

int

21h

 

;вызов DOS

cmp

row,18

 

;последняя строка экрана?

jae

e20

;

да обойти,

inc

row

;

нет увеличить строку

ret

 

 

 

e20:

 

 

 

mov

ax,0601h

 

;прокрутка на 1 строку

call

q10scr

 

 

call

q20curs

 

;установить курсор

ret

 

 

 

e10disp

endp

 

 

;Запись на диск:

f10writ

proc near

 

 

mov

ah,15h

;функция записи

lea

dx,fcbrec

 

 

int

21h

 

 

cmp

al,00

;запись без ошибок?

jz

f20

;

да

lea

dx,wrtmsg

;

нет

call

x10err

; выдать сообщение

mov

namelen,00

 

 

65

Источник: https://studfile.net/preview/16407385/