1樓:
我的分析不一定對,僅供參考。
基本思路是從r2r3處取偏移量,乘以2(每個資料為2個位元組)通過a加給dptr,r2加給dpl,r3加給dph,再從dptr處取數,交給a,再給r2r3.
mov dptr,#tab 表的首地址給dptr
mov a,r3 r3的值給a
clr c c置零
rlc a a乘2(左移一位後補零)
xch a,r2 a和r2交換數值
rlc a a左移一位,即乘2
xch a,r2 a和r2交換。至此,相當於r3乘2後給了r2,r2裡存的是r3.乘2後的數,a裡是r2乘2後的數。
add a,dpl dpl的值加給a
mov dpl,a;調整dpl,dph 相當於把原r2裡的數乘2當做偏移地址加給dpl
mov a,dph
addc a,r2
mov dph,a 相當於把原r3裡的數乘2當做偏移地址加給dph
clr a
movc a,@a+dptr;查表
mov r2,a;第一位元組
clr a
inc dptr
movc a,@a+dptr;查第二位元組
mov r3,a
rettab: dw ***xh;共1024個資料項
dw ***xh
......
dw ***xh
因為查表的數字是雙位元組,所以低位給r2,高位給r3.
2樓:匿名使用者
查表程式是要從一個專門的資料區內找到你所需要的那個數。這個數在表中的位置,由表首地址、數在表內相對錶首地址的偏移量、一個資料的位元組數等因素來確定。
具體方法是:將表首地址放入dptr中,偏移量放入a中,用查表指令movc a,@a+dptr;來完成從資料區取數。有如下幾種情況:
1、如果資料區的長度不超過256個位元組(累加器a的容量之內),且資料是單位元組的,則不需要另外處理;
2、因為如果資料區的長度不超過256個位元組,但資料是雙位元組的,需要將偏移量乘2,第一次讀出一個位元組儲存,將地址加1後再讀第二位元組(類推:一個資料是n位元組,則偏移量乘n,每次讀出一個位元組儲存,將地址加1後再讀下一位元組,直到一個數全部讀出)。
3、如果資料區的長度超過了256個位元組,因為a已經存放不了256以上的偏移量,此時需要事先將偏移量加入到dptr中去(即資料的真實地址全部放到dptr中了),再將a清零後使用查表指令。同樣也要如上區分單位元組數和多位元組數。
你所給例就是資料區的長度超過了256個位元組,且資料為雙位元組的情況。程式解釋如下,供參考。
mov dptr,#tab ;表首地址入dptr
mov a,r3
clr c
rlc a ;偏移量的低8位乘2在a中,移出的最高位在c中
xch a,r2 ;乘2後的偏移量的低8入r2中,偏移量的高8位入a中
rlc a;偏移量的高8位乘2在a中
xch a,r2 ;偏移量的高低位元組歸位,至此完成了偏移量乘2
add a,dpl
mov dpl,a;
mov a,dph
addc a,r2
mov dph,a;將偏移量加到dptr中,至此dptr中就是資料第一個位元組的實際地址
clr a ;a清零,因為偏移量已經加入,dptr內容不需要再修正。
movc a,@a+dptr;讀資料第一個位元組
mov r2,a;讀資料第一個位元組存入r2中
clr a ;a清零
inc dptr ;地址加“1”,準備讀下一個位元組
movc a,@a+dptr
mov r3,a 讀資料第一個位元組存入r3中
rettab: dw ***xh;tab為表首地址,共1024個雙位元組資料項,共2048個位元組
dw ***xh
......
dw ***xh
微控制器加法指令,51微控制器的加法指令到底怎麼加啊,例如12A4H 0FE7H
一 1 微控制器全稱單片微型計算機,就是將cpu 儲存器 i o口等整合在乙個晶元內 2 設定工作模式,設定是否開中斷,置入計數初值 3 p3.0,rxd 序列輸入 p3.1,txd 序列輸出 p3.2,int0 外部中斷0 p3.3,int1 外部中斷1 p3.4,t0 定時器0外部輸入 p3.5...
微控制器加法指令只怎麼執行的,51微控制器的加法指令到底怎麼加啊,例如12A4H 0FE7H
a,30h是將30h記憶體中數加a放到a的儲存單元。84h 8dh,d是13,加4為17,0到15即0到f這16個數,結果為1,進位標誌c為有效,然後加進8 8 c 17,還是保留1並進位,所以最後是11h。psw是微控制器內部標誌暫存器,是微控制器執行必不可少的基本運算基礎,cy是進位標誌,是位元...
51微控制器乘法指令mul,求大蝦
a就是累加器,b是乙個專用暫存器,通常用來儲存運算結果的溢位值如加法 乘法的高八位,除法的餘數等。你前面還要賦值,這樣你的乘法指令還可以執行。a表示4eh這個數,b表示5dh這個數。這句的意思是,a乘b,再把值存在a中 a就是累加器acc b是b暫存器。這個執行完以後,b放結果高8位,a放結果低8位...