我們通常使用訪問記憶體單元的語句位 mov ax,ds:[0]
我們也可以使用這樣的形式訪問記憶體單元 mov ax,ds:[bx]
我們稱bx位偏移位址暫存器,這裡只能使用bx暫存器
bx成為偏移位址暫存器
inc指令表示將目標運算元加1
這段指令的含義便是將0,1,2,3,4,5…輔助到乙個記憶體中,我們使用了cc: mov ds:[bx],cl 這個指令中的cc表示乙個標號,可以說是這個記憶體的位址assume cs:code
code segment
mov ax,2000h
mov ds,ax
mov bx,1000h
mov cl,0
cc: mov ds:[bx],cl
inc cl
inc bx
jmp cc
code ends
end
loop指令 這個指令和jmp指令也是相同的,都可以進行跳轉,我們通常使用loop指令來進行迴圈,我們使用這個指令可以限制迴圈的次數,將迴圈的次數儲存在cx暫存器中,沒迴圈一次cx暫存器便會減一,當cx為0時便退出了迴圈,下面是乙個例子進行說明。
下面使用彙編指令做一道算術題 123x456的值assume cs:code
code segment
mov ax,2000h
mov ds,ax
mov cx,4
mov bx,1000h
mov dl,0
cc: mov ds:[bx],dl
inc dl
inc bx
loop cc
code ends
end
在通過迴圈是我們使用p命令跳過迴圈assume cs:code
code segment
mov cx,123
mov bx,0
num:add bx,456
loop num
code ends
end
程式設計題將ffff:0ffff:f記憶體單元的資料存放在0:2000:20f中
es暫存器 也是和資料有關的暫存器 這個暫存器也是段位址暫存器和ds的作用是一樣的,為什麼要有ds和es兩個資料段位址暫存器哪?assume cs:code
code segment
mov bx,0
mov cx,8
num:mov ax,0fffh
mov ds,ax
mov ax,ds:[bx]
mov dx,20h
mov ds,dx
mov ds:[bx],ax
inc bx
inc bx
loop num
code ends
end
比如上面那個例子中我們需要設定兩個段位址暫存器,而我們的做法是將ds相互轉換的,這種方式是很複雜的而且浪費記憶體空間,因此我們可以通過es暫存器來改寫上面的**。
我將es當做原目的資料位址,將ds當做目的資料段位址的assume cs:code
code segment
mov bx,0
mov cx,8
mov ax,0ffffh
mov es,ax
mov ax,20h
mov ds,ax
num:mov ax,es:[bx]
mov ds:[bx],ax
inc bx
inc bx
loop num
code ends
end
使用es儲存ffffh,使用ds儲存20h
IL 彙編學習筆記(四)
原文 建立 windows form 程式 下列 給出乙個簡單的例子,其中簡單的設定了窗體的一些屬性,backcolor,text 和 windowstate.namespace myform 以下是其構造器的定義 method public specialname rtspecialname in...
彙編筆記(四)
程式的編寫 2 3abc segment mov ax,2 add ax,ax add ax,ax abc ends endends表示段的結束,end表示程式的結束 2012 3 18 loop指令 1 loop和cx的相互配合 mov cx,迴圈次數 s 迴圈執行的程式段 loop s 相當於c...
組合語言學習筆記 四
存放資料,最大容量ffffh 16bit暫存器 可以分割成高八 ah 低八 al 兩個暫存器 為什麼能分割?cpu最低讀取單位為位元組 8bit,且 8086 的暫存器為 16 位暫存器,8086 cpu 可以處理 兩種尺寸的資料 字 1byte 8bit,8 位暫存器 位元組 2byte 16bi...