30/09/2018, 18:43

Lỗi ghi đè kiểu asciiz trong MIPS

mình có mã nguồn của MIPS này

.data
str1: .asciiz " "
str2: .asciiz " "
.globl main
.text
main:

#nhap chuoi str1
li $v0, 8
la $a0, str1
la $a1, 20
syscall

#nhap chuoi str2
li $v0, 8
la $a0, str2
la $a1, 20
syscall


#xuat chuoi str1
li $v0, 4
la $a0, str1
syscall

#xuat chuoi str1
li $v0, 4
la $a0, str2
syscall

#thoat
li $v0, 10
syscall

khi mình nhập xong str1 rồi nhập str2 thì xuất ra thì str1 bị đè lên. Mọi người giải thích giúp mình với, cảm ơn mọi người

Minh Hoàng viết 20:47 ngày 30/09/2018

Bạn khai báo chuỗi str1 quá ngắn mà bạn nhập một đoạn dài hơn độ dài str1, đồng thời các vùng nhớ liên tiếp nhau, nên nó sẽ bị str2 ghi đè lên.

Lê Hồng Hiếu viết 20:43 ngày 30/09/2018

mình khai báo cho nó là 20byte mà mình chỉ nhập vài kí tự thôi bạn :). Còn tại sao các vùng nhớ của nó lại liên tiếp nhau? Minh chuyển sang xài kiểu .space thì ko sao. Vậy tại sao .space ko có hiện tượng này vậy bạn? Cảm ơn bạn

Minh Hoàng viết 20:48 ngày 30/09/2018

Bạn chưa khai báo 20 kí tự đâu, .space x là khai báo một vùng nhớ x byte. Tại sao các vùng nhớ liên tiếp nhau thì tại vì người ta quy định như thế

Bài liên quan
0