1. Trang chủ
  2. » Giáo Dục - Đào Tạo

KIẾN TRÚC MÁY TÍNH BÁO CÁO BÀI TẬP LỚN CHỦ đề xây dựng mô phỏng trên phần mềm emu8086 TRÒ CHƠI TIK TAE TOK

21 25 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 407,7 KB

Nội dung

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG - - KIẾN TRÚC MÁY TÍNH BÁO CÁO BÀI TẬP LỚN        CHỦ ĐỀ Xây dựng mô phần mềm emu8086 TRÒ CHƠI TIK TAE TOK Giảng viên   : VŨ HỒI NAM           Nhóm :     Nhóm mơn học: 05    Sinh viên    : Hồ Văn Thành Minh-B19DCDT142 Nguyễn Thị Trang-B20DCAT188 Nguyễn Viết Nam-B20DCAT128 Đỗ Minh Ngọc-B20DCAT132 Đỗ Thị Lâm Oanh-B20DCAT136 LỜI CẢM ƠN Lời chúng em xin chân thành cảm ơn thầy thầy tạo điều kiện thuận lợi cho chúng em hoàn thành tập lớn mơn học Kiến trúc máy tính Chúng em với kiến thức hạn chế nên tránh khỏi nhiều sai sót với mong muốn học hỏi, chúng em mong nhận góp ý hướng dẫn thêm thầy để chúng em rút kinh nghiệm cho tập tốt Chúng em xin chân thành cảm ơn! I - QUÁ TRÌNH THỰC HIỆN Lựa chọn đề tài: Trị chơi Tik Tae Tok( tên gọi khác Cờ Caro) Tìm hiểu kiến thức internet cách thức làm việc, thảo luận Code nạp code cho thiết bị Chạy demo sản phẩm Trình bày báo cáo sản phẩm trước lớp II CÔNG VIỆC CỦA TỪNG THÀNH VIÊN Hồ Văn Thành Minh: - Chạy demo sản phẩm - Thuyết trình Nguyễn Viết Nam - Lên kế hoạch cho tập lớn - Tìm phân tích code - Tìm nguồn tài liệu  Đỗ Minh Ngọc, Đỗ Thị Lâm Oanh - Tìm phân tích code - Tìm tài liệu Nguyễn Thị Trang - Tìm tài liệu - Làm báo cáo III CÁCH HOẠT ĐỘNG 1.Ý tưởng Tạo trò chơi đơn giản, quen thuộc, dễ hiểu mà người chơi với 2.Luật chơi: Khi bắt đầu, hai người chơi phải định quân cờ X hay O lựa chọn người đánh trước, người đánh sau.Tiếp đến, người chơi thứ đánh quân cờ lên giấy, cách dùng bút để đánh X O Tờ giấy cần có kẻ phân chia trống Sau đó, lượt người thứ hai Lượt tương tự người thứ nhất, người đầu chọn X người thứ hai chọn O ngược lại Người chơi đánh tuyệt đối không phép đánh dấu vào đánh ký hiệu vi phạm luật chơi không phép Người thắng cuối người có liên tiếp quân ngang, quân quân dọc quân chéo mà không bị đối thủ chặn Vì trị chơi có để nên vậy, hết mà khơng có người chiến thắng hai người chơi hòa lại ván 3.Code data segment           new_line db 13, 10, "$"         game_draw db "_|_|_", 13, 10               db "_|_|_", 13, 10               db "_|_|_", 13, 10, "$"                           game_pointer db DUP(?)           win_flag db     player db "0$"         game_over_message db "Chuc mung ban da gianh chien thang!", 13, 10, "$"         game_start_message db "ChaoMungCacBanDenVoiTroChoiCuaNhom3ChungToi", 13, 10, "$"     player_message db "PLAYER $"       win_message db " WIN!$"       type_message db "TYPE A POSITION: $" ends stack segment     dw   128  dup(?) ends         extra segment     ends code segment start:     ; khoi tao ds     mov     ax, data     mov     ds, ax     mov     ax, extra     mov     es, ax     ; bat dau game       call    set_game_pointer                 main_loop:                                                                                                                                                                                   call    clear_screen   lea     dx, game_start_message call    print lea     dx, new_line call    print                       lea     dx, player_message call    print lea     dx, player call    print   lea     dx, new_line call    print     lea     dx, game_draw call    print     lea     dx, new_line call    print     lea     dx, type_message     call    print                                 ; doc vi tri                   call    read_keyboard                     ; tinh toan vi tri                   sub     al, 49               mov     bh, mov     bl, al                                                                 call    update_draw                                                                                           call    check                       ; kiem tra xem tro choi ket thuc chua                   cmp     win_flag,   je      game_over   call    change_player         jmp     main_loop   change_player:       lea     si, player         xor     ds:[si],         ret         update_draw:     mov     bl, game_pointer[bx]     mov     bh,         lea     si, player         cmp     ds:[si], "0"     je      draw_x                           cmp     ds:[si], "1"     je      draw_o                                     draw_x:     mov     cl, "x"     jmp     update     draw_o:               mov     cl, "o"       jmp     update                   update:             mov     ds:[bx], cl           ret                 check:     call    check_line     ret                     check_line:     mov     cx,         check_line_loop:         cmp     cx,     je      first_line                                                     cmp     cx, je      second_line                             second_line:     mov     si, jmp     do_check_line                                                   do_check_line:   inc     cx                                           cmp     cx, je      third_line   call    check_column ret         first_line:     mov     si,   jmp     do_check_line   third_line:     mov     si, jmp     do_check_line         mov     bh, mov     bl, game_pointer[si] mov     al, ds:[bx] cmp     al, "_" je      check_line_loop inc mov cmp jne   inc mov cmp jne         mov ret                         si bl, game_pointer[si]     al, ds:[bx] check_line_loop                                 si bl, game_pointer[si]   al, ds:[bx] check_line_loop                     win_flag,             check_column:     mov     cx,         check_column_loop:         cmp     cx,     je      first_column         cmp     cx,     je      second_column         cmp     cx,     je      third_column           call    check_diagonal     ret                 first_column:         mov     si,       jmp     do_check_column                                                                 do_check_column:   inc     cx                           second_column:     mov     si, jmp     do_check_column third_column:     mov     si, jmp     do_check_column         mov     bh, mov     bl, game_pointer[si] mov     al, ds:[bx] cmp     al, "_" je      check_column_loop add mov cmp jne   add mov                 si, bl, game_pointer[si]     al, ds:[bx] check_column_loop     si,     bl, game_pointer[si]                           cmp jne         mov ret                         al, ds:[bx] check_column_loop                     win_flag,     check_diagonal:     mov     cx,         check_diagonal_loop:         cmp     cx,     je      first_diagonal         cmp     cx,     je      second_diagonal                                 ret                 first_diagonal:         mov     si,                     mov     dx,     jmp     do_check_diagonal                                                     do_check_diagonal:   inc     cx                           second_diagonal:     mov     si, mov     dx, jmp     do_check_diagonal       mov     bh, mov     bl, game_pointer[si] mov     al, ds:[bx] cmp     al, "_" je      check_diagonal_loop add mov cmp jne   add mov                 si, dx bl, game_pointer[si]     al, ds:[bx] check_diagonal_loop     si, dx     bl, game_pointer[si]                               cmp jne         mov ret                             al, ds:[bx] check_diagonal_loop                     win_flag,   game_over:             call    clear_screen           lea     dx, game_start_message     call    print         lea     dx, new_line     call    print                                   lea     dx, game_draw     call    print             lea     dx, new_line     call    print                                             lea     dx, game_over_message call    print   lea     dx, player_message call    print lea     dx, player call    print lea     dx, win_message call    print     jmp     fim             set_game_pointer:     lea     si, game_draw     lea     bx, game_pointer                             mov     cx,           loop_1:     cmp     cx,     je      add_1                         cmp     cx,     je      add_1         jmp     add_2         add_1:     add     si,     jmp     add_2               add_2:                                     mov     ds:[bx], si     add     si,                             inc     bx                   loop    loop_1       ret                     print:      ; in noi dung dx       mov     ah,     int     21h           ret     clear_screen:           mov     ah, 0fh     int     10h           mov     ah,     int     10h         ret             read_keyboard:  ; doc keybord tra ve noi dung ah     mov     ah,           int     21h           ret                   fim:     jmp     fim               code ends end start 3.Giải thích mã nguồn: data segment           new_line db 13, 10, "$"         game_draw db "_|_|_", 13, 10               db "_|_|_", 13, 10               db "_|_|_", 13, 10, "$"                           game_pointer db DUP(?)           win_flag db     player db "0$"         game_over_message db "Chuc mung ban da gianh chien thang!", 13, 10, "$"         game_start_message db "ChaoMungCacBanDenVoiTroChoiCuaNhom3ChungToi", 13, 10, "$"     player_message db "PLAYER $"       win_message db " WIN!$"       type_message db "TYPE A POSITION: $" ends stack segment     dw   128  dup(?) ends         -Dữ liệu chương trình(data) main_loop:       call    clear_screen ; gọi hàm clear_screen          lea     dx, game_start_message ; trỏ đến game_start_message     call    print; gọi đến hàm print để in         lea     dx, new_line; trỏ đến new_line     call    print                               lea     dx, player_message;trỏ đến player_message     call    print     lea     dx, player;trỏ đến player     call    print           lea     dx, new_line; trỏ đến new_line     call    print             lea     dx, game_draw; trỏ đến game_draw     call    print             lea     dx, new_line; trỏ đến new_line     call    print             lea     dx, type_message; trỏ đến type_message         call    print             -Trỏ đến liệu data để in ;   ;             doc vi tri                     call    read_keyboard tinh toan vi tri                     sub     al, 49 ; al=al-49                mov     bh, 0; gán cho bh=0   mov     bl, al; bl=al                                                                     call    update_draw ; gọi hàm update_draw   call    check; gọi hàm check  -Đọc vị trí Tính tốn ;           kiem tra xem tro choi ket thuc chua                     cmp     win_flag, 1; so sánh win_flag với     je      game_over; win_flag=1       call    change_player; gọi hàm change_player               jmp     main_loop  -Kiểm tra xem trò chơi kết thúc chưa change_player:       lea     si, player         xor     ds:[si],         ret -Hoán đổi người chơi(Player 0, Player 1) update_draw:     mov     bl, game_pointer[bx]     mov     bh,         lea     si, player; trỏ đến player         cmp     ds:[si], "0";so sánh nội dung địa si với “0”     je      draw_x   ; nội dung địa si=”0” thi nhảy đến draw_x                        cmp     ds:[si], "1";so sánh nội dung địa si với”1”     je      draw_o ;nếu nội dung địa si=”1” nhảy đến draw_o                                    draw_x:     mov     cl, "x"; gán cl=”X”     jmp     update                             draw_o: mov     jmp           update: mov     ret           cl, "o" ; gán cl=”o”  update             ds:[bx], cl -Cập nhật vẽ bắt đầu khởi tạo”X” “O” vào bảng check_line:     mov     cx,         check_line_loop:         cmp     cx, 0; so sánh cx với     je      first_line; nhảy đến first_line         cmp     cx, 1; so sanh cx với                                             je      second_line; nhảy đến second_line                             second_line:     mov     si, 3;gán si=3 jmp     do_check_line                                               do_check_line:   inc     cx                                       cmp     cx, 2; so sánh cx với je      third_line ; nhảy đến first_line call    check_column ret        first_line:     mov     si, 0; gán si=0  jmp     do_check_line   third_line:     mov     si, 6; gán si=6 jmp     do_check_line         mov     bh, mov     bl, game_pointer[si] mov     al, ds:[bx] cmp     al, "_" je      check_line_loop inc mov cmp jne   inc mov cmp jne         mov ret                 si bl, game_pointer[si]     al, ds:[bx] check_line_loop                                 si bl, game_pointer[si]   al, ds:[bx] check_line_loop                     win_flag,     -Kiểm tra dòng(check line) check_column:                                                                         mov     cx, 0; gán cx=0                             second_column:     mov     si, 1; gán si=1 jmp     do_check_column                                       do_check_column:   inc     cx                               check_column_loop:     cmp     cx, 0; so sánh cx với je      first_column; nhảy đến first_line cmp     cx, je      second_column; cx=1 nhảy đến second_line cmp     cx, je      third_column ; cx=2 nhảy đến third_column  call    check_diagonal ret         first_column:     mov     si, 0; gán si=0 jmp     do_check_column   third_column:     mov     si, 2; gán si=2 jmp     do_check_column         mov     bh, 0;gán bh=0 mov     bl, game_pointer[si]; gán cho bl giá trị địa si game_pointer mov     al, ds:[bx]; al=nội dung địa bx cmp     al, "_"; so sanh al với “_” je      check_column_loop add mov cmp jne   add mov cmp jne                 si, 3;si=si+3 bl, game_pointer[si]; gán bl=địa si game_pointer[si]     al, ds:[bx];so sánh al với địa bx check_column_loop                 si, bl, game_pointer[si]   al, ds:[bx] check_column_loop                         mov ret -Kiểm                                     win_flag,     tra vòng lặp cột( cột ngang, cột dọc) check_diagonal:     mov     cx,         check_diagonal_loop:         cmp     cx,     je      first_diagonal         cmp     cx,     je      second_diagonal                                 ret                 first_diagonal:         mov     si, ; gán si=0                    mov     dx, ; gán dx=4     jmp     do_check_diagonal                                                   do_check_diagonal:   inc     cx                         second_diagonal:     mov     si, 2;si=2 mov     dx, 2;dx=2 jmp     do_check_diagonal       mov     bh, 0;bh=0 mov     bl, game_pointer[si] mov     al, ds:[bx] cmp     al, "_" je      check_diagonal_loop add mov cmp jne   add                 si, dx; si=si+dx bl, game_pointer[si] ;bl=địa si game_pointer    al, ds:[bx]; al=nội dung địa bx check_diagonal_loop     si, dx                             mov cmp jne         mov ret                           bl, game_pointer[si]   al, ds:[bx] check_diagonal_loop                     win_flag, -Kiểm tra đường chéo game_over:             call    clear_screen           lea     dx, game_start_message; trỏ đến game_start_message     call    print; gọi hàm print         lea     dx, new_line     call    print                                   lea     dx, game_draw     call    print             lea     dx, new_line     call    print                                             lea     dx, game_over_message call    print   lea     dx, player_message call    print lea     dx, player call    print lea     dx, win_message call    print     jmp     fim       -Kết thúc trò chơi print:      ; in noi dung dx       mov     ah,     int     21h           ret -In nội dung dùng hàm mov ah,9 int 21h - 4.Demo _Nếu Player dấu “X” hang dọc, hang ngang, đường chéo chiến thắng trị chơi _Nếu Player dấu “O” hang dọc, hàng ngang, đường chéo chiến thắng trị chơi ... cho tập tốt Chúng em xin chân thành cảm ơn! I - Q TRÌNH THỰC HIỆN Lựa chọn đề tài: Trị chơi Tik Tae Tok( tên gọi khác Cờ Caro) Tìm hiểu kiến thức internet cách thức làm việc, thảo luận Code nạp

Ngày đăng: 03/12/2021, 06:57

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w