8051指令集和組合語言程式設計

2022-08-09 08:57:10 字數 2747 閱讀 4274

8051微控制器有255條指令。基本上可以分為下面幾大類。下面給出各個類別的速記。

1.資料轉移類

mov(move):對內部資料暫存器ram和特殊功能暫存器sfr的資料進行傳送;(沒有mov rn,rn這樣的定址方式)

movc(move code)讀取程式儲存器資料**的資料傳送;(只有兩條:movc a,@a+dptr和movc a,@a+pc)

movx (move external ram)對外部ram的資料傳送;

xch (exchange) 位元組交換;

xchd (exchange low-order digit) 低半位元組交換;

push (push onto stack) 入棧;

pop 

(pop from stack) 出棧;

2.算數運算類

add(addition) 加法;

addc(add with carry) 帶進製加法;

subb(subtract with borrow) 帶借位減法;

da(decimal adjust) 進行bcd壓縮碼加法運算後,做十進位制調整;

inc(increment) 自增;(有inc dptr這條指令)

dec(decrement) 自減;(沒有dec dptr這條指令)

mul(multiplication、multiply) 乘法;(積的高8位放入b中,低8位放入a中)

div(division、divide) 除法;

(商放在a中,餘數放在b中)

3.邏輯運算類

anl(and logic) 按位與

orl(or logic) 按位或;

xrl(exclusive-or logic) 按位異或;

clr(clear) 清零;

cpl(complement) 取反;

下面這5條指令的運算元只能是a。

rl a(rotate left) 迴圈左移;

rlc a(rotate left throught the carry flag) 帶進製迴圈左移;

rr a(rotate right) 迴圈右移;

rrc a(rotate right throught the carry flag) 帶進製迴圈右移;

swap a(swap) 低4位與高4位交換;

4.控制轉移類

acall(absolute subroutine call)子程式絕對呼叫;

lcall(long subroutine call)子程式長呼叫;

ret(return from subroutine)子程式返回;

reti(return from interruption)中斷服務子程式返回;

sjmp(short jump)短轉移;

ajmp(absolute jump)絕對轉移;

ljmp(long jump)長轉移;

cjne (compare jump if not equal)比較不相等則轉移;

djnz (decrement jump if not zero)減1後不為0則轉移;

(intel他媽的為什麼不把位元組指令和位指令做成一致的規律)

jz (jump if zero)a的結果為0則轉移;

jnz (jump if not zero)a結果不為0則轉移;

jc (jump if the carry flag is set)c為1則轉移;

jnc (jump if not carry)c為0則轉移;

jb (jump if the bit is set)位為1則轉移;

jnb (jump if the bit is not set)位為0則轉移;

jbc(jump if the bit is set and clear the bit)位為1則轉移,並清除該位;

nop (no operation) 空操作;

5.位操作指令

clr (clear)位清零;

setb(set bit) 置位1 

組合語言是由指令和偽指令一起構成的。下面給出常用的偽指令

8種常用偽指令

1.org  16位位址;

此指令用在原程式或資料塊的開始,指明此語句後面目標程式或資料塊存放的起始位址.

2.[標號:] db 位元組資料項表;

將項表中的位元組資料存放到從標號開始的連續位元組單元中。例如:seg: db 88h,100,「7」,「c」

3.[標號:]dw   雙位元組資料項表;

定義16位位址表,16位址按低位位址存低位位元組,高位位址存高位位元組。

例如:tab: dw 1234h,7bh

4.名字 equ 表示式 或名字=表示式;

用與給乙個表示式賦值或給字串起名字。之後名字可用做程式位址,資料位址或立即數字址使用。名字必須是一字母開頭的字母數字串。

例如:count=10 或 space equ 10h

5.名字 data 直接位元組位址;

給8位內部ram單元起個名字,名字必須是一字母開頭的字母數字串。同一單元可起多個名字。

例如:error data 80h

6.名字 xdata 直接位元組位址;

給8位外部ram起個名字,名字規定同data偽指令。

例如:io_port xdata 0cf04h

7.名字 bit 位指令;

給一可位定址的位單元起個名字,規定同data偽指令。

例如:swt bit 30h

8.end;

指出源程式到此結束,彙編對其後的程式語句不予理睬。源程式只在主程式最後使用乙個end。

8086組合語言指令集

mov 功能 把源運算元送給目的運算元語法 mov 目的運算元,源運算元格式 mov r1,r2 mov r,m mov m,r movr,data xchg 功能 交換兩個運算元的資料語法 xchg 格.8086 8088組合語言指令集 資料傳送指令集 mov 功能 把源運算元送給目的運算元 語法...

組合語言浮點數指令集

浮點數載入指令 助記符 運算元 功能 fld memory real 將儲存器中的實型壓人堆疊 fild memory integer 將儲存器的整型數值轉化為浮點數並壓人堆疊 fbld memory bcd 將儲存器的bcd碼轉化為浮點數並壓人堆疊 fld st num 將浮點型暫存器中的數值壓入...

組合語言浮點數指令集

浮點數載入指令 助記符 運算元 功能 fld memory real 將儲存器中的實型壓人堆疊 fild memory integer 將儲存器的整型數值轉化為浮點數並壓人堆疊 fbld memory bcd 將儲存器的bcd碼轉化為浮點數並壓人堆疊 fld st num 將浮點型暫存器中的數值壓入...