2015-07-03 13 views
5

Tôi mới để lắp ráp và tôi đang cố gắng để hiểu Linux 0.01 đang bootloader nhưng tôi đã bị mắc kẹt ở phần này (tại rất beggining :)):lặp lại hướng dẫn mov x86

.globl begtext, begdata, begbss, endtext, enddata, endbss 
.text 
begtext: 
.data 
begdata: 
.bss 
begbss: 
.text 

BOOTSEG = 0x07c0 
INITSEG = 0x9000 
SYSSEG = 0x1000   | system loaded at 0x10000 (65536). 
ENDSEG = SYSSEG + SYSSIZE 

entry start 
start: 
    mov ax,#BOOTSEG 
    mov ds,ax 
    mov ax,#INITSEG 
    mov es,ax 
    mov cx,#256 
    sub si,si 
    sub di,di 
    rep 
    movw 
    jmpi go,INITSEG 

Mã này (như đã giải thích ở source comments copies) bộ tải khởi động đến vị trí mới và tiếp tục thực hiện từ go. rep theo sau là mov nên thực hiện việc này (sao chép một phần), nhưng thay vào đó hãy sử dụng hướng dẫn mov {w}.

rep 
movw 

Trong mỗi cuốn sách tham khảo cho x86 Tôi nhìn đại diện được sử dụng với các hướng dẫn chuỗi.

Có thể đại diện được sử dụng với tất cả hướng dẫn chuyển dữ liệu hoặc chỉ dẫn chuỗi và nếu vậy tại sao nó không được đề cập trong sách hướng dẫn tham khảo?

Trả lời

4

Điều này rất có thể chỉ là cách trình biên dịch cụ thể mã được viết để thực hiện lệnh này mặc dù nó được thừa nhận là lẻ. Thông thường, hãy tìm điều này là movsb, movsw hoặc movsl từ movs là ký hiệu từ Intel.

Đây là, trên thực tế, di chuyển một "chuỗi", mặc dù nó chỉ đơn giản là một tập hợp các byte tùy ý. Cụ thể hơn, bạn có thể nhận thấy mov cx,256 trước này. Mã opcode này là movw sẽ di chuyển từ 16 bit, di chuyển hiệu quả hơn khu vực khởi động 512 byte.

Cập nhật:

Câu hỏi của bạn làm tôi hết sức tò mò vì tôi đã không chạy qua hướng dẫn mã hóa theo cách này. Điều thú vị là tôi đã tìm thấy một số forum entry dường như chỉ ra rằng rep movw là định dạng AS86 và thực tế được lắp ráp thành rep movsw.

+0

Vì vậy, trong khi lắp ráp _rep movw_ sẽ được dịch sang _rep movws_ opcode? –

+0

'rep movsw'. Mặc dù, một lần nữa, đó là một ký hiệu thực sự kỳ quặc (một trong câu hỏi ban đầu của bạn). Bạn có biết người lắp ráp được viết cho ai không? –

Các vấn đề liên quan