ЗАД НА ЛАБ РАБ СПС (1085773), страница 3
Текст из файла (страница 3)
BEGIN PROC FAR
ASSUME CS:CODESG, DS:DATASG, SS: STACKSG, ES:DATASG
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, DATASG
MOV DS.AX
MOV ES.AX
CALL B10MOVE
CALL C10MOVE
RET
BEGIN ENDP
B10MOVE PROC
LEA SI, NAME1
LEA DI, NAME2
MOV CX , 09
B20:
MOV AL,[SI]
MOV [D1], AL
INC SI
INC DI
DEC CX
JNZ B20
RET
B10MOVE ENDP
LEA SI,NAME1
LEA DI,NAME2
MOV CX, 09
C20:
MOV AL,[SI]
MOV [DI], AL
INC DI
INC SI
LOOP C20
RET
C10MOVE ENDP
CQDESG ENDS
END BEGIN
Рис.7.
Лабораторная работа № 6.
Замена строчных букв на прописные
TITLE CASE (COM)
0000 CODESG SEGMENT PARA ‘CODE’
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
0001 ORG 100H
0001 ЕВ 1C 90 BEGIN: JMP MAIN
0003 43 68 61 бE 67 65 TITLEX DB 'Change to uppercase letters'
20 74 6F 20 75 70
70 65 72 63 61 73
65 20 BС 65 74 74
65 72 73
011Е main proc near
011Е 8D 1E 0104 R LEA BX,TITLEX+1
0122 В9 001F MOV CX,31
0125 B20:
0125 8A 27 MOV AH,[BX]
0127 80 FC 61 CMP AH,61H
012А 72 0А JB B30
012C 80 FC 7A CMP AH,7AH ; буква
012F 77 05 JA B30 ; ?
0131 80 Е4 DF AND AH,llOlll1B ;Да - Преобразовать
0134 88 27 MOV [BX],AH ;3аписать в TITLEX
0136 B30:
0136 43 INC BX ; Следующий символ
0137 Е2 ЕС LOOP В20 ; Повторить цикл 31 раз
0139 СЗ RET
013А MAIN ENDP
013А CODESG ENDS
END BEGIN
Рис.8.
Биты: 76543210 Биты: 76543210
Буква А: Буква а:
01000001 01100001
Лабораторная работа № 7.
Вывод на экран набора символов ASCII-кода
page 60, 132
TITLE ALLASC (COM) ;Вывод на экран ASCII- символов O0-FF
COODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG, DS:CODESG, SS:CODESG, ES:NOTHING
ORG 100Н
BEGIN: JMP SHORT MAIN
CTR DB 00, ‘$’
; Основная процедура:
MAIN PROC NEAR
CALL B10CDR ;0чистить экран
CALL C10SET Установить курсор
CALL D10DISP ; Вывести симв. на экран
RET
MAIN ENDP
; Очистка экрана:
B10CLR PROC
MOV AX, 0600H
MOV BH, 07
MOV CX, 0000 ; Левая верхняя позиция
MOV DX, 184FH ; Правая нижняя позиция
INT 10Н
RET
B10CLR ENDP
; Установка курсора в 00, 00:
C10SET PROC
MOV AH, 02
MOV BH, 00
MOV DX, 0000
INT 10Н
RET
C10SET ENDP
Вывод на экран ASCII символов:
D10DISP PROC
MOV CХ , 256 256 итераций
LEA DX, CTR Адрес счетчика D20
MOV АН., 09 опция вывода символа
INT 21Н.
INC CTR ;Уввличить ечетчик
LOOP D20 ;Уменьшить ,CХ, если не ноль - цикл
RET Вернуться
D10DISP ENDP
CODESG ENDS
END BEGIN
Рис. 9.
Лабораторная работа № 8.
Команды обработки строк
page 60,132
TITLE STRING (EXE) ;Строковые операции
STACKSG SEGMENT PARA STACK ‘Stack’
DW 32 DUP(?)
STACKSG ENDS
DATASG SEGMENT PARA ‘Data’
NAME1 DB ‘Assemblers’
NAME2 DB 10 DUP (‘ ‘)
NAME3 DB 10 DUP (‘ ‘)
DATASG ENDS
CODESG SEGMENT PARA ‘Code’
BEGIN PROC FAR ; Основная процедура
ASSUME CS:CODESG, DS:DATASG, SS: STACKSG, ES: DATASG
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, DATASG
MOV DS, AX
MOV ES, AX
CALL C10MVSB ;Подпрограмма MVSB
CALL D10MVSW ;Подпрограмма LODS
CALl E10L0DS ;Подпрограмма LODS
CALL F10STOS ;Подпрограмма CMPS
CALL H10SCAS ;Подпрограмма SCAS
RET
BEGIN ENDP
Использование MOVSB:
C10MVSB PROC NEAR
CLD
LEA SI, NAME1
LEA DI, NAME2
MOV CX,10
REP MOVSB
RET
C10MVSB ENDP ;Переслать 10 байтов из NAME1 в NAME2
; Использование MOVSW:
D10MVSW PROC NEAR
CLD
LEA SI, NAME2
LEA DI, NAME3
MOV CX, 05
REP MOVSW
RET
D10MVSW ENDP ;Переслать 5 слов из NAME2 в NAME3
; Использование LODSW:
E10LODS PROC NEAR
CLD
LEA SI, NAME1 ;3агрузить 1-е слово
LODSW ; из NAME1 в АХ
RET
E10LODS ENDP
; Использование STOSW:
F10STOS PROC NEAR
CLD
LEA DI, NAME3
MOV СХ, 05
MOV AX, 2020H ;Переслать пробелы
REP STOSW ; в NAME3
RET
F10STOS ENDP
G10CMPS PROC NEAR
CLD
MOV CX, 10
LEA SI, NAME1
LEA DI, NAME2
REPE CMPSB ;Сравн. NAME1 и NAME2 He равны?
JNE G20
MOV BH, 01
G20: MOV CX, 10
LEA SI, NAME2
LEA DI, NAME3
REPE CMPSB ;Сравн. NAME2 и NAME3 Если равны, то выйти
JE G30
MOV BL, 02
G30: RET
G10CMPS ENDP
;Использование SCASB:
H10SCAS PROC NEAR
CLD
MOV СХ, 10
LEA DI , NAME1
MOV AL, ‘m’ ;Поиск символа 'm1
REPNE SCASB ; в NAME1
JNE H20 ;Если нет - выйти
MOV АН,03
H20: RET
H10SCAS ENDP
CODESG ENDS
END BEGIN
Рис. 10.
28