Ich habe ein Projekt in der Schule in aembley zu tun, und ich muss die Pixel, die ich in der Char-Tabelle (ein Bild, das ich geöffnet) in ein anderes Bild in der gleichen gemalt Browser (mein Code beim Start beim Öffnen des Bildes erstellt ein neues Bild, das das gleiche ist, und dann brauche ich, nachdem ich ein Wort in das Wort Tabelle Bild umkreist, um die gemalten Pixel zum kopierten Bild zu kopieren) einige weiß, wie es geht ? dies ist mein Code, der ein Bild öffnet, und lassen Sie den Spieler 1 zu Kreisen Wörter in der Tabelle Foto, das ist die Spielkarte, und wenn das Wort legal und Spieler 2 das Wort akzeptieren, so geht die Runde zu Spieler 2 und wenn nein , möchte ich den Code der Spielkarte auf dem anderen Bild kopieren i gespeichert haben und erstelltKopieren cursor pixel Gemälde von 1 Bild zu einem anderen assembley
IDEAL
MODEL small
STACK 100h
DATASEG
color db 2
color2 db 14
message db 'IS The Word Legal?$'
filename db 'open.bmp',0
filehandle dw ?
Header db 54 dup (0)
Palette db 256*4 dup (0)
ScrLine db 320 dup (0)
ErrorMsg db 'Error', 13, 10,'$'
cxval dw ?
dxval dw ?
colorval db ?
filename2 db 'yoav.bmp',0 ;The new file
filehandle2 dw ?
CODESEG
proc OpenFile
; Open file
mov ah, 3Dh
xor al, al
mov dx, offset filename
int 21h
jc openerror
mov [filehandle], ax
ret
openerror:
mov dx, offset ErrorMsg
mov ah, 9h
int 21h
ret
endp OpenFile
proc ReadHeader
; Read BMP file header, 54 bytes
mov ah,3fh
mov bx, [filehandle]
mov cx,54
mov dx,offset Header
int 21h
ret
endp ReadHeader
proc ReadPalette
; Read BMP file color palette, 256 colors * 4 bytes (400h)
mov ah,3fh
mov cx,400h
mov dx,offset Palette
int 21h
ret
endp ReadPalette
proc CopyPal
; Copy the colors palette to the video memory
; The number of the first color should be sent to port 3C8h
; The palette is sent to port 3C9h
mov si,offset Palette
mov cx,256
mov dx,3C8h
mov al,0
; Copy starting color to port 3C8h
out dx,al
; Copy palette itself to port 3C9h
inc dx
PalLoop:
; Note: Colors in a BMP file are saved as BGR values rather than RGB.
mov al,[si+2] ; Get red value.
shr al,2 ; Max. is 255, but video palette maximal
; value is 63. Therefore dividing by 4.
out dx,al ; Send it.
mov al,[si+1] ; Get green value.
shr al,2
out dx,al ; Send it.
mov al,[si] ; Get blue value.
shr al,2
out dx,al ; Send it.
add si,4 ; Point to next color.
; (There is a null chr. after every color.)
loop PalLoop
ret
endp CopyPal
proc OpenOutputFile
; Open the output file
mov ah, 3Dh
mov al, 2h
mov dx, offset filename2
int 21h
jc openerror3
mov [filehandle2], ax
ret
openerror3:
mov dx, offset ErrorMsg
mov ah, 9h
int 21h
jmp exit
ret
endp OpenOutputFile
proc CreateAndOpenOutputFile
; Create file
mov ah, 3Ch
mov cx, 0
mov dx, offset filename2
int 21h
jc openerror2
call OpenOutputFile
ret
openerror2:
mov dx, offset ErrorMsg
mov ah, 9h
int 21h
jmp exit
ret
endp CreateAndOpenOutputFile
proc WriteOutputFileHeader
; Write BMP file header, 54 bytes into the output file
mov ah,40h
mov bx, [filehandle2]
mov cx, 54
mov dx,offset Header
int 21h
ret
endp WriteOutputFileHeader
proc WriteOutputFilePalette
; Write BMP file color palette, 256 colors * 4 bytes (400h) into the output file
mov ah,40h
mov bx, [filehandle2]
mov cx, 400h
mov dx,offset Palette
int 21h
ret
endp WriteOutputFilePalette
proc CopyInputFileBitmap
; BMP graphics are saved upside-down.
; Read the graphic line by line (200 lines in VGA format),
; displaying the lines from bottom to top.
mov ax, 0A000h
mov es, ax
mov cx,200
PrintBMPLoop:
push cx
; di = cx*320, point to the correct screen line
mov di,cx
shl cx,6
shl di,8
add di,cx
; Read one line
mov ah,3fh
mov bx, [filehandle]
mov cx,320
mov dx,offset ScrLine
int 21h
Change:
;copy the data into the output file
mov ah, 40h
mov bx, [filehandle2]
mov cx, 320
mov dx, offset ScrLine
int 21h
loadImage:
; Copy one line into video memory
cld ; Clear direction flag, for movsb
mov cx,320
mov si,offset ScrLine
rep movsb ; Copy line to the screen
;rep movsb is same as the following code:
;mov es:di, ds:si
;inc si
;inc di
;dec cx
;loop until cx=0
pop cx
loop PrintBMPLoop
ret
endp CopyInputFileBitmap
proc CloseInputFile
; Close the input file
mov ah,3Eh
mov bx, [filehandle]
int 21h
ret
endp CloseInputFile
proc CloseOutputFile
; Close the output file
mov ah,3Eh
mov bx, [filehandle2]
int 21h
ret
endp CloseOutputFile
start:
mov ax, @data
mov ds, ax
; Graphic mode
mov ax, 13h
int 10h
; Process BMP file
call OpenFile
call ReadHeader
call ReadPalette
call CopyPal
call CreateAndOpenOutputFile
call WriteOutputFileHeader
call WriteOutputFilePalette
call CopyInputFileBitmap
call CloseInputFile
call CloseOutputFile
jmp Mouse
MessagePrint2:
mov dx, offset message
mov ah, 9
int 21h
mov dl,10
mov ah, 2
int 21h
mov ah, 1
int 21h
xor cx, cx
mov cl, 79h
cmp cl,al
je MouseLp
mov cl, 6Eh
cmp cl, al
je NextTurn
Mouse:
mov ax, 0h
int 33h
mov ax, 1h
int 33h
MouseLp:
mov ax, 3h
int 33h
cmp bx, 01h
jne MouseLp
Draw:
shr cx, 1
sub dx, 1
mov bh, 0h
mov al,[color]
mov ah, 0Ch
int 10h
mov ax, 3h
int 33h
cmp bx, 01h
je Draw
jmp MessagePrint
MessagePrint:
mov dx, offset message
mov ah, 9
int 21h
mov dl,10
mov ah, 2
int 21h
mov ah, 1
int 21h
xor cx, cx
mov cl, 79h
cmp cl,al
je NextTurn
mov cl, 6Eh
cmp cl, al
jne go
go:
jmp MouseLp
NextTurn:
mov ax, 0h
int 33h
mov ax, 1h
int 33h
MouseLpA:
mov ax, 3h
int 33h
cmp bx, 01h
jne MouseLpA
DrawA:
shr cx, 1
sub dx, 1
mov bh, 0h
mov al,[color2]
mov ah, 0Ch
int 10h
mov ax, 3h
int 33h
cmp bx, 01h
je DrawA
jmp MessagePrint2
exit:
mov ax, 4c00h
int 21h
END start
Ich denke, du solltest vielleicht [diese] (http://stackoverflow.com/help/how-to-ask) lesen und deine Frage ein wenig überarbeiten. – Wilt