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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2012, 19:14   #1
~Sл@\/яH~
Пользователь
 
Регистрация: 19.11.2011
Сообщений: 35
По умолчанию Покраска массива

Добрый вечер. Прошу помочь мне в отладке кода. У меня задание, покрасить четные элементы массива в красный цвет, а не четные в зелёный. Всё это получилось, только вот программа выводит второй элемент как ";" вместо числа.
Код:
data segment
 mes db  'Massiv- ','$'
countItems  equ 8           ;количество эл-в в массиве
x db ?
 i   db ?                    ;для установки курсора
enter_mas   db  'vvedi massiv iz 8 elementov:',0dh,0ah,'$'
output_mas  db  0dh,0ah,'massiv:',0dh,0ah,'$'
z db ?
data ends                 
stk segment stack        
 db 128 dup(?)           
stk ends                 
assume cs:code, ds:data, ss:stk    
code segment             
start:                  
        mov  ax,data   
        mov  ds,ax 
        mov ah,9
        mov dx,offset enter_mas
        int 21h
                
        xor ax,ax   ;чистим ax
        
        mov cx,8
        mov si,0
        
        jmp enter_text
        
    enter_text:
        mov ah,1h
        int 21h
        
        sub al,30h
        mov x[si],al
        inc si
        
        cmp si,countItems
        jle enter_text
 
        mov cx,8
        mov si,0
        mov ah,09h
        lea dx,output_mas
        int 21h
        
        mov si,0
        mov cx,8    
    output_array:
        mov ah,02h
        mov dl,x[si]
        add dl,30h
        int 21h
        inc si
        loop output_array





        ;очистка экрана
        mov  ax,0600h   ;AH=06, AL=00 - весь экран
        mov  bh,31h     ;голубой фон (3), синие символы (1)
        mov  cx,0000h   ;верхняя строка, левый столбец (00,00)
        mov  dx,184fh   ;нижняя строка, правый столбец (24,79)
        int  10h
        mov  ah,02h     ;функция установки позиции курсора 
        mov  dh,1       ;строка 1
        mov  dl,0       ;столбец 0   
        mov  bh,0       ;страница 0 
        int  10h
        mov  ah,09h     ;вывод строки mes
        lea  dx,mes
        int  21h
        mov  i,8        ;столбец 8 – начало вывода массива    
        mov  si,0       ;индекс начального элемента в SI
        mov  di,1       ;начальное значение переменной цикла 
;mov si,0
jmp m2 
cycl:   
        cmp  di,countItems        ;переменная цикла = countItems
        jg   exit        ;если больше countItems – на exit
mov ax,si
mov  z,2
div z
        cmp  ah,0     ;X[i]=5
        jle   m2          ;если равно 5 – переход на m2 
        jge   m3          ;если меньше 5 – переход на m3
        ;mov  bl,37h      ;голубой фон (3), белые символы (7)
        jmp  fin     
;----------------------
m2:     mov  bl,34h      ;голубой фон (3), красные символы (4)
        jmp  fin         
;----------------------
m3:     mov  bl,32h      ;голубой фон (3), зеленые символы (2)
        jmp fin
fin:    
        mov  ah,09h      ;вывод элемента массива
        mov  al,x[si]    ;пересылка элемента массива в АL
        add  al,30h      ;преобразование числа в символ
        mov  cx,1        ;число выводимых символов
        mov  bh,0        ;страница 0
        int  10h
        mov  ah,02h      ;установка курсора в нужную позицию
        mov  dh,1        ;строка 1   
        add  i,3
        mov  dl,i        ;столбец i
        mov  bh,0        ;страница 0
        int  10h
        inc  si          ;переход к следующему элементу 
        inc  di          ;изменение переменной цикла
        jmp  cycl
exit:   
mov ah,01
int 21h
        mov  ax,4c00h     ;завершение работы программы             
        int  21h       
code ends               
end start
Может быть кто нибудь знает в чем заключается проблема? Заранее спасибо
~Sл@\/яH~ вне форума Ответить с цитированием
Старый 23.12.2012, 19:19   #2
~Sл@\/яH~
Пользователь
 
Регистрация: 19.11.2011
Сообщений: 35
По умолчанию

Всё нашел ошибку. Нужно задавать x db 8 dup(?).
~Sл@\/яH~ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
[Делфи]Покраска ячейки StringGrid без DrawCell. Как? zotox Помощь студентам 0 02.09.2009 16:30
покраска dbgrideh artemavd БД в Delphi 1 16.06.2009 12:47