Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2010, 17:42   #1
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
Вопрос Ввод одномерного массива на TASM

Нужно сначала ввести количество елементов массива(max=10), ввести сами елементы и вывести их.

Подскажите как это правельнее сделать.
мой код:
Код:
model small

.data ; сегмент даних 

msg1 db 'Enter "n" :','$' ;
msg2 db 'Enter "element" :','$' ;

Mas	DB	10 DUP(?) ;пустой массив из 10 елементов
symbol	DB        100 ;клавиша
ii          DB        100 ;елем. массива

.stack 256

.code              

start: 		mov ax,@data ; Настроить сегментные регистры ds и es
		mov ds,ax
		mov es, ax

                      mov ii, 0
; Робимо вивід на екран msg1
		mov ah, 9	   ; ah <- 9 (9 функция DOS - вывод ASCII$-строки на экран)
		mov dx, offset msg1 ; Необходимо настроить регистр dx на начало строки 
		int 21h 	   ; Сделать вызов данной функции

; Считывание символа с клавиатуры
		mov ah,10h
		int 16h ; считываем символ в AL
                      mov [symbol], al


; Робимо вивід на екран msg2
		mov ah, 9	   ; ah <- 9 (9 функция DOS - вывод ASCII$-строки на экран)
		mov dx, offset msg1 ; Необходимо настроить регистр dx на начало строки 
		int 21h 	   ; Сделать вызов данной функции

                      mov cx, [symbol] //;сколько раз будет цикл
;в цикле вводим все елементы массива
cyc:
                      ; Считывание символа с клавиатуры
		mov ah,10h
		int 16h ; считываем символ в AL
                      mov mas + ii, al                       ; можно ли так делать ?? 
                      dec cx
                      inc ii
                      loop cyc

Exit:   mov ax, 04c00h    ; ah = 04c -> функция DOS завершения программы
            		  ; al = 00  -> код ошибки 0 (нормальное завершение работы)     
    	int 21h        ; Сделать вызов данной функции    

end start
Правильно хотя бы организован ввод массива ??
Alex1991 вне форума Ответить с цитированием
Старый 29.10.2010, 23:50   #2
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

посмотри этот код, в котором организовано все правильно...DISP - это процедура вывода на экран результата...в общем, здесь вводится размерность квадратной матрицы, заполнение элементами идет как одномерного массива...думаю, все должно быть понятно...

Код:
codesg segment para 'code'

assume cs:codesg, ds:codesg, ss:codesg, es:codesg

org 100h  
;.386

Begin:jmp main

date    dw      ?

s1 db 'Vvedite znacheniya massiva',10,13,'$'
s2 db 10,13,'Znacheniya massiva',10,13,'$' 
s3 db 10,13,'Resultatiruyushi massiva',10,13,'$'  
s4 db 10,13,'Summa chetnix elementov glavnoy diagonaly = ','$'   
s5 db 'Scolko strok i stolbcov doljno bit?',10,13,'$'   
min db 'Minimalnaya razmernost matrici 2X2',10,13,'$'
max db 'Maximalnaya razmernost matrici 5X5',10,13,'$'
big db 'big element',10,13,'$'   
ent db 10,13,'$'

razmer dw ?
cicl dw ?
size_el db 2
sum dw 0

probel db ' ','$'
ind dw 0
count db 0  

ch_1 db 0
ch_2 dw 0
ch_3 db 0 
mas_1 dw 25 dup (' ')

k dw ?

main proc near
@start: 

    mov ah,09h
    lea dx,s5
    int 21h
    
    mov ah,08
    int 21h
    
    ;razmernost matrici
    sub al,30h
    mov ah,0
    mov razmer,ax 
    mov bl,al
    mul bl  
    mov ah,0
    mov k,ax
    
    cmp k,4
    jl @min
    
    cmp k,25
    jg @max 

    mov si,0  
    
    mov ah,09 
    lea dx,s1
    int 21h

@enter:
        mov ah,08
        int 21h
        
        inc count
        
        cmp count,4
        je @form_of_number
        
        cmp al,'p'
        je @form_of_number
        
        cmp al,'Q'
        je @end 
        jmp @stack
        ret

@stack:
         cbw
         push ax

@record: 
         mov ah,03
         mov bh,0
         int 10h 
         
         pop ax
         mov ch_1,al
         push ax
                
         mov ah,13h
         mov bl,30
         mov al,1
         lea bp,ch_1
         mov cx,1
         int 10h   

jmp @enter


;-------------------------------
@form_of_number:  

    mov ah,09
    lea dx,probel
    int 21h
    dec count    
    
    pop ax
    sub al,30h
    add ind,ax
    dec count
    cmp count,0
    je @add_el
    
    pop ax
    sub al,30h
    mov bl,10
    mul bl
    add ind,ax
    dec count
    cmp count,0
    je @add_el
    
    pop ax
    sub al,30h
    mov bl,100
    mul bl
    add ind,ax


    
    cmp ind,255
    jg @big_element

    
@add_el: 
    mov ax,ind
    mov mas_1[si],ax
    add si,2
    mov ind,0 
    mov count,0  
    dec k
    cmp k,0
    je @vivid  
    ;je @viv
    jmp @enter
    
@vivid:
    mov ah,0
    mov ax,razmer 
    ;imul razmer
    mov cx,ax
    mov bp,0
    @_m1:
    
    mov ah,09h
    lea dx,ent
    int 21h
    
    push cx
    mov cx,razmer
    @m:
     push cx 
        lea bx,mas_1  
        mov ax,bp
        xlat              
        mov     date,ax   
        call    DISP 
        add bp,2
      pop cx
    loop @m
    pop cx
    
    ;mov ah,09h
    ;lea dx,ent
    ;int 21h
    
    loop @_m1
    
    
    
@arifm:
    mov cx,razmer
    mov cicl,0
@arifm_1:
    
    mov ax,razmer
    imul cicl
    imul size_el
    mov bx,ax
    
    mov ax,cicl
    imul size_el
    mov si,ax
    
    inc cicl
    mov ax,mas_1[bx][si]          
    push ax
    mov bl,2
    idiv bl
    cmp ah,0
    je @sum

    loop @arifm_1
    jmp @viv
    
@sum:    
    pop ax
    add sum,ax
    loop @arifm_1        
    
@viv:
    mov ax,sum
    mov date,ax 
    
    mov ah,09h
    lea dx,s4
    int 21h
     
    call DISP     ;твоя процедура вывода
    jmp @end
    
@big_element:
    mov ah,09h
    lea dx,big
    int 21h
    mov ind,0
    mov count,0
    jmp @enter 
    
@min:
    mov ah,09h
    lea dx,min
    int 21h
    jmp @start
    
@max:
    mov ah,09h
    lea dx,max
    int 21h
    jmp @start
    
main endp
JeyKip вне форума Ответить с цитированием
Старый 29.10.2010, 23:50   #3
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

посмотри этот код, в котором организовано все правильно...DISP - это процедура вывода на экран результата...в общем, здесь вводится размерность квадратной матрицы, заполнение элементами идет как одномерного массива...думаю, все должно быть понятно...

Код:
codesg segment para 'code'

assume cs:codesg, ds:codesg, ss:codesg, es:codesg

org 100h  
;.386

Begin:jmp main

date    dw      ?

s1 db 'Vvedite znacheniya massiva',10,13,'$'
s2 db 10,13,'Znacheniya massiva',10,13,'$' 
s3 db 10,13,'Resultatiruyushi massiva',10,13,'$'  
s4 db 10,13,'Summa chetnix elementov glavnoy diagonaly = ','$'   
s5 db 'Scolko strok i stolbcov doljno bit?',10,13,'$'   
min db 'Minimalnaya razmernost matrici 2X2',10,13,'$'
max db 'Maximalnaya razmernost matrici 5X5',10,13,'$'
big db 'big element',10,13,'$'   
ent db 10,13,'$'

razmer dw ?
cicl dw ?
size_el db 2
sum dw 0

probel db ' ','$'
ind dw 0
count db 0  

ch_1 db 0
ch_2 dw 0
ch_3 db 0 
mas_1 dw 25 dup (' ')

k dw ?

main proc near
@start: 

    mov ah,09h
    lea dx,s5
    int 21h
    
    mov ah,08
    int 21h
    
    ;razmernost matrici
    sub al,30h
    mov ah,0
    mov razmer,ax 
    mov bl,al
    mul bl  
    mov ah,0
    mov k,ax
    
    cmp k,4
    jl @min
    
    cmp k,25
    jg @max 

    mov si,0  
    
    mov ah,09 
    lea dx,s1
    int 21h

@enter:
        mov ah,08
        int 21h
        
        inc count
        
        cmp count,4
        je @form_of_number
        
        cmp al,'p'
        je @form_of_number
        
        cmp al,'Q'
        je @end 
        jmp @stack
        ret

@stack:
         cbw
         push ax

@record: 
         mov ah,03
         mov bh,0
         int 10h 
         
         pop ax
         mov ch_1,al
         push ax
                
         mov ah,13h
         mov bl,30
         mov al,1
         lea bp,ch_1
         mov cx,1
         int 10h   

jmp @enter


;-------------------------------
@form_of_number:  

    mov ah,09
    lea dx,probel
    int 21h
    dec count    
    
    pop ax
    sub al,30h
    add ind,ax
    dec count
    cmp count,0
    je @add_el
    
    pop ax
    sub al,30h
    mov bl,10
    mul bl
    add ind,ax
    dec count
    cmp count,0
    je @add_el
    
    pop ax
    sub al,30h
    mov bl,100
    mul bl
    add ind,ax


    
    cmp ind,255
    jg @big_element

    
@add_el: 
    mov ax,ind
    mov mas_1[si],ax
    add si,2
    mov ind,0 
    mov count,0  
    dec k
    cmp k,0
    je @vivid  
    ;je @viv
    jmp @enter
    
@vivid:
    mov ah,0
    mov ax,razmer 
    ;imul razmer
    mov cx,ax
    mov bp,0
    @_m1:
    
    mov ah,09h
    lea dx,ent
    int 21h
    
    push cx
    mov cx,razmer
    @m:
     push cx 
        lea bx,mas_1  
        mov ax,bp
        xlat              
        mov     date,ax   
        call    DISP 
        add bp,2
      pop cx
    loop @m
    pop cx
    
    ;mov ah,09h
    ;lea dx,ent
    ;int 21h
    
    loop @_m1
    
    
    
@arifm:
    mov cx,razmer
    mov cicl,0
@arifm_1:
    
    mov ax,razmer
    imul cicl
    imul size_el
    mov bx,ax
    
    mov ax,cicl
    imul size_el
    mov si,ax
    
    inc cicl
    mov ax,mas_1[bx][si]          
    push ax
    mov bl,2
    idiv bl
    cmp ah,0
    je @sum

    loop @arifm_1
    jmp @viv
    
@sum:    
    pop ax
    add sum,ax
    loop @arifm_1        
    
@viv:
    mov ax,sum
    mov date,ax 
    
    mov ah,09h
    lea dx,s4
    int 21h
     
    call DISP     ;твоя процедура вывода
    jmp @end
    
@big_element:
    mov ah,09h
    lea dx,big
    int 21h
    mov ind,0
    mov count,0
    jmp @enter 
    
@min:
    mov ah,09h
    lea dx,min
    int 21h
    jmp @start
    
@max:
    mov ah,09h
    lea dx,max
    int 21h
    jmp @start
    
main endp
JeyKip вне форума Ответить с цитированием
Старый 29.10.2010, 23:52   #4
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

блин, почему мои сообщения так часто дублируются..??...
JeyKip вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка одномерного массива imperceptible4462 Помощь студентам 10 07.09.2010 09:35
Ввод с клавиатуры и поиск/Assembler/TASM for Dos Rifler Помощь студентам 8 03.09.2010 08:22
Обработка одномерного массива. Gangstervic Помощь студентам 0 16.12.2009 19:21
Ввод натуральных чисел в Tasm Mixim Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 29.11.2009 09:27
Задачка одномерного массива Клеом Помощь студентам 2 26.09.2009 19:20