Добре время суток, помогите в решение задачи, заранее спасибо:
1 .Разработать процедуру Big2Sub (var M1, M2, Carry; len: word), где M1, M2 сверхбольшие целые положительные числа (байтовые массивы длиной len). Операция - М1 = М1-М2. Переменной байтового типа Carry присваивается значение 1 при наличии займа и 0 при ее отсутствии. Должны использоваться команды для 32-разрядных данных. Если значение len не кратно 4, то для вычитания последних байт использован команды для 8-разрядных данных. Считать, что М1, М2 i Carry находятся в одном сегменте.
вот сделал почти процедуру, но не могу понять куда надо прописать переменную
что бы присвоить значение 1 при наличии займа и 0 при ее отсутствии....
подскажите пожалуйста вот сама процедура:
| Код | .386 ;M1-M2 _Text segment PARA PUBLIC 'Code' USE16 Big2Sub PROC far PUBLIC Big2Sub ASSUME cs:_Text,ds:_Text,es:_Text ; prolog push bp mov bp,sp add bp,6 ; konets prologa lds si,[bp+2] ; M2 les di,[bp+6] ; M1 mov AX,word ptr [bp] ;v AX znacheniya len mov BX,4 div BL ;частка в AL, остача в AH mov BX,AX ;частка в ВL, остача в ВH xor CX,CX mov CL,AL ;к1льк1сть 1терац1й в1дн1мання по 4 байта CLC ;скидання флага переносу CLD ;скидання флага напряму @sub: LODSD ;4 байта 1з M2 записуємо в EAX sbb es:dword ptr [di],EAX ; M1 - M2 - CF add di,4 ; збўльшуємо змўщення на 4 байта dec cx jnz @sub mov CL,BH ;к1льк1сть 1терац1й в1дн1мання по 1 байту or cl,cl JZ end @sub2: LODSB ;1 байт ўз M2 записуємо в AL sbb es:byte ptr [di],AL ;M1 - M2 - CF inc di ;зб1льшуємо зм1щення на 1 байт dec cx jnz @sub2 end: ;epilog pop bp ret 10 Big2Sub endp _Text ends ; konets segmenta end
|
|