Операнды могут комбинироваться с арифметически - логическими, побитовыми операторами для расчета некоторого значения или определения ячейки памяти, на которую будет воздействовать команда.
3. Арифметика
3.1 Алгоритм программы
Блок-схема алгоритма вычисления выражения
3.2 Текст программы, реализующий алгоритм
.model small
.386
.stack 100h
.data
str1 db 09h,0d5h ,"========",0B8h,0ah,0dh
db "Enter a ", 0b3h,09h, " ",0b3h,0ah,0dh
db 09h, 0c3h,"========",0b4h,0ah,0dh
db "Enter b ",0b3h,09h, " ",0b3h,0ah,0dh
db "Result :",0b3h,09h, " ",0b3h,0ah,0dh
db 09h, 0d4h,"========",0beh,0ah,0dh, '$'
InBufa DB 7
kola DB ?
a DB ?, ?, ?, ?, ?, ?, ?
InBufb DB 7
kolb DB ?
b DB ?, ?, ?, ?, ?, ?, ?
Error DB "Input data ERROR !!!", 0dh, 0ah, '$'
DivErr DB "Dividing by Zero !!!", 0dh, 0ah, '$'
chA DW 0
chB DW 0
tabl DW 10000, 1000, 100, 10, 1
ResBin DW 0
ResBCD DB '+', '0', ?, ?, ?, ?, 0ah, 0dh, '$'
kol db 3
flag db 0
.code
include math.lib
.startup
cls
locate 0,0
mov ax,dgroup
mov ds,ax
cikl:
mov flag, 0
mov chA, 0
mov chB, 0
mov ResBin, 0
mov bp, offset ResBCD
mov ds:[bp], '+'
mov ds:[bp+1], '0'
mov ds:[bp+2], ?
mov ds:[bp+3], ?
mov ds:[bp+4], ?
mov ds:[bp+5], ?
mov al, 3
mov ah, kol
sub al, ah
imul ax, 7
locate 0, al
push ax
; Вывод таблицы
mov dx,offset str1
mov ah,09h
int 21h
; Ввод чисел
pop ax
inc al
locate 10, al
mov dx,offset InBufa
mov ah,0ah
add al, 3
mov dx,offset InBufb
; Проверка на числа
prov InBufA
prov InBufB
; Проверка на знак
znak a
znak b
; ASCII > BIN
ASCII_2_BIN kola, chA
ASCII_2_BIN kolb, chB
funtion
; Bin 2 Ascii
mov cx, 5
mov bp, offset tabl
mov si, offset ResBCD
inc si
v:
mov bx, ds:[bp]
mov dx, 0
idiv bx
cmp al, 0
je nul
mov flag, 1
add al, 30h
mov ds:[si], al
jmp nol
nul: cmp flag, 0
je nol
mov ds:[si], 30h
nol: mov ax, dx
add bp, 2
loop v
; Выход_1
add al, 5
mov dx, offset ResBCD
mov ah, 09h
locate 0, 35
dec kol
jnz cikl
; Выход
jmp ex
Er: cls
locate 25, 8
mov dx, offset Error
DEr: locate 25, 9
mov dx, offset DivErr
ex:
.exit(0)
END
3.3. Листинг кода библиотеки string.lib, в которой находятся макросы, вызываемые в данной программе
IFDEF @Model
IFIDN @Model, <1>
TINYMODEL TYPEDEF
ENDIF
cls macro
push bx
push cx
push dx
mov cx,0
mov dh,24
mov dl,79
mov ah,6
mov al,0
mov bh,7
int 10h
pop dx
pop cx
pop bx
endm
locate macro col,row
mov dh,row
mov dl,col
move_cursor
move_cursor macro
LOCAL ok,vs
cmp dh,24
jna ok
sub dh,dh
ok: cmp dl,79
jna vs
sub dl,dl
vs: mov ah,15
mov ah,2
prov macro InBuf
local c1
mov bp, offset InBuf
inc bp
mov ch, 0
mov cl, ds:[bp]
dec cl
c1: cmp byte ptr [ds:[bp]], 30h
jl Er
cmp byte ptr [ds:[bp]], 39h
ja Er
loop c1
znak macro per
local m1
cmp per, '-'
je m1
cmp per,'+'
jne Er
m1:
ASCII_2_BIN macro kol, res
local p, plus
mov bp, offset kol
mov bx, offset kol
mov ax, 0
mov al, ds:[bx]
add bp, ax
mov cl, ds:[bx]
mov bx, offset tabl
add bx, 8
p: mov ax, ds:[bx]
mov dl, ds:[bp]
sub dl, 30h
imul ax, dx
add res, ax
sub bx, 2
sub bp, 1
dec cx
jnz p
add bp, 1
cmp ds:byte ptr[bp], '-'
jne plus
neg res
plus:
funtion macro
;Задание:
; b / a - 1, если a>b;
;Y = -295, если a=b;
; (a - 235) / b, если a<b;
mov ax, chA
mov bx, chB
cmp ax, bx
jne net
cmp ax, 0
je equal
net:
mov bp, offset a
mov si, offset b
mov dh, ds:[si]
cmp dl, dh
jl more
ja low
cmp dl, '-'
jne pl
jg more
pl: cmp ax, bx
ja more
jl low
more: cmp al, 0
je DEr
mov ax, chB
mov bx, ax
and bx, 7FFFh
je pluss
mov dx,0FFFFh
jmp did
pluss: mov dx, 0
did: idiv chA
sub ax,1
jmp www
equal: mov ax, 00h
sub ax,295
low: cmp bl, 0
mov ax,chA
sub ax,235
je plu2
jmp mnu2
plu2: mov dx, 0
mnu2:
idiv chB
www: mov bx, ax
je OK
neg ax
mov ResBCD, '-'
OK: mov ResBin, ax
4. Строки
4.1 Блок-схема алгоритма обработки строки
4.2 Текст программы, реализующий данный алгоритм:
.586
Mes1 db "Input the first string",0ah,0dh,'$'
Mes2 db "Input the second string",0ah,0dh,'$'
Mes3 db "Input the simbol, from which you want to paste the second string",0ah,0dh,'$'
Str1 db 255
db ?
db 255 dup (0)
Str2 db 255
Char1 db 2
db 0,'$'
Res db "Result is:",0Ah,0Dh,'$'
Str db 255 dup (0)
include string.lib
lea dx, Mes1
lea dx, Str1
locate 0, 3
lea dx, Mes2
lea dx, Str2
locate 0, 6
lea dx, Mes3
lea dx, Char1
obrabotka
locate 0, 9
lea dx, Res
lea dx, Str
4.3 Листинг кода библиотеки math.lib, в которой находятся макросы, вызываемые в данной программе
obrabotka macro
mov bp,offset Char1
mov bp,offset Str1
mov si,offset Str2
add si, 1
mov ch, ds:[si]
mov bx, offset Str
inc bx
lp:
mov al,ds:[bp]
mov ds:[bx],al
cmp al,dl
jnz lp
m1: inc bx
lpo:
mov al,ds:[si]
dec ch
jnz lpo
lopa:
jnz lopa
mov ds:[bx],'$'
ВЫВОД
В данной работе были разработаны программы, направленные на выполнение арифметических действий и строковых операций.
Программы были написаны на языке низкого уровня Borland Turbo Assembler(TASM), для процессоров семейства Intel.
В ходе выполнения задания возникали проблемы во время отладки программы, поскольку язык ассемблера TASM имеет сложную структуру.
Были практически закреплены полученные навыки работы с TASM, знание о структуре языка и его синтаксиса.
Программы, разработанные в ходе выполнения данной расчетно-графической работы, характеризуются малым размером выполняемого файла, работай напрямую с аппаратным обеспечением ПК.
Страницы: 1, 2