Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Задано текст, що містить літери й цифри. Замінити у ньому кожну цифру її словесним англійським найменуванням. У випадку відсутності в тексті цифр вивести відповідне повідомлення.
Часто, буває необхідно переслати або порівняти поля даних, які перевищують по довжині одне слово. Наприклад, необхідно порівняти описи або імена для того, щоб відсортувати їх у висхідній послідовності. Елементи такого формату відомі як строкові дані і можуть бути як символьними, так і числовими. Для обробки строкових даних асемблер має п'ять команд обробки рядків:
MOVS переслати один байт чи одне слово з однієї області пам'яті в іншу;
LODS завантажити з пам'яті один байт у регістр AL чи одне слово в регістр AX;
STOS записати вміст регістра AL чи AX у пам'ять;
CMPS порівняти вміст двох областей пам'яті, розміром в один байт або в одне слово;
SCAS порівняти вміст регістра AL чи AX із умістом пам'яті.
Префікс REP дозволяє цим командам обробляти рядки будь-якої довжини.
Команди пересилання: movsb, movsw, movsd, movsq, movs приймач, джерело.
Команда виконує пересилання з області памяті DS:SI в область памяті ES:DI; змінює вміст регістрів SI, DI на довжину оброблюваного елемента.
Префікси повторення:
Команда порівняння: cmpsb, cmpsw, cmpsd, cmpq, cmps приймач, джерело.
Команда виконує віднімання вмісту памяті, що знаходиться за адресою ES:DI, від вмісту памяті, що знаходиться за адресою DS:SI. Встановлює флаги zf, sf, of. Змінює вміст регістрів SI, DI на довжину оброблюваного елемента.
Команда пошуку (сканування): scasb, scasw, scasd, scasq, scas приймач.
Команда виконує віднімання вмісту памяті, що знаходиться за адресою ES:DI, від вмісту регістра AL (AX). Встановлює флаги zf, sf, of, pf, af, cf. Змінює вміст регістра DI на довжину оброблюваного елемента.
Команда завантаження елементів з ланцюжка: lodsb, lodsw, lodsd, lodsq, lods джерело.
Команда виконує завантаження вмісту памяті, що знаходиться за адресою DS:SI в один з регістрів AL (AX).
Змінює вміст регістра SI на довжину оброблюваного елемента.
Команда завантаження елементів в ланцюжок: stosb, stosw, stosd, stosq, stos приймач.
Команда виконує завантаження вмісту регістрів AL (AX) в памяті, що знаходиться за адресою ES:DI.
Змінює вміст регістра DI на довжину оброблюваного елемента.
;Роботу виконала студентка гр.ПМ-10-1 Пильник Оксана
data segment para public 'data'
oe db 'one', 10, 13, '$'
t db 'two', 10, 13, '$'
th db 'three', 10, 13, '$'
f db 'four', 10, 13, '$'
fi db 'five', 10, 13, '$'
ix db 'six', 10, 13, '$'
s db 'seven', 10, 13, '$'
ei db 'eight', 10, 13, '$'
n db 'nine', 10, 13, '$'
z db 'zero', 10, 13, '$'
mes1 DB 'ishodnaya stroka: ', '$'
mes2 DB 'rezyltat: ', '$'
mes3 DB 'net tsufr', '$'
StrAdd DB 250 DUP(?), 10, 13, '$'
buf DB 250
BLen DB ?
StrIn DB 250 DUP(?), 10, 13, '$'
StrLen DW ?
data ends
stk segment para stack 'stack'
DB 256 dup(?)
stk ends
codes segment para public 'code'
assume CS:codes, DS:data, SS:stk, ES:data
main proc far
push DS
sub AX, BX
push AX
mov AX, data
mov DS, AX
mov AX, data
mov DS, AX
mov ES, AX
mov AH, 0
mov AL, 3 ;очистка экрана
int 10h
mov AH, 10
lea DX, buf ;ввод символов с клавиатуры
int 21h
mov BL, BLen
xor BH, BH
mov StrLen, BX
mov StrIn[BX], ' '
mov StrIn[BX+1], 10
mov StrIn[BX+2], 13
mov StrIn[BX+3], '$'
add StrLen, 4
sub dx,dx
cld
lea SI, StrIn
lea DI, StrAdd
mov CX, StrLen
rep movsb ;StrAdd=StrIn
s1:cld
mov al, '1'
mov cx, StrLen
lea di, StrIn
repne scasb
je m11
jmp s2
m11:add dx,1
dec di
sub bx, bx
mov cx, 3
m12:mov al, oe[bx]
stosb
inc bx
loop m12
loop s1
s2:cld
mov al, '2'
mov cx, StrLen
lea di, StrIn
repne scasb
je m21
jmp s3
m21: add dx,1
dec di
sub bx, bx
mov cx, 3
m22:mov al, t[bx]
stosb
inc bx
loop m22
loop s2
s3:cld
mov al, '3'
mov cx, StrLen
lea di, StrIn
repne scasb
je m31
jmp s4
m31: add dx,1
dec di
sub bx, bx
mov cx, 5
m32:mov al, th[bx]
stosb
inc bx
loop m32
loop s3
s4:cld
mov al, '4'
mov cx, StrLen
lea di, StrIn
repne scasb
je m41
jmp s5
m41: add dx,1
dec di
sub bx, bx
mov cx, 4
m42:mov al, f[bx]
stosb
inc bx
loop m42
loop s4
s5:cld
mov al, '5'
mov cx, StrLen
lea di, StrIn
repne scasb
je m51
jmp s6
m51: add dx,1
dec di
sub bx, bx
mov cx, 4
m52:mov al, fi[bx]
stosb
inc bx
loop m52
loop s5
s6:cld
mov al, '6'
mov cx, StrLen
lea di, StrIn
repne scasb
je m61
jmp s7
m61: add dx,1
dec di
sub bx, bx
mov cx, 3
m62:mov al, ix[bx]
stosb
inc bx
loop m62
loop s6
s7:cld
mov al, '7'
mov cx, StrLen
lea di, StrIn
repne scasb
je m71
jmp s8
m71: add dx,1
dec di
sub bx, bx
mov cx, 5
m72:mov al, s[bx]
stosb
inc bx
loop m72
loop s7
s8:cld
mov al, '8'
mov cx, StrLen
lea di, StrIn
repne scasb
je m81
jmp s9
m81: add dx,1
dec di
sub bx, bx
mov cx, 5
m82:mov al, ei[bx]
stosb
inc bx
loop m82
loop s8
s9:cld
mov al, '9'
mov cx, StrLen
lea di, StrIn
repne scasb
je m91
jmp s0
m91: add dx,1
dec di
sub bx, bx
mov cx, 4
m92:mov al, n[bx]
stosb
inc bx
loop m92
loop s9
s0:cld
mov al, '0'
mov cx, StrLen
lea di, StrIn
repne scasb
je m01
jmp next
m01: add dx,1
dec di
sub bx, bx
mov cx, 4
m02:mov al, z[bx]
stosb
inc bx
loop m02
loop s0
next: cmp dx, 0
jne exit
mov AH, 0 ;вывод на экран
mov AL, 3
int 10h
lea DX, mes3
mov AH, 09h
int 21h
jmp l1
exit: mov AH, 0 ;вывод на экран
mov AL, 3
int 10h
lea DX, mes1
mov AH, 09h
int 21h
lea DX, StrAdd
mov AH, 09h
int 21h
lea DX, mes2
mov AH, 09h
int 21h
lea DX, StrIn
mov AH, 09h
int 21h
l1: ret
main endp
codes ends
end main