title lab4
page ,132
;сегмент стека
sta segment para stack 'stack'
db 255 dup('stack') ; область стека
sta ends
;сегмент данных
dseg segment
str1 db 'Enter mas1:$'
str2 db 'Enter mas2:$'
str3 db 'Result:'
mas1 db 10 dup ('$') //1 массив
mas3 db 10 dup ('$')// 3 массив
dseg ends
eseg segment
mas2 db 10 dup ('$') // 2 массив
eseg ends
subttl lab5
page
;сегмент кода
cseg segment
assume cs:cseg,ds:dseg,ss:sta,es:eseg
entry proc far ;начало процедуры
push ds ;сохраняем в стек начальное значение ds
sub ax,ax ;обнуляем ax
push ax
mov ax,dseg ;инициализация адреса сегмента данных
mov ds,ax
mov ah, 09h ;сообщение №1
mov dx, offset str1
int 21h
mov ah, 0Ah
mov dx, offset mas1 ; вводим первый массив
int 21h
mov dl,0ah
mov ah,2 ;перевод каретки
int 21h
mov ah, 09h
lea dx, mas1+2 ;вывод первого массива
int 21h
mov dl,0ah
mov ah,2 ;перевод каретки
int 21h
mov ah, 09h
mov dx, offset str2 ;вывод второго сообщения
int 21h
mov ah, 0Ah
mov dx, offset mas2 ; вводим второй массив
int 21h
mov dl,0ah
mov ah,2 ;перевод каретки
int 21h
mov ah, 09h
lea dx, mas2+2 ;вывод второго массива
int 21h
mov cx,5 ;счетчик элементов в массиве
mov di,offset mas2+2 ;адрес первого элемента первого массива-источника(сегм. доп. данных)
mov bx,offset mas1+2 ;адрес первого элемента второго массива-источника(сегм. данных)
mov si,offset mas3+2 ;адрес первого элемента массива-приемника
again:
mov al,es:[di] ;запись из дополнительного сегмента данных по адресу смещения указанному в di, в младший байт аккумулятора
mov ah,[bx] ;запись из сегмента данных по адресу смещения указанному в bx, в старший байт аккумулятора
cmp al,ah ;сравнение элементов
jne a ;если неравны, то на а
inc bx ;увеличение адреса текущих элементов в первом массиве
inc di ;увеличение адреса текущих элементов в втором массиве
a:
sub al,ah ;разность
mov [si],al ;запись элементов в массив-приемник
inc si ;увеличение адреса смещения массива-приемника
inc bx ;увеличение адреса текущих элементов в первом массиве
inc di ;увеличение адреса текущих элементов в втором массиве
loop again ;конец цикла
mov dl,0ah
mov ah,2 ;перевод каретки
int 21h
mov ah, 09h
mov dx, offset str3 ;вывод третьего сообщения
int 21h
mov dl,0ah
mov ah,2 ;перевод каретки
int 21h
mov ah, 09h
lea dx, mas3+2 ;вывод третьего массива
mov ah,1
int 21h
ret ;возврат из процедуры
entry endp ;конец процедуры
cseg ends ;конец сегмента кода
end entry ;конец программного модуля
Не пойму суть кода
Парюсь с задачей, уже надоела...
Сама задача: Вычесть из массива в дополнительном сегменте массив, хранимый в сегменте данных, при условии неравенства элементов. Массив-разность разместить в сегменте данных.
Код:
в чкаком месте непонятно ?
Цитата: koderAlex
код корявый , но ничего сверхсложного . и комментарии есть .
в чкаком месте непонятно ?
в чкаком месте непонятно ?
Он нерабочий. Нужно поправить, чтобы работало. Ошибка, скорее всего, при записи в 3 массив.
к смещению массивов зачем-то двойку прибавляете .
в случае равенства элементов инкремент указателей проходит ДВА раза .