01/10/2018, 13:43

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

rogp10 viết 15:45 ngày 01/10/2018

tại sao lại chuyển dữ liệu của cs vào ax

Ngay sau đó là câu MOV ES, AX 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.

Hoang viết 15:46 ngày 01/10/2018

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

rogp10 viết 15:57 ngày 01/10/2018

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

Bài liên quan
0