[Programming] Memory access in ASM on Linux? |
12/10/2010 20:17:24 (+0700) | #1 | 222697 |
zjm_zjm
Member
|
0 |
|
|
Joined: 26/07/2009 01:53:09
Messages: 159
Location: hhhhhh
Offline
|
|
Hiện tại mình đang nghiên cứu thâm sâu về asm, nhưng có 1 số thứ trừu tượng quá muốn các đàn anh giải thích dùm mình. Như tieu đề mình đã nêu đó là vấn đề memory access.
Mình có 1 đoạn code như trên
Code:
ORG 100h ;
MOV AX, 0B800h ; đưa B800h vào ax
MOV DS, AX ; copy value of AX to DS.
MOV CL, 'A' ; set CL to ASCII code of 'A', it is 41h.
MOV CH, 1101_1111b ; set CH to binary value.
MOV BX, 15Eh ; set BX to 15Eh.
MOV [BX], CX ; copy nội dung CX vào địa chỉ BX
RET
[BX] ===> Cái này mình hiểu
Nhưng
to access memory we can use these four registers: BX, SI, DI, BP.
combining these registers inside [ ] symbols, we can get different memory locations. these combinations are supported (addressing modes):
Code:
[BX + SI]
[BX + DI]
[BP + SI]
[BP + DI]
Sự phối hợp giữa BX và SI và DI thật sự quá trừu tượng đối với mình, anh em cho mình 1 cái ví dụ cho dễ hiểu và chức năng của 2 thanh ghi SI và DI với nha. 999 thanks
|
|
|
 |
 |
[Programming] Memory access in ASM on Linux? |
12/10/2010 22:16:37 (+0700) | #2 | 222708 |
![[Avatar] [Avatar]](/hvaonline/images/avatar/1595af6435015c77a7149e92a551338e.jpg)
|
WinDak
Researcher
|
Joined: 27/01/2002 11:15:00
Messages: 223
Offline
|
|
- SI, DI thì cũng chỉ là register (tìm hiểu xem register này thường làm gì ?!)
mov AL, [ BX + SI ]
vs
mov AL, [BX]
khác gì nhau ? Bạn thấy trừu tượng ở chỗ nào ? Thử tìm hiểu thêm về các addressing mode của x86
|
|
-- w~ -- |
|
[Programming] Memory access in ASM on Linux? |
12/10/2010 22:56:50 (+0700) | #3 | 222711 |
zjm_zjm
Member
|
0 |
|
|
Joined: 26/07/2009 01:53:09
Messages: 159
Location: hhhhhh
Offline
|
|
mov AL, [BX]
==> Ví dụ BX có địa chỉ 100h và chứa giá trị 21h
câu lệnh trên nó sẽ đưa địa chỉ BX vào AL, và bây h AL sẽ trỏ về 100h và có giá trị 21h
mov AL, [ BX + SI ]
Ví dụ
BX có địa chỉ là 100h
SI có địa chỉ là 054h
Nó sẽ cộng tổng 2 địa chỉ lại và đưa vào AL
Không biết có đúng không :-s
|
|
|
[Programming] Memory access in ASM on Linux? |
13/10/2010 03:17:05 (+0700) | #4 | 222717 |
![[Avatar] [Avatar]](/hvaonline/images/avatar/0f4280973a41f53e5f3eb98b58775cee.jpg)
|
VTC_A1
Member
|
0 |
|
|
Joined: 18/08/2008 13:27:57
Messages: 41
Offline
|
|
Hai thanh ghi DI (destnation index) và SI (Source index) là hai thanh ghi chỉ số thường dùng trong xử lý chuỗi, truy cập dữ liệu các mảng. Còn các cái này
-----------------
[BX + SI]
[BX + DI]
[BP + SI]
[BP + DI]
-----------------
chẳng qua cũng chỉ là các hình thức định địa chỉ based indexed thôi . Với based ở đây là bx và bp xác định segment lần lượt là ds và ss, indexed là hai thanh ghi si và di đó bạn |
|
|
[Programming] Memory access in ASM on Linux? |
13/10/2010 08:30:16 (+0700) | #5 | 222722 |
![[Avatar] [Avatar]](/hvaonline/images/avatar/1595af6435015c77a7149e92a551338e.jpg)
|
WinDak
Researcher
|
Joined: 27/01/2002 11:15:00
Messages: 223
Offline
|
|
zjm_zjm wrote:
mov AL, [BX]
==> Ví dụ BX có địa chỉ 100h và chứa giá trị 21h
câu lệnh trên nó sẽ đưa địa chỉ BX vào AL, và bây h AL sẽ trỏ về 100h và có giá trị 21h
mov AL, [ BX + SI ]
Ví dụ
BX có địa chỉ là 100h
SI có địa chỉ là 054h
Nó sẽ cộng tổng 2 địa chỉ lại và đưa vào AL
Không biết có đúng không :-s
Sai lầm cơ bản rồi, "AL trỏ về" và "AL có giá trị" là thế nào ?
Đọc quyển "The Art of Assembly Language Programming"
http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/toc.html - Chapter 4
|
|
-- w~ -- |
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|