Из элементов целочисленного вектора С ( п) , п < 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                      ;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы