Читайте также:
|
|
stacksg segment para stack 'Stack'
dw 32 dup(?)
stacksg ends
datasg segment para 'Data'
d1 label byte
max1 db 50
len1 db?
ary1 db 51 dup('$')
d2 label byte
max2 db 50
len2 db?
ary2 db 51 dup('$')
message db 'HI!$'
acc db 'sovpali$'
message2 db 'HI!$'
no_a db 'ne sovpali$'
mes1 db 'Vvedite stroku$'
datasg ends
codesg segment para 'Code'
begin:
assume cs:codesg, ds:datasg, ss:stacksg, es:datasg
push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
mov dh,0
call kursor
mov ah,09h
lea dx,mes1
int 21h
mov dh,1
call kursor
mov ah,0ah
lea dx,d1
int 21h
mov dh,2
call kursor
mov ah,09h
lea dx,mes1
int 21h
mov dh,3
call kursor
mov ah,0ah
lea dx,d2
int 21h
mov dh,4
call kursor
mov bx, offset len1
mov al, [bx]
mov bx, offset len2
mov ah, [bx]
cmp al,ah
jnz a3
push ds
pop es
cld
mov cl,al
mov si,offset ary1
mov di,offset ary2
repe cmpsb
jcxz a1; если cx равен нулю -- строки совпали сообщим об этом
mov ah,9
lea dx,no_a; если cx не равен нулю -- строки не совпали сообщим об этом
int 21h
jmp a2; идем на выход из программы
a1: mov ah,9
lea dx,acc
int 21h
a2: mov ah,8
int 21h
mov ah,4ch; в любом случае выходим из программы
int 21h
a3: mov ah,9
lea dx,no_a
int 21h
jmp a2
kursor proc near
push ax
push dx
mov dl,0
mov bh,0
mov ah,02h
int 10h
pop ax
pop dx
ret
kursor endp
codesg ends
end begin
11. Программа подсчета количества введенных символов и при нажатии сочетания клавиш Alt+C прекратить ввод. Вычисления производить в процедуре.
.model small
.data
CountCHR dw 0
AIndex dw 0
StrCount db 8 dup(?)
stdout equ 1
info db '‚Введите строку: ',10,13,'$'
info1 db 10,13,'Количество введённых символов: ','$'
.code
myp proc
mov ax, @data
mov ds, ax
mov AH, 09h
mov DX, offset info
int 21h
again:
mov AH, 08h
int 21h
cmp AL, 0
je AltCtrl
mov DL, AL
mov AH, 02h
int 21h
inc CountCHR
jmp again
AltCtrl:
mov AH, 08h
int 21h
cmp AL, 2Eh
je quit
jmp again
quit:
mov AX, CountCHR
cmp AX, 0
je endb
mov AH, 09h
mov DX, offset info1
int 21h
mov AX, CountCHR
call PutI2
mov AH, 40h
mov DX, offset STRCount
mov BX, stdout
mov CX, 08h
int 21h
endb:
mov ax, 4C00h
int 21h
myp endp
Puti2 proc near
mov bx, 10
xor dx, dx
div bx
or ax, ax
jz Done
push dx
call Puti2
pop dx
Done: mov al, dl
or al, '0'
call PutCH
ret
PutI2 endp
PutCH proc near
mov di, AIndex
mov STRCount[di], al
mov byte ptr STRCount+1[di], 0
inc AIndex
ret
PutIt endp
.stack
dw 32 dup(?)
end myp
******************************************************************************************************************************************************************************************************************************************************************************************************************************
Л/р №4
Используя макроопределения решить следующие задачи:
Дата добавления: 2015-08-17; просмотров: 76 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Дополните программу. Введите строку текста и выведите его по буквам в режиме телетайпа разными по цвету буквами. | | | Напишите программу, которая получает строку и слово. С помощью макроса определить входит ли данное слово в строку. |