include "emu8086.inc"
;******Some defs******
prnt_msg equ 09h
cr equ 0dh
nl equ 0ah
_in equ 01h
_out equ 02h
;*********************
;******Data Segement******
data segment
nim_desc db 'THE GAME OF NIM'
db cr, nl, nl, '$'
pilesAsk db 'how many piles? (no more than 5)'
db cr, nl, '$'
wrong db cr, nl
db 'your input is wrong'
db cr, nl, '$'
sticks db cr, nl
db , 'how many sticks in ', '$'
sticks2 db ' pile? (no more than 9)'
db cr, nl, '$'
piles dw ?
pile1 db 5 dup ?
shape db '| ', '$'
new db cr, nl, '$'
ends
;*************************
;******Stack Segment******
stack segment
dw 128 dup(?)
ends
;*************************
;******Code Segemnt*******
code segment
start:
;set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;======================
;set video mode
; mov ax, 02h
; int 10h
;======================
;print description
lea dx, nim_desc
call print_msg
;======================
;ask for the number of piles
lea dx, pilesAsk
call print_msg
;===========================
;get them
jmp get_pile
wrong_pile:
lea dx, wrong
call print_msg
get_pile:
call get_ch
sub al, 30h
cmp al, 5
jg wrong_pile
mov b. piles, al
mov cl, '1'
mov si, 0
mov bx, 0
INPUT:
;asking how many sticks each pile contains:
lea dx, sticks
call print_msg
mov dl, cl
call print_ch
mov dx, offset sticks2
call print_msg
inc cl
;==========================
xor al, al
call get_ch
sub al, 30h
mov pile1[si], al
inc bx
cmp bx, piles
jb INPUT
call print_pile
jmp exit
print_pile proc
pusha
mov si, 0
mov cx, piles
xor bl, bl
pile_loop:
lea dx, shape
mov bl, pile1[si]
print_loop:
call print_msg
dec bl
cmp bl, 0
jnz print_loop
lea dx, new
call print_msg
inc si
dec cx
cmp cx, 0
jnz pile_loop
popa
ret
print_pile endp
get_cursor proc
mov ah, 03h
int 10h
ret
get_cursor endp
print_msg proc
pusha
mov ah, prnt_msg
int 21h
popa
ret
print_msg endp
print_ch proc
pusha
mov ah, _out
int 21h
popa
ret
print_ch endp
get_ch proc
mov ah, _in
int 21h
ret
get_ch endp
play_again proc
;to be written
play_again endp
ends
exit:
mov ax, 4c00h
int 21h
end start
aW5jbHVkZSAiZW11ODA4Ni5pbmMiCjsqKioqKipTb21lIGRlZnMqKioqKioKcHJudF9tc2cgZXF1IDA5aApjciBlcXUgMGRoCm5sIGVxdSAwYWgKX2luIGVxdSAwMWgKX291dCBlcXUgMDJoCjsqKioqKioqKioqKioqKioqKioqKioKCgo7KioqKioqRGF0YSBTZWdlbWVudCoqKioqKgpkYXRhIHNlZ21lbnQgIAogICAgbmltX2Rlc2MgZGIgJ1RIRSBHQU1FIE9GIE5JTScKICAgIGRiIGNyLCBubCwgbmwsICckJwogICAgCiAgICBwaWxlc0FzayBkYiAnaG93IG1hbnkgcGlsZXM/IChubyBtb3JlIHRoYW4gNSknCiAgICBkYiBjciwgbmwsICckJwogICAgCiAgICB3cm9uZyBkYiBjciwgbmwKICAgIGRiICd5b3VyIGlucHV0IGlzIHdyb25nJwogICAgZGIgY3IsIG5sLCAnJCcKICAgIAogICAgc3RpY2tzIGRiIGNyLCBubAogICAgZGIgLCAnaG93IG1hbnkgc3RpY2tzIGluICcsICckJwogICAgc3RpY2tzMiBkYiAnIHBpbGU/IChubyBtb3JlIHRoYW4gOSknCiAgICBkYiBjciwgbmwsICckJyAKICAgCiAgICBwaWxlcyBkdyA/CiAgICBwaWxlMSBkYiA1IGR1cCA/CiAgICAKICAgIHNoYXBlIGRiICd8ICcsICckJwogICAgbmV3IGRiIGNyLCBubCwgJyQnCgplbmRzCjsqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgIAogICAgICAgICAgICAKOyoqKioqKlN0YWNrIFNlZ21lbnQqKioqKioKc3RhY2sgc2VnbWVudAogICAgZHcgICAxMjggIGR1cCg/KQplbmRzCjsqKioqKioqKioqKioqKioqKioqKioqKioqIAogICAgICAgICAgICAgIAogICAgICAgICAgICAgIAo7KioqKioqQ29kZSBTZWdlbW50KioqKioqKiAgICAgIApjb2RlIHNlZ21lbnQKICAgICAgICAgICAKc3RhcnQ6CjtzZXQgc2VnbWVudCByZWdpc3RlcnM6CiAgICBtb3YgYXgsIGRhdGEKICAgIG1vdiBkcywgYXgKICAgIG1vdiBlcywgYXgKOz09PT09PT09PT09PT09PT09PT09PT0KCjtzZXQgdmlkZW8gbW9kZQo7ICAgIG1vdiBheCwgMDJoCjsgICAgaW50IDEwaAo7PT09PT09PT09PT09PT09PT09PT09PQogCjtwcmludCBkZXNjcmlwdGlvbgogICAgbGVhIGR4LCBuaW1fZGVzYwogICAgY2FsbCBwcmludF9tc2cKOz09PT09PT09PT09PT09PT09PT09PT0KICAgIAo7YXNrIGZvciB0aGUgbnVtYmVyIG9mIHBpbGVzCiAgICBsZWEgZHgsIHBpbGVzQXNrCiAgICBjYWxsIHByaW50X21zZyAKOz09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIAo7Z2V0IHRoZW0KICAgIGptcCBnZXRfcGlsZQogICAgd3JvbmdfcGlsZToKICAgIGxlYSBkeCwgd3JvbmcKICAgIGNhbGwgcHJpbnRfbXNnCiAgICAKICAgIGdldF9waWxlOgogICAgY2FsbCBnZXRfY2gKICAgIHN1YiBhbCwgMzBoCiAgICBjbXAgYWwsIDUKICAgIGpnIHdyb25nX3BpbGUgCiAgICBtb3YgYi4gcGlsZXMsIGFsIAogICAgCiAgICAKICAgIG1vdiBjbCwgJzEnCiAgICBtb3Ygc2ksIDAKICAgIG1vdiBieCwgMAogICAgCklOUFVUOgoKO2Fza2luZyBob3cgbWFueSBzdGlja3MgZWFjaCBwaWxlIGNvbnRhaW5zOgogICAgbGVhIGR4LCBzdGlja3MKICAgIGNhbGwgcHJpbnRfbXNnCiAgICAKICAgIG1vdiBkbCwgY2wKICAgIGNhbGwgcHJpbnRfY2gKICAgIAogICAgbW92IGR4LCBvZmZzZXQgc3RpY2tzMgogICAgY2FsbCBwcmludF9tc2cKICAgIGluYyBjbAo7PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIAogICAgeG9yIGFsLCBhbAogICAgY2FsbCBnZXRfY2ggICAKCiAgICBzdWIgYWwsIDMwaAogICAgbW92IHBpbGUxW3NpXSwgYWwKICAgIGluYyBieAogICAgY21wIGJ4LCBwaWxlcyAKICAgIGpiIElOUFVUCiAgIAogICAgCiAgICBjYWxsIHByaW50X3BpbGUKIAogICAgIAogICAgam1wIGV4aXQgCgoKcHJpbnRfcGlsZSAgcHJvYwogICAgcHVzaGEgCiAgICBtb3Ygc2ksIDAKICAgIG1vdiBjeCwgcGlsZXMKICAgIHhvciBibCwgYmwKICAgIAogICAgcGlsZV9sb29wOgogICAgbGVhIGR4LCBzaGFwZQogICAgbW92IGJsLCBwaWxlMVtzaV0KICAgICAgICAKICAgICAgICBwcmludF9sb29wOgogICAgICAgIGNhbGwgcHJpbnRfbXNnCiAgICAgICAgZGVjIGJsCiAgICAgICAgY21wIGJsLCAwCiAgICAgICAgam56IHByaW50X2xvb3AKICAgIAogICAgbGVhIGR4LCBuZXcKICAgIGNhbGwgcHJpbnRfbXNnICAgICAKICAgIGluYyBzaSAgICAKICAgIGRlYyBjeAogICAgY21wIGN4LCAwCiAgICBqbnogcGlsZV9sb29wCiAgICAKICAgIHBvcGEKICAgIHJldApwcmludF9waWxlIGVuZHAKCgpnZXRfY3Vyc29yIHByb2MKICAgIG1vdiBhaCwgMDNoCiAgICBpbnQgMTBoCiAgICByZXQKZ2V0X2N1cnNvciBlbmRwCgpwcmludF9tc2cgcHJvYwogICAgcHVzaGEKICAgIG1vdiBhaCwgcHJudF9tc2cKICAgIGludCAyMWgKICAgIHBvcGEKICAgIHJldApwcmludF9tc2cgZW5kcAoKCnByaW50X2NoIHByb2MKICAgIHB1c2hhCiAgICBtb3YgYWgsIF9vdXQKICAgIGludCAyMWgKICAgIHBvcGEKICAgIHJldApwcmludF9jaCBlbmRwCiAgICAgICAgIAogICAgICAgICAKZ2V0X2NoIHByb2MKICAgIG1vdiBhaCwgX2luCiAgICBpbnQgMjFoCiAgICByZXQKZ2V0X2NoIGVuZHAgICAgICAgIAoKICAgICAgICAKcGxheV9hZ2FpbiBwcm9jCiAgICA7dG8gYmUgd3JpdHRlbgpwbGF5X2FnYWluIGVuZHAgICAgCmVuZHMKCmV4aXQ6CiAgICBtb3YgYXgsIDRjMDBoCiAgICBpbnQgMjFoCgplbmQgc3RhcnQK