Bài tập lập trình Assembly

Trong lập trình máy tính, Hợp ngữ (hay assembly) thường được viết tắt là asm là bất kỳ ngôn ngữ lập trình cấp thấp nào có sự tương ứng rất mạnh giữa các tập lệnh trong ngôn ngữ và tập lệnh mã máy của kiến trúc. Bởi vì hợp ngữ phụ thuộc vào tập lệnh mã máy, mỗi trình biên dịch có hợp ngữ riêng được thiết kế cho chính xác một kiến trúc máy tính cụ thể. Hợp ngữ cũng có thể được gọi là mã máy tượng trưng (symbolic machine code).

  1. Download phần mềm Emu8066 tại đây. Vui lòng cung cấp địa chỉ email cho giảng viên để có thể truy cập vào tài nguyên khóa học. 
    Thông tin hỗ trợ học viên 24/24 chỉ được cung cấp trong khóa học. Vui lòng đăng ký khóa học để nhận được những thông tin khóa học công nghệ tốt nhất giúp bạn làm được việc trong thực tế
  2. Cài đặt Emu8066 trên Windows, Mac, Linux.
  3. Viết chương trình hiện ra câu “Hello Assembly”
  4. Viết chương trình hiện ra hai câu “Chao mung ban den voi Assembly” “Assembly that de!”. Mỗi câu trên một dòng.
  5. Viết chương trình yêu cầu nhập một ký tự và xuất ra màn hình ký tự vừa nhập
  6. Viết chương nhập vào một ký tự. Chuyển ký tự đó sang ký tự hoa
  7. Chuyển đổi ký tự hoa thành ký tự thường
  8. Viết chương trình nhập vào một chuỗi. In ra màn hình chuỗi thường, chuỗi in. Dùng chương con.
  9. Viết chương trình nhập vào một chuỗi. Đếm chiều dài của chuỗi nhập vào.
  10. Lập chương trình nhập vào 2 số kiểu byte,in ra màn hình tích 2 số vừa nhập
  11. Lập chương trình nhập vào 2 số kiểu word,in ra màn hình tổng 2 số vừa nhập
  12. Cho một mảng M gồm 20 phần tử kiểu Word giá trị tuỳ ý(không phải nhập giá trị các phần tử).Tính tổng giá trị các phần tử có giá trị chia hết cho 7
  13. Lập chương trình nhập vào 1 số kiêu word in ra màn hình mã nhị phân tương ứng của số đó
  14. Lập chương trình nhập vào 1 số kiêu word in ra màn hình mã Hexa tương ứng của số đó
  15. Nhập vào 1 mảng 15 phần tử kiểu word in ra màn hình mã Hexa tương ứng của số đó.
  16. Tính tổng 2 số:
  17. Nhập kí tự cho ra số Hexa tương ứng
  18. Kiểm tra tính chẵn lẻ của chữ số
  19. Kiểm tra số nguyên tố
  20. Tính tổng các phần tử lẻ
  21. Kiểm tra số hoàn thiện
  22. Tính tích 2 số
  23. Tính số Fibonacy thứ n
  24. Tìm Min-Max của mảng
  25. Sắp xếp các p tử tăng dần
  26. Nhập xâu kí tự chuyển chữ hoa sang xâu khác và in
  27. Nhập xâu kí tự chuyển chữ thường sang xâu khác và in
  28. Nhập họ tên và tách tên
  29. Kiểm tra tính đối xứng của xâu
  30. Đếm từ trong xâu
  31. Kiểm tra chữ hoa
  32. Nhập 1 xâu ký tự. Xâu đó có đối xứng không?
  33. Nhập 1 xâu ký tự tuỳ ý. Xâu đó có bao nhiêu từ?
  34. Xoá màn hình, đặt con trỏ vào giữa màn hình, ấn Insert để thay đổi kích thước con trỏ, ấn ESC để thoát.
  35. Sử dụng các phím mũi tên để di chuyển con trỏ. Ấn ESC thì thoát. 
  36. Nhập vào một dòng văn bản, ấn Home: Về đầu dòng, ấn END: Về cuối dòng, ấn ESC thì thoát.
  37. Sử dụng chức năng cuốn cửa sổ để tạo 8 dải màu nền phủ đầy màn hình, mỗi dải được tô bằng 1 màu cơ bản.
  38. Nhập một ký tự từ bàn phím, hãy in đầy ký tự đó ra màn hình với màu sắc tự chọn bằng phương pháp truy nhập bộ nhớ màn hình ở chế độ văn bản.
  39. Hãy vẽ một đường thẳng đứng độ dài 50 Pixel chạy qua chạy lại ngang màn hình, thoát khỏi khi ấn một phím bất kỳ thuộc nhóm phím trạng thái.
  40. Hãy vẽ bảng màu gồm 256 hình chữ nhật, mỗi hình chữ nhật được tô bởi 1 màu cơ bản từ màu 0 đến màu 255 trong chế độ 256 màu chuẩn.
  41. Đây là code hợp ngữ được tạo ra bằng cách biên dịch chương trình C.
        .globl  f
        .align  16, 0x90
        .type   f,@function
f:
        movl    $1, %r8d
        jmp     .LBB0_1
.LBB0_6:
        incl    %r8d
.LBB0_1:
        movl    %r8d, %ecx
        imull   %ecx, %ecx
        movl    $1, %edx
.LBB0_2:
        movl    %edx, %edi
        imull   %edi, %edi
        movl    $1, %esi
        .align  16, 0x90
.LBB0_3:
        movl    %esi, %eax
        imull   %eax, %eax
        addl    %edi, %eax
        cmpl    %ecx, %eax
        je      .LBB0_7
        cmpl    %edx, %esi
        leal    1(%rsi), %eax
        movl    %eax, %esi
        jl      .LBB0_3
        cmpl    %r8d, %edx
        leal    1(%rdx), %eax
        movl    %eax, %edx
        jl      .LBB0_2
        jmp     .LBB0_6
.LBB0_7:
        pushq   %rax
.Ltmp0:
        movl    $.L.str, %edi
        xorl    %eax, %eax
        callq   printf
        movl    $1, %eax
        popq    %rcx
        retq

        .type   .L.str,@object
.L.str:
        .asciz  "%d %d\n"
        .size   .L.str, 7
  • Hàm trên có bao nhiêu đối số?
  • Hàm trên trả về cái gì?