Из элементов целочисленного вектора С ( п) , п < 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 ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д