mov dest,src; dest=src (把src傳送給dest)
mov al,[0]; 將某一記憶體單元送到暫存器,[0]表示ip的值,即偏移位址的值,他的段位址自動取ds暫存器中的資料
xchg opr1,opr2; 交換opr1和opr2的值,允許在通用暫存器之間,通用暫存器和儲存器之間交換資料
bswap reg; 將32位暫存器中,第乙個位元組和第四個位元組互換,第二個位元組和第三個位元組互換
mov eax,44332211h;
bswap eax; eax=11223344h
push src; 將源運算元壓入棧
pop dest; 將源算子彈出棧
lea reg,mem; 將源運算元的有效位址傳入暫存器
lea eax,[ebx]; 將ebx內容的有效位址傳入eax中
align偽指令將乙個變數對齊到位元組邊界、字邊界、雙字邊界或段落邊界。
align bound;
bound 可取值有:1、2、4、8、16
空出若干個位元組,從下乙個能被bound整除的位元組開始
add ax,bx; ax=ax+bx 把ax和ba相加傳給ax
jmp 2ae3:3; jmp cs:ip,cs=2ae3,ip=0003
jmp ax; jmp 暫存器,將暫存器的值賦給ip,ip=ax的值
inc bx; bx的內容加一
mov cx=11
s:add ax,ax
loop s
;loop表示迴圈,cx存放迴圈次數,cx為0時迴圈結束
mov al 01100011b
and al 00111011b
;and執行按位與運算,執行完之後al的值為00100011b
mov al 01100011b
or al 00111011b
;or執行按位或運算,執行完之後al的值為01111011b
sub bx,[0]
;假設bx=2c34,1000:0為1122
;結果為:2c34-1122=1b12
dw 0123h,0456h,0789h
;dw為定義字型的資料
db 'unix'
;定義字元資料,通過ascii碼傳入記憶體
;計算100001/100
mov dx,1
mov ax,86a1h
mov bx,100
div bx
;執行完之後,(ax)=03e8h(即商1000)(dx)=1(餘數為1)
;計算1001/100
mov ax,1001
mov bl,100
div bl
;執行完之後,(al)=0ah(即商1000)(ah)=1(餘數為1)
dd 1
;實際資料為00000001h,dd定義雙位元組
db 3 dup(0,1,2)
;相當於定義了9個位元組 db 0,1,2,0,1,2,0,1,2
;將dup中的東西重複三遍
start: mov ax,offset start
s: mov ax,offset s
;獲得start和s的偏移位址
mov ax,2000h
mov ds,ax
mov bx,0
s: mov cl,[bx]
mov ch,0
jcxz ok //檢查cx的值,為0則查詢結束,跳向ok標誌位址
inc bx
jmp short s //查詢失敗則迴圈繼續查詢
ok: mov dx,bx
mov ax,4c00h
int 21h
;在cx==0時跳向某個標號,cx!=0時繼續向下執行**
dec bx
;bx=bx-1的意思,和inc相反
ret
;用棧裡的資料修改ip的值
;相當於
;(ip)=((ss)*16+(sp))
;(sp)=(sp)+2
retf
;用棧裡的資料修改cs和ip的值
;相當於
;(ip)=((ss)*16+(sp))
;(sp)=(sp)+2
;(cs)=((ss)*16+(sp))
;(sp)=(sp)+2
;相當於先彈出ip在彈出cs
;將當前ip壓入棧中,並轉移到指定指令位置
mov al,100
mov bl,10
mul bl
;計算100*10的結果存在ax中,如果是16位乘法,高位存在dx中
;相當於加法運算
mov ax,2
mov bx,1
sub bx,ax
abx ax,1
;執行時,(ax)=4,abc指令等價於 (ax)+1+cf=2+1+1=4,算上高位的進製或借位
;相當於借位減法
mov bx,1000
mov ax,003e
sub bx,2000
sbb ax,0020
;相當於(ax)=(ax)-(bx)-cf
;兩個運算元相減,不保留結果,修改相關的標誌暫存器的值
mov ax,8
mov bx,3
cmp ax,bx
;執行之後,(ax)=8,zf=0,pf=1,sf=0,cf=0,of=0
指令
含義相關的標誌位
je等於則轉移
zf=1
jne不等於則轉移
zf=0
jb低於則轉移
cf=1
jnb不低於則轉移
cf=0
ja高於則轉移
zf=0且cf=0
jna不高於則轉移
zf=1或cf=1
;mov指令相當與((es)*16+(di))=((ds)*16+(si))
;將ds:si中的位元組傳送給es:di,並根據df暫存器判斷正向還是逆向傳遞
;mov指令相當與((es)*16+(di))=((ds)*16+(si))
;將ds:si中的字傳送給es:di,並根據df暫存器判斷正向還是逆向傳遞
注:movsw傳送的是字單元,movsb傳輸的是位元組單元
;rep配合movsb和movsw使用
;rep movsw相當於
;s:movsw
; loop s
;rep根據cx中的值迴圈movsw的次數
;cld:將df置0
;std:將df置1
;將標誌暫存器的值壓入棧或者彈出
;將暫存器或記憶體單元的位址左移一位
;將移出的最後一位存入cf暫存器
;最低位用0補上
mov al,01001000b
shl al,1
;執行完之後,(al)=10010000b,cf=0
;移動的位數大於1的情況下,必須把移動的位數放入cl中,然後執行shl ax,cl
;shr為將暫存器或記憶體單元的位址右移一位,他和shl用法相同,
;sti:設定if=1
;cli:設定if=0
關於組合語言中cmp指令的小筆記
cmp是比較指令,cmp的功能是相當於減法指令,只是不儲存結果.cmp指令執行後,將對標誌暫存器產生影響.其他相關指令通過識別這些被影響的標誌暫存器來得知比較結果.cmp指令格式 cmp 操作物件1,操作物件2 功能 計算操作物件1 操作物件2 但不儲存結果,僅僅根據計算結果對標誌暫存器進行設定.比...
ARM彙編指令集1 需要的基礎知識
arm彙編指令集1 需要的基礎知識 參考朱有鵬arm裸機程式設計 前言 學習的過程,就是乙個先模仿,然後再進行創新的過程。學習朱老師的課程,真的完全從0開始學習,以前有很多的地方真的並沒有理解,等全部學習完後再進行一次總結與感謝。1 指令與偽指令 1 彙編指令是cpu機器指令的助記符,經過編譯後會得...
關於基礎IO部分你需要知道的
基礎io c語言學的 標準庫的io 介面 就是檔案操作 fopen fseek 跳轉讀寫位置 fwrite,fread,fclose 關閉檔案 fprintf,sprintf fopen file,r fget 從乙個檔案流中讀取一行資料 file fopen const charfilename,...