Người đi rồi… áo mùa thu khép lại
Giấu trong tà một chút nắng vàng hanh
Buồn của tôi thay lá mọc trên cành
Chưa rụng vội để chờ mùa thu khác
Xin chào mọi người lại là mình đây, một dân nghiệp dư mới vào nghề. Dạo này do làm dự án công ty bận bịu quá chẳng có thời gian mà tìm hiểu và viết blog nữa ☹. Nay nhân một ngày thảnh thơi như cái tình trạng FA vào mùa đông của mình ,đành dành một chút thời gian để viết tiếp cái Seri dài tập chưa có hồi kết này để các bạn đọc tiếp ?).
Các lệnh tính toán số học.
Lệnh cộng.
Theo như mình biết thì gồm:
Lệnh | Ví dụ | Ý nghĩa | |
add | add $1,$2,$3 | $1=$2+$3 | |
add immediate | addi $1,$2,100 | $1=$2+100 | Có nghĩa là phép cộng có hằng số. |
add unsigned | addu $1,$2,$3 | $1=$2+$3 | Phép cộng số nguyên không dấu. |
add immediate unsigned | addiu $1,$2,100 | $1=$2+100 | Phép cộng số nguyên không dấu. |
Cú pháp:
Đối với add,addu: <tên lệnh > <thanh ghi đích> , <thanh ghi 1>, < thanh ghi 2>
Đối với addi,addiu: <tên lệnh > <thanh ghi đích> , <thanh ghi 1> , < hằng số>
Ví dụ cụ thể:
Biên dịch file .c trên với kiến trúc MIPS như sau:
mips-linux-gnu-gcc -O3 -S -mfp32 -march=mips32 Sum.c
Hình ảnh khi được biên dịch ra MIPS Assembly.
Tại sao mình khai báo signed int nhưng khi biến dịch ra assembly lại nó lại dùng addiu. Thì theo như mình lướt dạo trên mạng thấy phần lớn trình trình biên dịch sẽ sử dụng addu và addiu để tránh “bẫy” tràn. Và add,addi chỉ sử dụng khi tự code hoặc được sử dụng trong ISAs như x86,ARM…
Lệnh trừ.
Lệnh | Ví dụ | Ý nghĩa | |
subtract | sub $1,$2,$3 | $1=$2-$3 | |
subtract unsigned | subu $1,$2,$3 | $1=$2-$3 | Phép trừ số nguyên không dấu |
Cú pháp:
sub,subu: <tên lệnh > <thanh ghi đích> , <thanh ghi 1>, < thanh ghi 2>
Ví dụ cụ thể:
Hình ảnh khi được biên dịch ra MIPS Assembly.
Lệnh nhân
Lệnh | Ví dụ | Ý nghĩa | |
Multiply (withoutoverflow) | mul $1,$2,$3 | $1=$2*$3 | Kết quả chỉ có 32 bits. |
Multiply | mult $2,$3 | $hi,$low=$2*$3 | Phép nhân tràn số 32 bit cao được lưu trong thanh ghi hi.
– 32 bit thấp được lưu trong thanh ghi low. |
Ví dụ cụ thể:
Lệnh chia.
Lệnh | Ví dụ | Ý nghĩa | |
Divide | div $2,$3 | $hi,$low=$2/$3 | Kết quả được lưu trong thanh ghi hi
Thươn số được lưu trong thanh ghi low |
Thôi đoạn này mình lười lắm không chụp ảnh đâu ?). Cái này cũng tương tự như các hình trên thôi.
Lệnh tính toán Logic.
Lệnh | Ví dụ | Ý nghĩa | |
and | and $1,$2,$3 | $1=$2&$3 | Bitwise AND |
or | or $1,$2,$3 | $1=$2|$3 | Bitwise OR |
xor | xor $1,$2,$3 | $1 = $2 ??$3 | Bitwise XOR |
nor | nor $1,$2,$3 | $1 = ~($2 | $3) not of OR | Bitwise NOR |
and immediate | andi $1,$2,100 | $1=$2&100 | Bitwise AND thanh ghi, hằng số |
or immediate | or $1,$2,100 | $1=$2|100 | Bitwise OR thanh ghi, hằng số |
xor immediate | xori $1, $2,10 | $1 = ~$2 &~10 | Bitwise XOR thanh ghi, hằng số |
shift left logical | sll $1,$2,10 | $1=$2<<10 | Dịch trái |
shift right logical | srl $1,$2,10 | $1=$2>>10 | Dịch phải |
Ví dụ cụ thể.
Hình ảnh khi được biên dịch ra mã Asembly
Kết thúc phần 2 cho mùa đông lạnh lẽo ở đây thôi. Hẹn các bạn những phần tiếp theo nhé ^^.
Vu Van Tien ( aka n0_be3r )