Ensamblador - Ayuda con gato

   
Vista:

Ayuda con gato

Publicado por law (4 intervenciones) el 23/11/2008 21:12:09
hola!

me gustaria ver si me pueden ayudar, tengo que entregar un proyecto final decidi hacer el juego gato (tic tac toe) en lenguaje ensamblador. La vdd es que mi maestra no ha enseñado lo suficiente como para que yo lo pueda implementar por ello halle un codigo que tiene algunos errores me gustaria que me ayudaran a corregirlos por favor !!

Debo entregar este proyecto el 3 de diciembre

espero su respuesta

GRACIAS =)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con gato

Publicado por law (4 intervenciones) el 23/11/2008 21:19:52
Este es el codigo que hayé ojala me puedan ayudar a corregirlo!!!!

title Gato - Tic Tac Toe

.286


;------- Constantes -----------------------------------------------------------


CR equ 0Dh

LF equ 0Ah


DISPLAY equ 0001h

KEYBRD equ 0001h


;------- Segmento de Pila -----------------------------------------------------


sseg segment stack

db 32 dup("stack---")

sseg ends


;------- Segmento de Datos ----------------------------------------------------


dseg segment


banner db LF,CR,"Gato 1.1",LF,CR

db "author",LF,CR

db "Author2",CR,LF

b_len equ $-banner


linea db LF,CR

tablero db " 123456789"


barrahoriz db LF,CR," -----",LF,CR," "

bh_len equ $-barrahoriz

barravert db "|"


preg db "Jugador 2, elija una posicion: "

p_len equ $-preg


ganador db "El ganador es el jugador n",LF,CR

g_len equ $-ganador


empatemsg db "Empate",LF,CR

e_len equ $-empatemsg


casilla db 15 dup(?)

buf_len equ $-casilla


dseg ends


;------- Segmento de Codigo ---------------------------------------------------


HASTA AQUI PRIMERA PARTE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con gato

Publicado por law (4 intervenciones) el 23/11/2008 21:22:02
cseg segment 'code'

assume cs:cseg, ds:dseg, ss:sseg


;------------------------------------------------------------------------------

; main - Programa principal

;------------------------------------------------------------------------------


main proc


; inicializar el registro de segmento de datos

mov ax,dseg

mov ds,ax


; desplegar banner

mov bx,DISPLAY

mov cx,b_len

lea dx,banner

mov ah,40h

int 21h


continuar:

call desp_tablero

call preg_casilla

call checar_gano

cmp ax,0

je continuar


; despliega el ganador (resultado en AX)

call desp_ganador


; terminar el programa

mov ax,4C00h

int 21h


main endp


;------------------------------------------------------------------------------

; desp_tablero - despliega el tablero del gato

;------------------------------------------------------------------------------


desp_tablero proc


mov si,0


; primero desplegar el espacio inicial

mov bx,DISPLAY

mov cx,3

lea dx,linea

mov ah,40h

int 21h


desp_caracter: inc si

mov bx,DISPLAY

mov cx,1

mov dx,offset(tablero)

add dx,si

mov ah,40h

int 21h


cmp si,1

jg comp2

call desp_barravert

jmp desp_caracter


comp2: cmp si,2

jg comp3

call desp_barravert

jmp desp_caracter


comp3: cmp si,3

jg comp4

call desp_barrahoriz

jmp desp_caracter


comp4: cmp si,4

jg comp5

call desp_barravert

jmp desp_caracter


comp5: cmp si,5

jg comp6

call desp_barravert

jmp desp_caracter


comp6: cmp si,6

jg comp7

call desp_barrahoriz

jmp desp_caracter


comp7: cmp si,7

jg comp8

call desp_barravert

jmp desp_caracter


comp8: cmp si,8

jg comp_end

call desp_barravert

jmp desp_caracter


comp_end: mov bx,DISPLAY

mov cx,2

lea dx,barrahoriz

mov ah,40h

int 21h


mov bx,DISPLAY

mov cx,2

lea dx,barrahoriz

mov ah,40h

int 21h


ret

desp_tablero endp


;------------------------------------------------------------------------------

; desp_barrahoriz - despliega una barra horizontal hecha por cinco guiones

;------------------------------------------------------------------------------


desp_barrahoriz proc

mov bx,DISPLAY

mov cx,bh_len

lea dx,barrahoriz

mov ah,40h

int 21h

ret

desp_barrahoriz endp


ESTEO ES LA SEGUNDA PARTE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con gato

Publicado por law (4 intervenciones) el 23/11/2008 21:22:58
;------------------------------------------------------------------------------

; desp_barravert - despliega una barra vertical

;------------------------------------------------------------------------------


desp_barravert proc

mov bx,DISPLAY

mov cx,1

lea dx,barravert

mov ah,40h

int 21h

ret

desp_barravert endp


;------------------------------------------------------------------------------

; preg_casilla - pregunta una posicion al jugador

;------------------------------------------------------------------------------


preg_casilla proc


; poner el numero del siguiente jugador en el mensaje

mov al,byte ptr [preg+8]

cmp al,31h

je jug2

mov al,31h

mov byte ptr [preg+8],al

jmp desp_pregunta

jug2: mov al,32h

mov byte ptr [preg+8],al

jmp desp_pregunta


; desplegar mensaje con la pregunta

desp_pregunta: mov bx,DISPLAY

mov cx,p_len

lea dx,preg

mov ah,40h

int 21h


; preguntar posicion

mov bx,KEYBRD

mov cx,buf_len

lea dx,casilla

mov ah,3Fh

int 21h


; checar que la posicion dada por el jugador sea valida

xor ax,ax

mov al,byte ptr [casilla]


cmp al,31h

jl desp_pregunta

cmp al,39h

jg desp_pregunta


mov si,offset(tablero)

add si,ax

sub si,30h

mov bl,byte ptr [si]

cmp al,bl

jne desp_pregunta


; actualizar tablero

mov cl,byte ptr [preg+8]

cmp cl,31h

jne poner_O

mov dl,58h

jmp actualizar

poner_O: mov dl,4Fh




actualizar: mov byte ptr [si],dl

ret


preg_casilla endp


;------------------------------------------------------------------------------

; checar_gano - checa el tablero a ver si ya hay un ganador

;------------------------------------------------------------------------------


checar_gano proc


; primero checar cada una de las combinaciones ganadoras

mov dl,0

empezar_comp: inc dl

cmp dl,1

je comp21

cmp dl,2

je comp22

cmp dl,3

je comp23

cmp dl,4

je comp24

cmp dl,5

je comp25

cmp dl,6

je comp26

cmp dl,7

je comp27

cmp dl,8

je comp28

jmp checar_empate


comp21: mov al,byte ptr [tablero+1]

mov bl,byte ptr [tablero+2]

mov cl,byte ptr [tablero+3]

jmp comparar


comp22: mov al,byte ptr [tablero+4]

mov bl,byte ptr [tablero+5]

mov cl,byte ptr [tablero+6]

jmp comparar


comp23: mov al,byte ptr [tablero+7]

mov bl,byte ptr [tablero+8]

mov cl,byte ptr [tablero+9]

jmp comparar


comp24: mov al,byte ptr [tablero+1]

mov bl,byte ptr [tablero+4]

mov cl,byte ptr [tablero+7]

jmp comparar


comp25: mov al,byte ptr [tablero+2]

mov bl,byte ptr [tablero+5]

mov cl,byte ptr [tablero+8]

jmp comparar


comp26: mov al,byte ptr [tablero+3]

mov bl,byte ptr [tablero+6]

mov cl,byte ptr [tablero+9]

jmp comparar


comp27: mov al,byte ptr [tablero+1]

mov bl,byte ptr [tablero+5]

mov cl,byte ptr [tablero+9]

jmp comparar


comp28: mov al,byte ptr [tablero+3]

mov bl,byte ptr [tablero+5]

mov cl,byte ptr [tablero+7]

jmp comparar


; comparar las tres posicion

comparar: cmp al,bl

je comp_3

jmp linea_dif

comp_3: cmp al,cl

jne linea_dif

linea_igual: cmp al,58h

je gano1

jmp gano2

linea_dif: jmp empezar_comp


; checar si el tablero esta lleno

checar_empate: mov cx,9

ver_usada: mov si,offset(tablero)

add si,cx

mov bx,cx

add bx,30h

xor dx,dx

mov dl,byte ptr [si]

cmp dx,bx

je continuar

loop ver_usada

jmp hayempate


; el juego puede continuar

continuar: mov ax,0

ret


; gana el jugador 1

gano1: mov ax,1

ret


; gana el jugador 2

gano2: mov ax,2

ret


; empate

hayempate: mov ax,3

ret


checar_gano endp


;------------------------------------------------------------------------------

; desp_ganador - despliega un mensaje diciendo quien es el ganador

;------------------------------------------------------------------------------


desp_ganador proc

; primero borrar todos los numeros del tablero, dejar X y O

mov cx,9

ver_usada: mov si,offset(tablero)

add si,cx

mov bx,cx

add bx,30h

xor dx,dx

mov dl,byte ptr [si]

cmp dx,bx

je borrar

jmp seguir

borrar: mov byte ptr [si],20h

seguir: loop ver_usada


; desplegar el tablero

push ax

call desp_tablero

pop ax


cmp ax,3

je empate


add ax,30h

mov byte ptr [ganador+25],al


mov cx,g_len

lea dx,ganador

jmp desplegar


empate: mov cx,e_len

lea dx,empatemsg


desplegar: mov bx,DISPLAY

mov ah,40h

int 21h

ret

desp_ganador endp


cseg ends


;------- Fin del programa -----------------------------------------------------


end main

TERCERA PARTE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con gato

Publicado por pepe (1 intervención) el 02/05/2012 05:21:16
man conseguistes arreglar ese codigo ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con gato

Publicado por Carlos Juárez (1 intervención) el 26/06/2015 21:49:03
¿Terminaste tu proyecto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar