我正在制作一個 32 位保護模式程式集的作業系統,并且需要增加(或減少)一個變數。我的變數定義如下:
Var: db 1
我正在嘗試像這樣增加它:
mov ebx, [Var]
inc ebx
mov [Var], ebx
但是,變數增加了一個大于 1 的值。為什么會發生這種情況以及如何解決它。
uj5u.com熱心網友回復:
您的問題是您定義Var為一個位元組大小的變數,但是您對其進行操作就好像它是一個雙字大小的變數一樣。這會導致您在變數周圍讀取/寫入不相關的位元組,從而導致您觀察到奇怪的數字。
要解決此問題,請始終對具有正確資料大小的資料進行操作。例如,做
movzx ebx, byte [Var]
inc ebx
mov [Var], bl
注意不對稱:我們可以使用mov bl, byte ptr [Var],但是寫入部分暫存器(即bl是 的一部分ebx)很慢。該指令movzx確保寫入完整的暫存器,同時僅從記憶體中獲取單個位元組。
或者更簡單
inc byte [Var]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495910.html
