[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 |
|
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
|
|
|
|