Hợp ngữ MIPS (P2)

VSEC - BLOG Bảo mật cho người mới

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 )