привет Почему программа работает неправильно Первый запуск за короткий промежуток времени, дисплей меняет цвет Но тогда черный цвет возвращается Программа рисует флаг, но может не правильно экран цветной графический режим сделатьКак раскрасить монитор в графическом режиме в сборе
.model small
.stack 256
org 100H
.data
.code
main proc
mov ax, @data
mov ds, ax
call graphicsmode
call printflag
mov ah,00
mov al,03
int 10h
mov ax,4c00h
int 21h
main endp
graphicsmode proc
MOV AH,00H
MOV AL,13H
INT 10H
ret
graphicsmode endp
printflag proc
;print color green
;--------------------------
mov cx,50 ;column
mov dx,50 ;row
L1: mov ah,0CH
mov al,2H ;color pixel
mov bh,00H
int 10h
inc cx
cmp cx,400
jne L1
mov cx,50
inc dx
cmp dx,100
jne L1
;print color white
;--------------------------
mov cx,50 ;column
mov dx,100 ;row
L2: mov ah,0CH
mov al,7H ;color pixel
mov bh,00H
int 10h
inc cx
cmp cx,400
jne L2
mov cx,50
inc dx
cmp dx,150
jne L2
;print color red
;--------------------------
mov cx,50 ;column
mov dx,150 ;row
L3: mov ah,0CH
mov al,4H ;color pixel
mov bh,00H
int 10h
inc cx
cmp cx,400
jne L3
mov cx,50
inc dx
cmp dx,200
jne L3
ret
printflag endp
end main
Я уверен, вы понимаете, что «int 21h» и «int 10h» являются устаревшими вызовами DOS/BIOS. Никакая современная ОС не поддерживает их ... кроме как с помощью эмуляции приглашения DOS. ПРЕДЛОЖЕНИЯ: 1) Пройдите свой код под вашим любимым отладчиком сборки («gdb» - хороший выбор на многих платформах) и убедитесь, что ваш код верен. 2) В противном случае обвините в эмуляторе подсказок DOS – paulsm4
Режим 13h всего 320x200, и вы пытаетесь рисовать линии вне этого диапазона. Также первое, что вы делаете после рисования флага, - это вернуться в текстовый режим, который будет стирать то, что вы нарисовали. Таким образом, вы можете видеть это только во время его рисования, как только его готовый рисунок будет немедленно стираться. –
спасибо, хорошо – ahad