1. Trang chủ
  2. » Công Nghệ Thông Tin

CE119Lab01IT012Lab03 UIT có đáp án

8 216 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 33,45 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ngôn ngữ này có thể được tạo bằng cách biên dịch mã nguồn từ một ngôn ngữ lập trình cấp cao, chẳng hạn như C, C++.. - Trình bày các quá trình một chương trình viết bằng ngôn ngữ C/C++ đư

Trang 1

2.1 Sinh viên tìm hiểu tài liệu “Một số lệnh assembly MIPS cơ bản” và mô phỏng

việc thực thi các lệnh và cho biết chức năng của các lệnh cơ bản sau:

add, addi, addu, addiu, sub, subu, and, andi, or, nor, lw, sw, slt, slti, sltu, sltiu, syscall

.data

var1: word 23

.text

start:

lw $t0, var1

sw $t1,var1

# Khai báo vùng nhớ data

# gán var1 = 23 (kiểu int)

# Khai báo vùng nhớ chứa mã lệnh

#Code

# gán $t0 = var1 = 23

# gán $t1 = 5

# cho var1 = $t1 hay var1 = 5

add $1, $2, $3 $1 = $2 + $3 Cộng 2 giá trị (kết quả có dấu) addi $1, $2, 3 $1 = $2 + 3 Cộng 1 giá trị với 1 hằng số (kết

quả có dấu) addu $1, $2, $3 $1 = $2 + $3 Cộng 2 giá trị (kết quả không có

dấu) addiu $1, $2, $3 $1 = $2 + 3 Cộng 1 giá trị với 1 hằng số (kết

quả không có dấu) sub $1, $2, $3 $1 = $2 - $3 Trừ 2 giá trị (kết quả có dấu) subu $1, $2, $3 $1 = $2 - 3 Trừ 1 giá trị với 1 hằng số (kết

quả không có dấu)

andi $1, $2, 3 $1 = $2 & 3 Phép toán logic và (có hằng số)

nor $1, $2, $3 $1 = ~($2 | $3) Phép toán logic Not -> or

lw $1, 20($2) $1 = Memory[$2+20] Chép 1 word (4 byte) tại vị trí

trong bộ nhớ RAM vào thanh ghi

sw $1, 20($2) $1 = Memory[$2+20] Lưu 1 word trong thanh ghi vào

vị trí trong bộ nhớ RAM slt $1, $2, $3 if ($2 < $3) $1 = 1;

else $1 = 0

So sánh bé hơn slti $1, $2, $3 if ($2 < 3) $1 = 1;

else $1 = 0

So sánh bé hơn hằng số

sltu $1, $2, $3 if ($2 < $3) $1 = 1;

else $1 = 0 So sánh bé hơn không dấu sltiu $1, $2, $3 if ($2 < 3) $1 = 1;

else $1 = 0 So sánh bé hơn hằng số không dấu

Trang 2

array1: space 12

.text

start:

la $t0,array1

li $t1,5

sw $t1,($t0)

li $t1,13

sw $t1, 4($t0)

li $t1, -7

sw $t1, 8($t0)

# mảng arr1 có kích thước 12 byte liên tục

# Gán mảng arr1 là $t0

# Gán $t1=5

#lưu $t1 với 0 byte = 5 vào mảng $t0

# Gán $t1=13

#lưu $t1 có 4 byte = 13 vào mảng $t0

# Gán $t1= -7

#lưu $t1 có 8 byte = -7 vào mảng $t0

li $v0,5

syscall

# Gán $v0=5

#sau khi kết thúc lệnh syscall thì ta nhập vào

#lại giá trị $v0 .data

string1: asciiz "Print this \n"

text

main: li $v0,4

la $a0,string1

syscall

#lệnh cout trong c++

#$v0 = 4

#load địa chỉ của string1 vào thanh ghi $a0

#xuất ra thanh ghi $a0

Bài 3

A,

.data

chuoi1: asciiz "Chao ban! Ban la sinh

vien nam thu may? \n"

chuoi2: asciiz "Hihi, minh la sinh vien

nam thu 1 ^-^"

.text

la $a0,chuoi1

li $v0,4

move $t1,$v0

syscall

la $a0,chuoi2

li $v0,4

move $t2,$v0

syscall

# Khai báo vùng nhớ data

# cout chuoi1

#

# cout chuoi2

#

# code

# load địa chỉ chuoi1 vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

# lưu $v0 vào $t1 tránh bị trùng $a0 sau

# in chuoi1

# load địa chỉ chuoi2 vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

# lưu $v0 vào $t2

# in chuoi2

Trang 3

B,Biểu diễn nhị phân của 2 chuỗi là

C,

.data

chuoi: asciiz

.text

li $v0,8

la $a0,chuoi

li $a1,30

syscall

li $v0,4

move $t1,$v0

syscall

# Khai báo vùng nhớ data

#

#

# viết chuỗi

# load địa chỉ chuoi vào thanh ghi $a0

# số kí tự tối đa có thể nhập là 29

# nhập

#

# lưu $v0 với địa chỉ $a0

# lưu $v0 vào $t1 tránh bị trùng $a0 sau

# in chuoi

d) Nhập vào 2 số nguyên sau đó xuất tổng của 2 số nguyên này

.data

nhap1: asciiz "Nhap So Thu 1: "

nhap2: asciiz "Nhap So Thu 2: "

tong: asciiz "Tong la: "

.text

main:

la $a0,nhap1

add $v0,$0,4

syscall

add $v0,$0,5

syscall

add $t0,$0,$v0

la $a0,nhap2

add $v0,$0,4

syscall

add $v0,$0,5

syscall

# Khai báo vùng nhớ data

# biến nhap1

# biến nhap2

# biến tổng

#

#

# load địa chỉ nhap1 vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

# nhập

#

# Gán $v0=5 -> in

# in biến

# lưu $t0 = $v0

#

# load địa chỉ nhap2 vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

#

#

# Gán $v0=5

# nhập

Trang 4

add $t1,$0,$v0

Tong:

add $t2,$t0,$t1

la $a0,tong

add $v0,$0,4

syscall

add $a0,$0,$t2

add $v0,$0,1

syscall

# Gán $t1 = $v0

#

#

# $t2 = $t0 + $t1

# load địa chỉ tong vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

#

#

# load địa chỉ $t2 vào thanh ghi $a0

# gán $v0 = 1 -> xuất

# Xuất

Bt thanm khảo

a,Assembly là gì? Assembly là một loại ngôn ngữ lập trình cấp thấp cho bộ vi xử lý và các thiết bị có thể lập trình khác Ngôn ngữ này có thể được tạo bằng cách biên dịch mã nguồn từ một ngôn ngữ lập trình cấp cao, chẳng hạn như C, C++

- Trình bày các quá trình một chương trình viết bằng ngôn ngữ C/C++ được thực hiện trên máy tính? Giai đoàn tiền xử lý (Pre-processor) -> Giai đoạn dịch NNBC sang Asembly (Compiler) -> Giai đoạn dịch asembly sang ngôn ngữ máy (Asember) -> Giai đoạn liên kết (Linker)

b Trình bày các kiểu dữ liệu trong MIPS32 và kích thước của từng kiểu dữ liệu các kiểu dữ li u: ê

+ word 4 : biến nguyên có kích thước 1 word

+ byte ‘a’, ‘c’: mảng có 2 phần tử, mỗi phần tử 1 byte

+ space n : mảng có kích thước n byte liên tục

+ asciiz “hello” : chuỗi có kết thúc bởi null

c Trình bày cấu trúc bộ nhớ của một chương trình C++(layout memory)

- Memory layout của của một chương trình C/C++ gồm 5 phần chính: Text Segment, Initialized Data Segment, Uninitialized Data Segment, Heap và Stack

d.Viết chương trình hợp ngữ nhập vào ba số a,b,c Kiểm tra và in ra số lớn nhất, số bé nhất(không dùng vòng lặp)

Trang 5

Code Giải thích data

_a: asciiz "a = "

_b: asciiz "b = "

_c: asciiz "c = "

_max:.asciiz "max = "

_min: asciiz "\nmin = "

.text

main:

la $a0,_a

li $v0,4

syscall

li $v0,5

syscall

move $t0,$v0

la $a0,_b

li $v0,4

syscall

li $v0,5

syscall

move $t1,$v0

la $a0,_c

li $v0,4

syscall

li $v0,5

syscall

move $t2,$v0

#nhap xong

slt $s0,$t1,$t0

beq $s0,$0, L1

j L2

L1:

move $t4,$t0

move $t0,$t1

move $t1,$t4

L2: slt $s0,$t2,$t0

beq $s0,$0, L3

j L4

L3: move $t4,$t0

move $t0,$t2

# Khai báo vùng nhớ data

# biến a

# biến b

# biến c

# biến max

# biến min

#

#

# load địa chỉ a vào thanh ghi $a0

# Gán $v0=4 -> in

#

# Gán $v0=5 -> nhập

#

# lưu $t0 = $v0

#

# load địa chỉ b vào thanh ghi $a0

# Gán $v0=4 -> in

#

# Gán $v0=5 -> nhập

#

# lưu $t1 = $v0

#

# load địa chỉ c vào thanh ghi $a0

# Gán $v0=4 -> in

#

# Gán $v0=5 -> nhập

#

# lưu $t2 = $v0

#

#so sánh $t1 <= $t0 (b<=a) nếu bằng thì

#$s0=0

#so sánh nếu $s0=0 thì nhảy đến L1

#nhảy đến L2

#

# $t4 = $t0

# $t0 = $t1

# $t1 = $t4

#so sánh $t2 <= $t0 (c<=a)

#so sánh nếu $s0=0 thì nhảy đến L3

#nhảy đến L4

# $t4 = $t0

# $t0 = $t2

Trang 6

move $t2,$t4

L4: slt $s0,$t2,$t1

beq $s0,$0, L5

j L6

L5: move $t4,$t1

move $t1,$t2

move $t2,$t4

L6: la $a0, _max

li $v0, 4

syscall

move $a0, $t0

li $v0, 1

syscall

la $a0, _min

li $v0, 4

syscall

move $a0, $t2

li $v0, 1

syscall

# $t2 = $t4

#

#so sánh $t2 <= $t1 (c<=b)

#so sánh nếu $s0=0 thì nhảy đến L5

#nhảy đến L6

# $t4 = $t1

# $t1 = $t2

# $t2 = $t4

#

# load địa chỉ max vào thanh ghi $a0

# Gán $v0=4 -> in

#

# $a0 = $t0

# print interger

#

#

# load địa chỉ min vào thanh ghi $a0

# Gán $v0=4 -> in

#

# $a0 = $t2

# print interger

#

E, tính cộng trừ nhân chia với mips

.data

nhap1: asciiz "a = "

nhap2: asciiz "b = "

tong: asciiz "a + b = "

hieu: asciiz "\na - b = "

nhan: asciiz "\na * b = "

chia: asciiz "\na / b = "

.text

main:

la $a0,nhap1

add $v0,$0,4

syscall

add $v0,$0,5

syscall

add $t0,$0,$v0

# Khai báo vùng nhớ data

# biến nhap1

# biến nhap2

# bien tong

# biến hieu

# biến nhan

# bien chia

#

#

# load địa chỉ nhap1 vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

# nhập

#

# Gán $v0=5 -> in

# in biến

# lưu $t0 = $v0

Trang 7

la $a0,nhap2

add $v0,$0,4

syscall

add $v0,$0,5

syscall

add $t1,$0,$v0

Tong:

add $t2,$t0,$t1

la $a0,tong

add $v0,$0,4

syscall

add $a0,$0,$t2

add $v0,$0,1

syscall

Hieu:

sub $t3,$t0,$t1

la $a0,hieu

add $v0,$0,4

syscall

add $a0,$0,$t3

add $v0,$0,1

syscall

Nhan:

mul $t4,$t0,$t1

la $a0,nhan

add $v0,$0,4

syscall

add $a0,$0,$t4

add $v0,$0,1

syscall

Chia:

sub $t5,$t0,$t1

la $a0,chia

add $v0,$0,4

syscall

add $a0,$0,$t5

add $v0,$0,1

#

# load địa chỉ nhap2 vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

#

#

# Gán $v0=5

# nhập

# Gán $t1 = $v0

#

#

# $t2 = $t0 + $t1

# load địa chỉ tong vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

#

# load địa chỉ $t2 vào thanh ghi $a0

# gán $v0 = 1 -> xuất

# Xuất

#

#

# $t3 = $t0 - $t1

# load địa chỉ tong vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

#

# load địa chỉ $t3 vào thanh ghi $a0

# gán $v0 = 1 -> xuất

# Xuất

#

#

# $t4 = $t0 * $t1

# load địa chỉ tong vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

#

# load địa chỉ $t4 vào thanh ghi $a0

# gán $v0 = 1 -> xuất

# Xuất

#

#

# $t5 = $t0 / $t1

# load địa chỉ tong vào thanh ghi $a0

# lưu $v0 với địa chỉ $a0

#

# load địa chỉ $t5 vào thanh ghi $a0

# gán $v0 = 1 -> xuất

Trang 8

syscall # Xuất

G, thầy đã hướng dẫn

Ngày đăng: 09/12/2021, 08:05

TỪ KHÓA LIÊN QUAN

w