關於基礎彙編指令的部分合集 均以例項展示

2021-10-03 22:10:52 字數 4200 閱讀 3538

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,...