Assembler 4 Assembler 4 Giảng viên Phạm Nguyên Văn I Định địa chỉ gián tiếp 1 Toán hạng gián tiếp là thanh ghi chứa địa chỉ của dữ liệu trong bộ nhớ, còn gọi là biến trỏ Với biến DL chỉ chứa 1 thành p[.]
Assembler Giảng viên: Phạm Nguyên Văn I Định địa gián tiếp • Tốn hạng gián tiếp: ghi chứa địa liệu nhớ, cịn gọi biến trỏ • Với biến DL chứa thành phần, biến trỏ có giá trị • với mảng, biens trỏ gia số để trỏ đến thành phần • Trong ghi 16bit, SI, DI, BX BP dùng tốn hạng gián tiếp • • • • • • • VD: data aString db “ABCDEFG” code mov bx,offset aString ; bx = 0200 add bx,5 ; bx = 0205 mov dl,[bx] ; dl = F • Giá trị ngầm định phân đoạn: địa tạo toán hạng gián tiếp mặc định từ DS, ngoại trừ BP EBP phần toán hạng gián tiếp • VD: giả sử phân đoạn ngăn xếp phân đoạn liệu nằm vị trí khác nhau: • mov si, bp ; si bp • mov dl,[si] ; tìm phân đoạn liệu • mov dl,[bp] ; tìm phân đoạn ngăn xếp • Chạy đè phân đoạn ngầm định: phải sử dụng tính định địa gián tiếp để truy cập liệu phân đoạn khác ngồi DS: • mov al,cs:[si] ; dich vi tu CS • mov eax,es:[edi] ; dich vi tu ES • mov bx,fs:[edx] ; dich vi tu FS • mov dl,ss:[di] ; dich vi tu SS • mov ax,gs:[ecx] ; dich vi tu GS • Tương tự, sử dụng BP EBP để truy cập liệu DS, CS, ES trỏ đến, ta cần phải chạy đè phân đoạn: • mov dl,ds:[bp] ; dich vi tu DS • mov al,es:[ebp]; dich vi tu ES • mov dl,cs[bp] ; dich vi tu CS • mov al,fs:[ebp]; dich vi tu FS • VD: cộng số nguyên 8bit • Cộng số nguyên 16bit: • Hiển thị chuỗi: • Tính tổng mảng ngun: – – – – data intarray dw 100h,200h,300h,400h COUNT = ($ - intarray)/2 code • mov ax,0 • mov di,offset intarray • mov cx,COUNT – L1: • add ax,[di] • add di,2 • loop L1 ; cong so nguyen ; tro den so nguyen ke tiep ; lap cho den cx = 10 ... ghi sở ghi mục 12 II Dùng thư viện kết nối • Thư viện kết nối thơng thư? ??ng có dạng lib, chứa nhiều hàm nhập xuất chuẩn • Sử dụng EXTRN để định danh tên tồn bên tập tin hành: – extrn name:type... sở-chỉ mục • Tốn hạng sở mục chủ yếu Sự khác biệt là: bx bp ghi sở, si di ghi mục Thanh ghi cộng với địa Thanh ghi cộng với Mov dx,array[bx] Mov ax,[bx+ROWVAL] Mov dx,[di+array] Mov dx,[bp +4] ... 16bit: • Hiển thị chuỗi: • Tính tổng mảng nguyên: – – – – data intarray dw 100h,200h,300h ,40 0h COUNT = ($ - intarray)/2 code • mov ax,0 • mov di,offset intarray • mov cx,COUNT – L1: • add ax,[di]