Gán cho thanh ghi đoạn

Trong bài em thấy 1 câu lệnh không liên quan lắm và em cũng không hiểu nó lắm! Mong ai rành cái này chỉ em với…

Đề bài:
Viết chương trình chuyển mảng dữ liệu từ vùng nhớ DISPLAY_VIDEO (địa chỉ 700h) có địa chỉ mảng là DISPLAY_BASE (địa chỉ B800h) tới vùng dữ liệu BUFFER_SAVE có địa chỉ mảng do DS quản lý. Biết rằng nhớ DISPLAY_VIDEO chứa 1 KB ký tự(mã hóa ASCII).

--------------------- đây là code ---------------------

DISPLA Y_BASE EQU 0B800h
DISPLAY_ VIDEO EQU 700h

Code_Seg SEGMENT;mở mảng lệnh
ASSUME CS:Code_Seg, DS:Data_Seg
ORG 100h; tạo file dạng com
ThuTucChinh PROC ;tạo thủ tục chính
CALL Chuyen_Mang
ThuTucChinh EndP; kết thúc

;-----------------------------
Chuyen_Mang Proc Near
PUSH AX
PUSH BX
PUSH CX
MOV SI, DISPLAY_VIDEO
LEA DI, BUFFER_SAVE
MOV AX, DISPLAY_BASE
MOV DS, AX
MOV AX, CS ; câu này em ko hiểu … tại sao lại chuyển dữ liệu của cs vào ax
MOV ES, AX
CLD ;xóa cờ DF:DF = 0
MOV CX, 1024; BỘ ĐẾM 1024
LOOP_1Kb:
MOVSB
LOOP LOOP_1Kb
POP CX
POP BX
POP AX
RET
Chuyen_Mang ENDP
Code_Seg ENDS
Data_Seg SEGMENT
BUFFER_SAVE DB 1024 DUP(?)
Data_Seg EndS

;— kết thúc code
Mong mọi người ai giúp đỡ ~~~~~~
MOV AX, CS ; câu này em ko hiểu … tại sao lại chuyển dữ liệu của cs vào ax
chính xác là cái này !!

Ngay sau đó là câu MOV ES, AX :smiley: lí do là vì không gán được các thanh ghi đoạn với nhau (ch/tr 1 đoạn), AX luôn đc dùng như trung gian.

2 Likes

(Y) cảm ơn anh đã trả lời thắc mắc của e :smiley: nhưng cái này là chuyển ‘địa chỉ’ anh nhỉ

http://ref.x86asm.net/coder32.html tham khảo lệnh x86/x64.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?