2012-08-16 12 views
1

我已將特定數據存儲在內存位置0x4000。我想從那裏傳遞一個字節到內存位置0xb800,以便數據打印在屏幕上。當我嘗試存儲在0xb800:0時,會出現問題我將假設的第一個字節是0x4000:0。我作爲例子的代碼如下:如何將字節從16位程序集中的其他位置傳送到視頻內存?

mov ax, 0xb800 
mov es, ax 
mov byte [es:0], 'A' 

編譯沒有問題,運行完美,但我正在努力適應在NASM拋出「無效段重載」的錯誤。這裏是我的非工作代碼:

mov ax, 0xb800 
mov es, ax 
mov byte [es:0], byte [0x4000:0] 

是否有可能得到0x4000的單字節:[偏移]和飼料它0xb800:使用ES段[偏移]?如果是這樣,怎麼樣?

回答

1

你可以做到這一點,但你不能像你一樣用一條指令來做到這一點。你需要使用其他段寄存器,如ds,加上中間寄存器(al這裏):

mov ax, 0x4000 
mov ds, ax 
mov ax, 0xb800 
mov es, ax 
mov al, [ds:0] 
mov [es:0], al 

請注意,如果你已經有了ds指出別的地方,那麼你就必須考慮到太(如通過保存和恢復它)。

+0

謝謝!它工作完美。 – NorthStyling 2012-08-16 03:29:11

相關問題