1樓:匿名使用者
;buffer db 20 dup(?)
;buffer 00 00 12 00 00 00 00 00 00 00
;buffer 00 00 00 00 00 00 00 00 00 00
;buffer 是前面定義的變數名
;mov buffer[bx+si],dl
設dl=12h
如果bx=1,si=1;將dl的值存入buffer[2]中,以[0]作為起始算 如上所示
add buffer[bp+di+4],10
這句因為10不是暫存器所以編譯器不知其大小,要加byte ptr,
add byte ptr buffer[bp+di+4],10
byte ptr 單位元組存入 al 如上圖取一個單元00
word ptr 位元組存入 ax 取二個單元00 00 來存 高位在右
mov byte ptr[1000h],0 ;
2樓:匿名使用者
ptr 屬性操作符,用於指定運算元的型別屬性,已達到一條指令中的運算元的型別匹配。
mov byte ptr[1000h],0這條指令,如果把byte ptr去掉,計算機就無法識別,這條指令是進行位元組操作、還是字操作、還是雙字操作,不知道是把0當做00h還是0000h還是00000000h。ptr就是起到這個作用。
它還可以用來強行轉換變數的型別。例如,資料段中有以下**a db 56h
db 78h
**段中mov ax,a指令會報錯,因為型別不匹配。
改成 mov ax, word ptr a即可。執行後(ax)= 7856h
3樓:匿名使用者
加byte好像是暫時以位元組形式訪問,下面的夜應該沒有錯,彙編書上都有這方面的介紹的,你可以先看看8051,相對簡單一些,然後再看8086的
反彙編問題,反彙編問題
這兩個反匯編出來的語句是一樣的。1.你這是8051系列微控制器的彙編,我想你是知道這一點的。2.你用的工具採用了按字 16個二進位制位也就是兩個位元組 的方式顯示資料,而且是高位元組在前。也就是說你給的兩條指令,如果按51的傳統來看的話應該分別是 21 ff 和 21 00,其中21 是指令 mov...
彙編中堆疊的理解
你可以把棧理解成一個暫時存放東西的東西 比如你想用ax這個暫存器,但是又不想把ax裡原來的資料弄丟了這時就可以用棧了 先用push指令把ax壓入棧頂 然後就可以用ax這個暫存器了,用完之後用pop指令把原先壓倒棧裡的ax裡的資料彈出來 對於這個棧,在 8086 cpu 裡有兩個專用的暫存器 ss 和...
彙編的朋友來下小問題
本程式通過編譯,執行正確 code segment assume cs code,ds codestart mov cx,10 行數mov dx,cx 第一行第一個字元座標dec dl line xor bh,bh 頁號mov ah,2 置游標位置 int 10h push dx mov dl,mo...