Я начал изучать сборку в этом году в своей школе, и мы только начали изучать пиксели.Проблемы с функцией задержки BIOS (INT 15h/AH = 86h)
Наш учитель дал нам некоторый код и сказал нам, чтобы он общался с ним, он также сказал нам попробовать и реализовать задержку в коде (ah = 86h | int 15h), но когда я попытался использовать его, цвета некоторых пикселей были изменены, и я не понимаю, почему
код: (просто кусок кода, есть еще некоторые там также получить разрушил после задержки)
mov cx, 20
add [y], 2
mov dx, [y]
paint1RowOf10:
mov bh, 0h
mov bx, cx
add [x], 1
mov cx, [x]
add [y], 4
mov dx, [y]
mov ax, [red]
mov ah,0ch
int 10h
; here is a delay part, it waits for 1 seconde
; from the help of assembly:
; INT 15h/AH = 86h - BIOS wait function.
;CX:DX = interval in microseconds (these are notes from my teacher)
mov ah, 86h
mov cx, 1
mov dx, 2
int 15h
mov cx, bx
loop paint1RowOf10
Это результат http://prntscr.com/9a8lpw Можете ли вы сказать мне, почему это происходит? потому что, насколько я вижу, пиксели должны идти в одной строке и не менять цвета.
Это выглядит как проблема 'mov bh, 0h;', за которой следует 'mov bx, cx'. , Сначала вы перемещаете 0 в _BH_ для 'int 10h/ah = 0ch call' (BH = номер страницы). Это нормально, тогда сразу после этого вы перезаписываете ВСЕ _BX_ (включая _BH_ и _BL_), выполняя команду 'mov bx, cx'. _BL_ и _BH_ являются частями регистра _BX_. Перемещение чего-то в _BX_ приведет к сбою _BH/BL_. Либо нажмите _CX_ в стеке (и поместите его позже), либо используйте регистр, отличный от _BX_, в качестве временного хранилища (в данном случае _SI_ или _DI_) выглядят безопасно с указанным кодом. –
Я говорю _look safe_, но вы не показываете весь свой код, чтобы они не были в безопасности. Вы должны убедиться, что все, что вы используете, не используется (или будет сбито) в коде, который вы показываете (и части, которые вы не сделали). Было бы лучше просто изменить свой вопрос, чтобы показать весь ваш код, что сделало бы его хотя бы поддающимся проверке полным примером. –
Если вы хотите увеличить свои шансы на получение решения, напишите весь свой код, а не только фрагмент. Хотя в показанном коде есть потенциальные проблемы, не видя остальной части вашей программы, людям будет труднее помогать. –