Другие языки программирования и технологии

вопрос по ассемблеру

расскажите, что делается в каждой строке задачи...пример в превой строке sst segment stack "stack" ; sst - метка, содержащая адрес начала сегмента стека dw 12 dup (?) sst ends dat segment mm1 db "A","B","A","A","C","N" count db 0 dat ends cod segment assume ss:sst,ds:dat,cs:cod begin: mov ax,dat mov ds,ax mov cx,6 mov si,0 mov count,0 met:mov dl,mm1[si] mov ah,2 int 21h inc si loop met mov ah,2 mov dl,0ah mov dh,0dh int 21h mov cx,6 mov si,0 met1:mov dl,mm1[si] cmp dl,"A" jnz met2 mov mm1[si],"M" inc count met2:inc si loop met1 mov cx,1 met3:mov dl,count add dl,30h int 21h mov ah,2 mov dl,0ah mov dh,0dh int 21h loop met3 mov cx,6 mov si,0 met4: mov dl,mm1[si] mov ah,2 int 21h inc si loop met4 mov ah,4ch int 21h cod ends end begin
sst segment stack "stack" ; sst - метка, содержащая адрес начала сегмента стека
dw 12 dup (?) ; выделяем 12 слов для стека (размер)
sst ends ; конец сегмента стека
dat segment ; сегмент данных
mm1 db "A","B","A","A","C","N" ; данные с меткой mm1
count db 0 ; 1 байт для щётчика
dat ends ; конец сегмента данных
cod segment ; сегмент кода
assume ss:sst,ds:dat,cs:cod ; привязка сегментных регистров к конкретным сегментам
begin: mov ax,dat ; точка входа, загрузка ds сегментом dat через ax
mov ds,ax
mov cx,6 ; щётчик cx= 6 (размер mm1)
mov si,0 ; смещение 0 (пкрвый символ в mm1)
mov count,0 ; обнуляем щётчик count
met:mov dl,mm1[si] ; метка met, берём символ из mm1 со смещением +si
mov ah,2 ; dos функция = отображения символа
int 21h ; отоброжение
inc si ; смещение si на следующий символ
loop met ; цикл cx раз
mov ah,2 ; dos функция = отображения символа
mov dl,0ah ; dl = (наверно) код перехода на следующую строку
mov dh,0dh ; ???незнаю зачем но наверно используется вместе с dl
int 21h ; отоброжение (на строку ниже)
mov cx,6 ; сново размер данных mm1
mov si,0 ; сново смещение на первый элемент mm1
met1:mov dl,mm1[si] ; метка met1, берём символ
cmp dl,"A" ; сравниваем его с символом A
jnz met2 ; если не такой то идём на met2
mov mm1[si],"M" ; если такой то заменяем на M
inc count ; и увеличиваем щётчик count
met2:inc si ; метка met2, si+1 = переходим к следущему символу
loop met1 ; цикл на met1
mov cx,1 ; непонятно зачем это
met3:mov dl,count ; берём значение щётчика count (количество замененых)
add dl,30h ; переводим значение в код ascii цифры
int 21h ; отоброжаем эту цифру
mov ah,2 ; dos функция = отображения символа, и сново на следующую строку
mov dl,0ah
mov dh,0dh
int 21h
loop met3 ; повторяем 1 раз из 1 нужного (непонятно зачем)
mov cx,6 ; размер данных mm1
mov si,0 ; в начало mm1
met4: mov dl,mm1[si] ; метка met4, берём символ
mov ah,2 ; функция отоброжения
int 21h ; отоброжение
inc si ; на следующий
loop met4 ; и так все
mov ah,4ch ; выходим в dos
int 21h
cod ends ; конец кода
end begin ; говорим откуда стартуем
--------
; вот мой вариант (отсебячина)
begin:mov ax,dat
mov ds,ax
mov count,0
mov cx,6
mov si,0
met1:mov dl,mm1[si]
push dl ; для надёжности
mov ah,2
int 21h
pop dl
cmp dl,"A"
jnz met2
mov mm1[si],"M"
inc count
met2:inc si
loop met1
mov ah,2
mov dx,0d0ah
int 21h
mov dl,count
add dl,30h
int 21h
mov ah,2
mov dx,0d0ah
int 21h
mov cx,6
mov si,0
met4:mov dl,mm1[si]
mov ah,2
int 21h
inc si
loop met4
mov ax,4c00h
int 21h
Алексей Лапин
Алексей Лапин
1 845
Лучший ответ
Скачай учебник по ассемблеру, быстрее выйдет.