Đặt vấn đề: Đánh giá tình trạng tủy xương đóng vai trò quan trọng trong phân chia giai đoạn u lympho, giúp tiên lượng cũng như lựa chọn phương pháp điều trị. Mục tiêu: Khảo sát tỉ lệ và đặc điểm mô học tủy xương các trường hợp u lympho tế bào B xâm nhập tủy xương. Đối tượng và phương pháp: Nghiên cứu mô tả cắt ngang các trường hợp u lympho tế bào B tại Bệnh viện Truyền máu Huyết học từ tháng 01/2019 đến tháng 12/2020. Kết quả: Tỉ lệ u lympho tế bào B xâm nhập tủy xương là 64,8%. 40% trường hợp u lympho tế bào B độ ác cao và 80% trường hợp u lympho tế bào B độ ác thấp xâm nhập tủy xương. LPL và BL có tỉ lệ xâm nhập tủy xương cao nhất (100%), thấp nhất là DLBCL (25,6%). Hình thái xâm nhập thường gặp nhất là dạng lan tỏa (53%), tiếp theo là dạng hỗn hợp (31%). Dạng cạnh bè xương ghi nhận trong 50% FL và 10% DLBCL (FL chuyển dạng DLBCL). Dạng trong mạch máu trong xoang 0%. 72,2% MZL xâm nhập kiểu hỗn hợp. Kết luận: U lympho tế bào B độ ác thấp có tỉ lệ xâm nhập tủy xương cao hơn u lymph... Show
Việc khảo sát, đánh giá về kiểu hình cũng như kiểu gen là cần thiết nhằm làm tăng hiệu quả cho quá trình nhận dạng, phát triển và chọn tạo giống mới đối với cây trồng. Nguồn gen thuộc một số dòng bơ đã qua chọn lọc để canh tác được thu thập từ một số nơi trong địa bàn tỉnh Lâm Đồng để phân tích đa dạng di truyền và nhận dạng giống. Đặc điểm sơ bộ về hình thái quả và năng suất của 11 dòng bơ tiềm năng đã được ghi nhận để hỗ trợ cho cơ sở dữ liệu nhận dạng dòng. Với đặc trưng nhận dạng DNA thu nhận được với 10 mồi ISSR, chúng tôi thu được tổng số 125 band điện di trên gel để tiến hành phân tích đa dạng di truyền tập hợp 11 mẫu khảo sát đại diện cho 11 dòng trên, kết quả cho thấy: tập hợp mẫu có mức dị hợp trông đợi (chỉ số đa dạng gene) đạt He = h = 0,3072, chỉ số Shannon đạt: I = 0,4608, tỷ lệ band đa hình: PPB = 91,84%. Cũng sử dụng 10 mồi ISSR như trên, từ đặc trưng nhận dạng DNA của 18 mẫu đại diện cho 6 dòng bơ tiềm năng (mỗi dòng 3 mẫu), dựa trên sự xuất hiện hay thiếu vắng các ... Tóm tắt: Nghiên cứu này đánh giá thực trạng hợp tác, liên kết của nông hộ trong sản xuất và tiêu thụ lúa hữu cơ tại xã Thủy Phù, thị xã Hương Thủy, Thừa Thiên Huế. Số liệu sơ cấp được thu thập thông qua khảo sát 60 hộ sản xuất lúa hữu cơ bằng bảng hỏi bán cấu trúc. Kết quả nghiên cứu cho thấy rằng khoảng 80% lúa hữu cơ được tiêu thụ thông qua hợp đồng, tỉ lệ hộ thực hiện theo hợp đồng chiếm tỉ lệ 98%. Liên kết giữa nông hộ sản xuất lúa hữu cơ là liên kết miệng, chưa chặt chẽ; liên kết này thực hiện chủ yếu thông qua trao đổi thông tin về kỹ thuật sản xuất; việc trao đổi thông tin về đầu vào và đầu ra chưa được nông hộ quan tâm. Liên kết giữa hộ với doanh nghiệp được thực hiện qua qua hợp đồng và khá chặt chẽ. Ngoại trừ điều khoản về xử lý rủi ro, các điều khoản về giá cả, phương thức thanh toán, số lượng và chất lượng sản phẩm, và phương thức giao nhận được đánh giá khá chặt chẽ trong hợp đồng. Các dịch vụ đầu vào, đầu ra và giá cả sản phẩm trong liên kết sản xuất và tiêu thụ lúa hữ... Tóm tắt: Lòng trung thành của du khách đối với điểm đến là một yếu tố quan trọng nhằm góp phần thúc đẩy sự phát triển của một điểm đến du lịch. Nghiên cứu này được thực hiện dựa trên cơ sở điều tra khảo sát ý kiến của 231 du khách trong nước và quốc tế đến Hội An. Mục tiêu chính của nghiên cứu nhằm kiểm tra mối quan hệ giữa động cơ đẩy và kéo, sự hài lòng và lòng trung thành của du khách đối với điểm đến Hội An. Kết quả nghiên cứu cho thấy nhân tố đẩy, nhân tố kéo, cùng với sự hài lòng có ảnh hưởng đến lòng trung thành của du khách đối với điểm đến Hội An. Ngoài ra, trong bối cảnh du lịch di sản, du khách có xu hướng trung thành với điểm đến với nhu cầu được tìm hiểu lịch sử, đến thăm những điểm tham quan di sản – văn hóa, gặp gỡ những con người mới và giao lưu với cộng đồng địa phương. Theo đó, tác giả đề xuất một số giải pháp nhằm nâng cao lòng trung thành của du khách, góp phần thu hút du khách quay trở lại điểm đến di sản Hội An, bao gồm định vị và phát triển hình ảnh điểm đến H... Hợp ngữ (Assembly language) là ngôn ngữ có khả năng chuyển đổi 1-1 sang ngôn ngữ máy. Bài viết này sẽ trình bày hợp ngữ dành cho các dòng máy có kiến trúc MIPS. Để lập trình và chạy hợp ngữ MIPS, có thể dùng Mars: courses.missouristate.edu/KenVollmar/mars/ CISC và RISCHợp ngữ và kiến trúc máy tính được chi làm 2 loại: CICS và RISC. Đại diện tiêu biểu cho CISC là x86 - được sử dụng trên các máy tính cá nhân và server. Đại diện cho RISC là ARM và MIPS. ARM được sử dụng trong các thiết bị di động và MIPS được sử dụng trong một số siêu máy tính, và các thiết bị như router, Nintendo 64, Sony Playstation 2. Khác biệt giữa CISC và RISC: CISC là Complex insrtuction set computer và RICS là Reduced instruction set computer. Hợp ngữ của CISC rất phức tạp và ngược lại RISC thì đơn giản hơn, vì vậy các máy CISC tiêu tốn điện năng nhiều hơn các máy RISC. Các bạn có thể đọc thêm về so sánh CISC và RISC ở đây: cs.stanford.edu/people/eroberts/courses/soco/projects/risc/risccisc/ Thanh ghiMIPS có tổng cộng 32 thanh ghi (register) để lưu giá trị, được đánh số từ 0 đến 31. Để truy cập và thao tác trên một thanh ghi, ta dùng cú pháp
0 + số thứ tự thanh ghi. Ví dụ:
1,
2,
3,… Ngoài ra, MIPS có quy ước mục đích sử dụng của mỗi thanh ghi, khi lập trình nên tuân thủ các quy ước này. Vì thế, người ta thường truy cập thanh ghi thông qua tên của chúng: Tên Thanh ghi Ý nghĩa $zero 0 Thanh ghi này luôn chứa giá trị 0 $at 1 Assembler Temporary - Được dành riêng cho các mục đích khác, khi viết hạn chế dùng thanh ghi này $v0, $v1 2, 3 Lưu giá trị trả về của hàm $a0 - $a3 4 - 7 Lưu tham số truyền vào của hàm $t0 - $t7 8 - 15 Lưu biến tạm $s0 - $s7 16 - 23 Lưu biến $t8, $t9 24, 25 Như các $t ở trên $k0, $k1 26, 27 Được dùng cho nhân HĐH sử dụng $gp 28 Pointer to global area $sp 29 Stack pointer $fp 30 Frame pointer $ra 31 Return address, sử dụng cho việc gọi hàm MIPS có tư tưởng register-to-register - load/store, nghĩa là các lệnh đều thao tác trên thanh ghi. Khi cần sử dụng bộ nhớ, ta sẽ có các lệnh riêng để nạp dữ liệu từ bộ nhớ vào thanh ghi. Mỗi thanh ghi lưu trữ một giá trị 32-bit. Không như khái niệm biến ngôn ngữ lập trình cấp cao, thanh ghi trong hợp ngữ không có kiểu dữ liệu, cách ta sử dụng thanh ghi sẽ quyết định kiểu dữ liệu là gì. Các cấu trúc lệnh của MIPSPhần này trình bày cấu trúc của các lệnh hợp ngữ khi được dịch sang ngôn ngữ máy. Mỗi lệnh trong MIPS đều có độ dài là 32 bit. Có thể xem mỗi lệnh như một hàm trong ngôn ngữ lập trình. Vì vậy, ta cần có tên lệnh, các tham số truyền vào và kiểu của các tham số truyền vào - trong trường hợp này là kích thước của mỗi tham số truyền vào (vì không có khái niệm kiểu dữ liệu trong hợp ngữ). MIPS chú trọng tính đơn giản của tập lệnh, vì vậy chỉ có 3 kiểu lệnh chính: R-format, I-format, J-format. R-formatR-format có 6 tham số: Tên tham số op rs rt rd shamt funct Độ dài (bit) 6 5 5 5 5 6 Giải thích:
I-formatLệnh I-format dùng cho thao tác giữa thanh ghi và một hằng số được lưu sẵn trong lệnh. Cấu trúc như sau: Tên tham số op rs rt immediate Độ dài (bit) 6 5 5 16 Giải thích:
J-formatJ-format dành cho các lệnh nhảy (
5 trong C), có cấu trúc: Tên tham số op target address Độ dài (bit) 6 26 Giải thích:
Các lệnh tính toánLệnh cộng và trừ4 lệnh
6,
7,
8,
9 dùng để cộng/trừ giá trị của 2 thanh ghi, và lưu kết quả vào thanh ghi đích. Cú pháp:
2 lệnh
0,
1 dùng để cộng một thanh ghi với 1 hằng số, rồi lưu vào thanh ghi đích. Cú pháp:
Ví dụ:
Khác biệt giữa
8 và
6:
6 sẽ báo lỗi khi có tràn số, còn
8 thì không. Tương tự với các lệnh có
6 và không có
6 khác. Các lệnh tính toán logicCó 3 lệnh:
8,
9,
0. NOR là thao tác “NOT OR”:
1. Cú pháp của 3 lệnh này tương tự như lệnh
6 ở trên. Tương tự, ta cũng có lệnh
3 và
4 để tính AND/OR của một thanh ghi với một hằng số. Các phép toán logic khác có thể được tính từ 3 phép trên:
Tính toán với các hằng số 32 bitDễ thấy các lệnh thao tác với hằng số ở trên đều có giới hạn 16 bit cho hằng số. Để giải quyết vấn đề này, MIPS cung cấp lệnh
5 (load upper immediate) với chức năng ghi một hằng số 16-bit vào 2 byte cao của thanh ghi, 2 byte thấp sẽ được gán bằng 0. Ví dụ, ta cần cộng
6 cho giá trị
7:
Lệnh dịch2 lệnh
8 và
9 dùng để dịch trái và dịch phải. Đây là dịch logic, các giá trị trống sau khi dịch luôn là 0. Cú pháp tương tự như
0 ở trên, tuy nhiên số bit cần dịch luôn là một số không âm từ 0 đến 31. Các lệnh thao tác bộ nhớMô hình bộ nhớ của MIPSKhi cần tính toán với các giá trị được lưu trên RAM, ta phải nạp giá trị lên thanh ghi trước khi tính, sau đó lưu lại kết quả vào RAM (nếu cần). Đơn vị nhớ nhỏ nhất mà MIPS có thể xử lý là byte (8 bit). MIPS cung cấp các lệng load/store với các kích thước 1, 2 và 4 byte. Tuy nhiên có quy tắc Alignment Restriction sau: “Địa chỉ vùng nhớ cần truy cập phải chia hết cho kích thước cần truy cập”. Ví dụ, đọc 4 byte bắt đầu từ ô nhớ có địa chỉ 10 là không hợp lệ. Ngoài ra, MIPS lưu trữ dữ liệu theo dạng Big Endian, tức là byte cao sẽ được lưu ở địa chỉ thấp. Ví dụ, số 12345678h (thập lục phân) khi được lưu trong bộ nhớ thì byte đầu tiên sẽ là 12h, byte tiếp theo là 34,… Lệnh load/storeCú pháp: Trong đó:
Tên các lệnh:
Ví dụ, ta có một mảng
1 được lưu trong
6:
Một số lưu ý:
Các lệnh điều khiểnKhi chương trình được thực thi, máy sẽ nạp chương trình lên bộ nhớ, đồng thời có một thanh ghi dành riêng để lưu địa chỉ của lệnh đang được thực thi, đây gọi là thanh ghi PC (program counter). Mỗi lần thực hiện xong một lệnh, mặc định PC sẽ được tự động tăng lên để chuyển sang lệnh tiếp theo. Công việc của các lệnh điều khiển như nhảy, rẽ nhánh là gán lại địa chỉ của thanh ghi PC, để chương trình chuyển sang một đoạn khác. Lệnh nhảyLệnh nhảy tương tự như
5 trong C, có 2 lệnh nhảy là
6 và
7, ngoài ra còn có
8 nhưng ta sẽ tìm hiểu lệnh này sau. Cú pháp lệnh
6:
Thông thường, khi viết hợp ngữ ta chỉ cần dùng nhãn, trình dịch hợp ngữ sẽ tự chuyển đổi sang địa chỉ, ví dụ:
Đoạn chương trình tên là một vòng lặp vô hạn.
7 cũng tương tự như
6, tuy nhiên ta đọc địa chỉ lệnh cần nhảy đến trong một thanh ghi. Ví dụ: Cách hoạt động của lệnh nhảy:
Lệnh rẽ nhánhLệnh rẽ nhánh sẽ thực hiện 2 thao tác: so sánh và nhảy khi thỏa điều kiện. Có 2 lệnh rẽ nhánh là
6 (branch if equal) và
7 (branch if not equal). Cú pháp:
Lệnh
6 sẽ so sánh giá trị trong 2 thanh ghi, nếu bằng nhau thì nhảy đến nhãn chỉ định. Lệnh
7 thì ngược lại, nhảy khi 2 giá trị khác nhau. Khi không nhảy, chương trình sẽ thực hiện lệnh tiếp theo. Địa chỉ truyền vào là địa chỉ tương đối và có dấu, PC sẽ được tính lại như sau:
0, với
5 là địa chỉ truyền vào. Để so sánh lớn hơn/bé hơn, MIPS đưa thêm lệnh
2 (set on less than). Cú pháp: Với rt, rs, rd là các thanh ghi. Lệnh này sẽ gán
3 bằng 1 khi
4, bằng 0 trong trường hợp ngược lại. So sánh trong lệnh trên là so sánh có dấu (bù 2). Để so sánh không dấu, MIPS hỗ trợ lệnh
5, cách dùng tương tự như trên. Ngoài ra, cũng có lệnh để so sánh với một hằng số, là
6 và
7. Cú pháp tương tự như các lệnh tính toán với hằng số ở trên. Kết hợp các lệnh đã tìm hiểu, ta có thể dịch đoạn chương trình C sau sang hợp ngữ MIPS:
0 Thủ tục trong hợp ngữTrong hợp ngữ, sử dụng thủ thục thực chất là nhảy đến đoạn code của thủ tục đó. Tuy nhiên có một số vấn đề phát sinh:
MIPS giải quyết các vấn đề này bằng một số quy ước, khi lập trình ta nên tuân thủ theo các quy ước này để code có tính tái sử dụng cao và hạn chế sai lầm từ người lập trình. Vị trí quay vềVí dụ đoạn code C sau được dịch sang hợp ngữ ở dưới:
1
2 Sau khi thực hiện xong hàm
8 thì chương trình sẽ nhảy về L1 để tiếp tục thực thi hàm
9. Nhưng chuyện xảy ra nếu có một hàm khác cũng gọi
8:
3 Ta thấy nếu hàm
1 gọi
8 thì địa chỉ nhảy về sẽ khác với khi
9 gọi
8. Để giải quyết vấn đề này, MIPS cung cấp lệnh
8 (jump and link).
8 sẽ gán giá trị thanh ghi
7 bằng với địa chỉ của lệnh tiếp theo trước khi thực hiện nhảy. Như vậy, sau khi thực hiện xong, hàm được gọi chỉ cần
8 để nhảy về đúng lệnh cần nhảy:
4 $sp - Bộ nhớ stackGiả sử có 3 hàm gọi nhau, sử dụng
7 như trên:
5
6 Ta thấy ngay 2 vấn đề:
Để giải quyết vấn đề này, MIPS đưa ra một số thỏa hiệp giữa hàm gọi (caller - R) và hàm được gọi (callee - E):
Để quản lý sao lưu / khôi phục các thanh ghi như yêu cầu ở trên, ta dùng bộ nhớ stack. Trong MIPS, thanh ghi
07 có giá trị trỏ tới đỉnh stack. Ở đầu hàm, ta lưu các biến cần sao lưu vào stack, sau đó ở cuối hàm, ta khôi phục lại các biến đó. Viết lại đoạn chương trình trên như sau:
7 Truyền tham số - giá trị trả về4 thanh ghi
13 đến
14 được quy ước dùng riêng cho các tham số truyền vào. Và 2 thanh ghi
15,
16 được dùng cho giá trị trả về. Ví dụ: |