2013-04-11 33 views
9

Tôi có mã này ở đây, nhưng tôi không quen với cú pháp.`dup (?)` Có nghĩa là gì trong TASM?

STACK16_SIZE =  100h 
stack16   db  STACK16_SIZE dup (?) 

Tôi nghĩ dup có nghĩa là chúng tôi khai báo một loại mảng, vì đây là ngăn xếp, nhưng tôi không chắc chắn. Vì vậy, dup có nghĩa là gì trong TASM, chính xác?

Trả lời

16

STACK16_SIZE dup (?) có nghĩa là sao chép dữ liệu trong dấu ngoặc đơn bằng STACK16_SIZE lần. Nó tương đương với cách viết ?, ?, ?, ?, ... (100h lần)

Dữ liệu trong các lần gọi là "dữ liệu chưa được khởi tạo". Nghĩa là, bộ nhớ được cấp phát nhưng không được đặt thành bất kỳ giá trị cụ thể nào khi tải.

Hội không cung cấp một loại "mảng". Nếu có, nó chỉ dành cho các trình gỡ rối để sử dụng khi kiểm tra dữ liệu. Tuy nhiên, trong đoạn mã này, stack16 là một biểu tượng có địa chỉ bắt đầu một khối bộ nhớ gồm các byte — là phần mềm trực quan và có khả năng là một nguồn của một lỗi nhỏ. Đối với một ngăn xếp CPU, nó thực sự phải được định nghĩa là các từ 16 bit (dw) hoặc các từ 32 bit (dd).

+0

Nhưng loại nào là stack16? Tôi đến từ nền C, vì vậy tôi đã suy nghĩ về mảng. Hoặc nó giống như một trình giữ chỗ cho một địa chỉ bộ nhớ? I E. tất cả các biến trong TASM giống như 'void *' và có thể trỏ đến bất kỳ loại dữ liệu nào. Vì vậy, ở đây stack16 điểm đến phần tử đầu tiên của một mảng 100 byte. Đúng không? – sashoalm

+1

Đừng bận tâm, tôi đã tìm thấy một lời giải thích tốt tại http://www.csi.ucd.ie/staff/jcarthy/home/alp/alp5.html – sashoalm

+0

ARR1 DB 5 DUP (2) bạn nghĩ gì về biểu thức này? giá trị bên trong mảng là gì? – muco

7

? có nghĩa là không có giá trị cụ thể nào, chưa được khởi tạo. DUP có nghĩa là trùng lặp.

Vì vậy, bạn nhận được 100h byte chưa được khởi tạo.