2015-04-16 2 views
1
mov bx,0 
mov cx,0 
copy: 

;copy col arrays. 
mov dl,[col_star+bx] 
mov [go_right+bx],dl 
mov [go_left+bx],dl 
inc [go_right+bx] 
dec [go_left+bx] 

;copy row arrays 
mov dl,[row_star+bx] 
mov [go_up+bx],dl 
mov [go_down+bx],dl 
dec [go_up+bx] 
inc [go_down+bx] 

inc bx 
inc cx 
cmp cx,20 
jl copy 

скажите, что у меня есть 20 значений для col_star db 20 dup (?) И row_star db 20 dup (?) будет ли этот цикл копировать значения в каждом массиве. Мне нужно манипулировать значением. вот почему есть inc/dec. пытались к этому циклу в течение нескольких часов уже ничего не происходило.Как хранить произвольно сгенерированные числа в массивах. Ассамблея 8086

ответ

1
mov bl,0  ;use BX !!! 
transfer: 

call random_coor_star 
mov dl, gen_row_star 
mov [row_star+bx],dl 

mov dl, gen_col_star 
mov [col_star+bx],dl 
inc bl  ;use BX !!! 
PUSH BX 
call delay 
PUSH BX 
cmp bx,20 
jl transfer 

В предыдущем фрагменте кода вам необходимо использовать BX вместо BL.

РЕДАКТИРОВАТЬ

Для хранения 20 значений изменить cmp bx,5 и jle transfer в cmp bx,20 и jl transfer.
Лучшее убедитесь, что задержка сохраняет все регистры.

transfer: 
call delay 
call random_coor_star 
mov dl, gen_row_star 
mov [row_star+bx],dl 
mov dl, gen_col_star 
mov [col_star+bx],dl 
complete_print [row_star+bx],[col_star+bx],star_char,color 
inc bx 

cmp bx,5 
jle transfer 
+0

им я делаю это правильно? я не знаю почему он не хранит 20 значений. цикл должен делать около 20 значений, хранящихся в row_star db 20 dup (?) col_star db 20 dup (?) –

+0

Да. Вы заполняете два 20-байтных массива с номерами от 5-9 (строка) и 5-54 (столбец) соответственно. – Fifoernik

+0

плохой почтовый мой код. похоже, у него много ошибок. я не понимаю петлю. –

1

Маленькая программа для хранения 20 пар случайных чисел в массиве (с EMU8086 и вашим случайным алгоритмом):

.stack 100h 
.data    

gen_row_star db ? 
gen_col_star db ? 

array db 40 dup(?) ;STORES 20 PAIRS OF RANDOM NUMBERS. 

.code   
;INITIALIZE DATA SEGMENT. 
    mov ax, @data 
    mov ds, ax 

;FILL ARRAY WITH RANDOM NUMBERS. 
    mov di, offset array 
    mov bp, 20 ;GENERATE 20 PAIRS OF RANDOM NUMBERS. 
fill_array: 
    call random_coor_star ;NUMBERS RETURN IN gen_row_star AND gen_col_star. 
    mov al, gen_col_star 
    mov [ di ], al 
    inc di ;POSITION FOR NEXT NUMBER IN CURRENT PAIR. 
    mov al, gen_row_star 
    mov [ di ], al 
    inc di ;POSITION FOR NEXT PAIR. 
    dec bp 
    jnz fill_array 

;FINISH PROGRAM. 
    mov ax, 4c00h 
    int 21h   

;------------------------------------------ 
;DR.DOOM'S RANDOM PROC. 

random_coor_star proc 

mov ah, 00h 
int 1ah 

mov ah, 00h 
int 1ah 

mov ax,dx 
xor dx,dx 
mov cx,10 
div cx 

add dl, 5 
mov al,dl 
mov gen_row_star,al 

mov ah, 00h 
int 1ah 

mov ah, 00h 
int 1ah 

mov ax,dx 
xor dx,dx 
mov cx,50 
div cx 
add dl,5 
mov al,dl 
mov gen_col_star,al 

ret 

random_coor_star endp 
+0

О, эй, его снова и снова :)) спасибо мужчина: D –

+0

.Глад, чтобы помочь! –

+0

чувак, я наконец нашел способ сделать цикл :)))) наконец-то после многих часов: < –

Смежные вопросы