저장 옵션을 선택하면 내 앱이 작동하지 않습니다. 버그는 어디에 있습니까?왜 내 프로그램이 성공적이지 않습니까?
[bits 16]
[org 0x7d00]
;Start
start:
mov ah,00
mov al,03h
int 10h
mov ax,0a00h
mov es,ax
keys:
mov ax,10h
int 16h
cmp al,'1'
je new
cmp al,'2'
je load
jmp keys
new:
mov cx,1
mov dx,1
int 10h
mov ax,0013h
int 10h
.key:
pusha ;save regs
mov ax,10h
int 16h
cmp al,' '
je .draw_pix
cmp al,'w'
je .up
cmp al,'s'
je .down
cmp al,'a'
je .left
cmp al,'d'
je .right
cmp al,'q'
je start
cmp al,'e'
je save
cmp al,'c'
je clear
cmp al,'r'
je load
cmp al,'p'
je save
jmp .key
;---------------------
.draw_pix :
popa
mov ah,0x0C
int 10h
jmp .key
;---------------------
.up:
popa
dec dx
jmp .key
;---------------------
.down:
popa
inc dx
jmp .key
;---------------------
.left:
popa
dec cx
jmp .key
;---------------------
.right:
popa
inc cx
jmp .key
;---------------------
.inccolor:
popa
inc al
jmp .key
;---------------------
.deccolor:
popa
dec al
jmp .key
;---------------------
load:
;....
clear:
mov ax,0013h
int 10h
jmp keys
save:
mov cx,0
mov dx,0
.read:
add [Buffer],cx
add [Buffer],dx
add [Buffer],al
mov ah,0x0D
int 10h
.getx:
cmp cx,319
je .gety
inc cx
jmp .read
.gety:
cmp dx,199
je start
inc dx
mov cx,0
jmp .read
exit:
ret
Buffer times 512 dw 0
나는 왜 이것이 멈추지 않았는가? 기능을 저장하십시오. 반드시 픽셀을 읽고 버퍼를 작성해야합니다 : X, Y, Color하지만 항상 중단됩니다. 내 os.에서 이것을 시도했습니다. 고마워요.
없음 공격하지만 당신은 당신의 코드를 구성하는 경우에만 문제가 것 중 하나하지 존재하거나 쉽게 발견 될 수있다. 'save'는 실제로 당신이 암시 한 것 이외의 것을합니다. 그것은'cx'와'dx'에 0을 넣고'.read','.getx','.gety'를 거쳐 결국 전체 프로그램을 다시 시작합니다 ('je start'). 또는 단순히 멈추게됩니다. '.get'->'.gety' "루프"에서. 너 뭐하려고? – Powerslave
서브 루틴은 점프되지 않지만 호출됩니다. x86에서 서브 루틴을 호출하고 코드를 수정하는 방법을 배웁니다. 또한 주석 처리를하면 주석 처리되지 않은 어셈블리를 읽지 않을 것입니다. – m0skit0
픽셀 페인트를 사용하고 있지만 실제로 작동하고 있다고 생각합니까? – Srs