Из элементов целочисленного вектора С ( п) , п < 12 кратных заданному целому числу Т , сформировать вектор В - Assembler
Формулировка задачи:
Обеспечить обработку данных массивов в виде отдельной процедуры.
Возникает ошыбка при перезписи в другой масив . пожалуста помогите доделать.
.MODEL small .STACK 256 .data array dw 12 dup (?) array2 dw 12 dup (?) t db 3 .code .486 main: ProgramStart PROC NEAR mov ax,@data mov ds,ax mov es,ax mov cx,12 lea di, array cld go: mov al, cl stosb loop go mov cx,12 lea si, array mov ah,02h show: lodsb mov dl, al add dl,30h int 21h loop show mov si,1 mov esi,0 mov ax,array[esi*2] perevirka: div t cmp ah, 0 inc esi cmp esi, 12 je zeror jnz masb masb: mov bx, array[esi*2] mov array2[si*2],bx inc si cmp esi, 12 je zeror jnz perevirka zeror: sho: mov bx,OFFSET array2 call PrintSg ;lea dx,array2 ; mov ah,09h ; int 21h ; ; mov cx,12 ; mov si,0 exit: mov ax,4c00h int 21h ProgramStart ENDP PrintSg PROC NEAR mov dx,[bx] mov ah,09h int 21h mov cx,12 mov si,0 ret PrintSg ENDP end main
Решение задачи: «Из элементов целочисленного вектора С ( п) , п < 12 кратных заданному целому числу Т , сформировать вектор В»
textual
Листинг программы
org 100h jmp start mess0 db 13,10,'Vector(C): $' mess1 db 13,10,'Vector(B): $' vectC db 1,0,6,3,9,5,2,7,8,9,3,6 len = $ - vectC ; длина источника vectB db 12 dup('$') ; приёмник (с маркером fn.9) divT db 3 ; делитель start: mov dx,mess0 ; параметр call MESSAGE ; mov si,vectC ; параметр call PRINT ; ;===================================== mov si,vectC ; параметры mov di,vectB ; ^^ call MOD_PROG ; ;===================================== mov dx,mess1 ; call MESSAGE ; mov dx,vectB ; call MESSAGE ; exit: ; xor ax,ax ; int 16h ; int 20h ; выход! ;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн MESSAGE: ; mov ah,9 ; int 21h ; RET ; ;------------------------------------------------------------------- ; Процедура переводит числа 0-9 в символы ; и выводит их на экран. На входе: SI - буфер с числами PRINT: ; mov cx,len ; @@: ; lodsb ; or al,30h ; перевод числа в символ int 29h ; loop @b ; RET ; ;------------------------------------------------------------------- ; Процедура вычисляет MOD числа ; На входе: SI - источник, DI - приёмник MOD_PROG: ; mov cx,len ; длина массива mov bl,[divT] ; делитель @@: ; lodsb ; берём число.. cmp al,bl ; если оно меньше делителя, jb next ; ..то пропускаем его mov bh,al ; иначе: запоминаем xor ah,ah ; взводим флаг ZERO div bl ; вычисляем остаток or ah,ah ; проверка на нуль jnz next ; пропускаем, если есть остаток mov al,bh ; иначе: возвращаем число в AL or al,30h ; переводим его в символ, stosb ; ..и сохраняем в приёмнике next: ; loop @b ; мотаем цикл СХ-раз.. RET ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д