匯編查表演算法
❶ 匯編語言裡面的查表法是什麼意思啊。在單片機裡面是怎麼運行的啊~~~~
51單片機匯編語言有一條查表指令是:MOVC A, @A+DPTR
它不是單獨使用的,要和 DB 偽指令配套使用。
例如:若累加器A中有一個0~9的數,請用查表法求出該數的平方值,設平方表表頭地址為1000H。
程序如下:
;-------------------------------------
MOV DPTR,#1000H
MOVC A,@A+DPTR
……
ORG 1000H
DB 0, 1, 4, 9, 16, 25......
;-------------------------------------
「DB」,在ROM 1000H中,順序存放了一系列的「平方」數據。
MOVC A,@A+DPTR指令中A如果等於0,就會在「平方」數據中取出第0個,就是0;
MOVC A,@A+DPTR指令中A如果等於1,就會在「平方」數據中取出第1個,就是1;
MOVC A,@A+DPTR指令中A如果等於2,就會在「平方」數據中取出第2個,就是4;
MOVC A,@A+DPTR指令中A如果等於3,就會在「平方」數據中取出第3個,就是9;
……
MOVC A,@A+DPTR指令中A如果等於9,就會在「平方」數據中取出第9個,就是81。
❷ 51單片機匯編語言如何通過查表的方法找出下面表中任意一位數
找哪一個數?假設找38H
MOV DPTR , #TABLE
LOOP:
MOV A,#0
MOVC A,@A+DPTR ;查表
CJNE A,#38H,LOOP ;不是需要的,返回,繼續
SJMP $ ;是它,踏步
❸ 匯編語言 查表法
。ORG 0000H;單片機開始的入口地址
?或LJMP主要跳轉到主
?。ORG 0030H;從0030地址
?表格數據DW 0000H,0001H,0008H,1,001 BH,0040H,007DH,00D8H,0157H,0200H;
主:啟動主程序
MOV DPTR,#0030H;數字#0030H進入的DPTR
MOV B,#6;數字放倒寄存器B
MOV,A,B,B放倒一個
在RL一個,留下;
MOVC A,@ A + DPTR,A加DPTR的內容分為A,
到R5的MOV R5的,一個;
MOV,A,B,B的含量成
在RL一個,留下;
公司A,甲,加上
MOVC A,@ A + DPTR;加DPTR的內容分為A
到R6的MOV R6的;
SJMP $;停機
完
❹ keil如何用匯編編寫如下一個用查表法的程序
;
RL A
MOV B, A
MOV DPTR, #TAB
MOVC A, @A + DPTR
MOV R7, A
MOV A, B
INC A
MOVC A, @A + DPTR
MOV R6, A
RET
TAB:
DW 0, 1, 4, 9, 16, 25, 36, 49, ..., 400 ; 平方數據表,樓主自己補全吧。
END
❺ 匯編語言怎麼查表
MOV DPTR,#TAB
MOV A,#17
MOVC A,@A+DPTR
❻ 怎麼才知道匯編指令對照的機器指令有什麼數學演算法可以互相轉換這匯編和機器指令
這是設計或生產晶元廠家規定的,你只要去查廠家該晶元的技術資料就可知的,一般為了推廣他的晶元廠家還會給你一個匯編工具軟體的,這軟體主要的目的就是把助記符(就是你說的匯編指令)對照編輯成機器指令用的。
❼ 單片機匯編查表指令
mov xp0,#0
mov dptr,#tp0
LOOP: mov a,xp0
movc a,@a+dptr
mov p2,a
inc xp0
mov a,xp0
cjne a,#80,LOOP %循環查表中每一個直接的值,一共80次%
ret
tp0: DB 030H,048H,048H,048H,048H,048H,030H,000H
DB 010H,030H,010H,010H,010H,010H,07CH,000H
DB 000H,038H,044H,004H,018H,020H,07CH,000H
DB 030H,048H,008H,010H,008H,048H,030H,000H
DB 008H,018H,028H,048H,07CH,008H,008H,000H
DB 03CH,020H,020H,038H,004H,024H,018H,000H
DB 078H,040H,040H,078H,048H,048H,078H,000H
DB 078H,008H,008H,008H,008H,008H,008H,000H
DB 030H,048H,048H,030H,048H,048H,030H,000H
DB 030H,048H,048H,038H,008H,048H,030H,000H
❽ 查表程序 匯編語言
;在數據區,以table 開始連續存放0-9的立方值,
;設任給一數x x在tab1單元,查表求x的立方值 並把結果存到tab2 要求輸入的數及最後結果要顯示在屏幕上
assume cs:code, ds:data
data segment
table dw 0, 1, 8, 27, 64, 125, 216, 343, 512, 729;
display db 0AH, 0DH, "Please input a number(0~9): ", '$'
tab1 db 5
db ?
db 5 p (0)
tab2 dw ?
dis db 3 p (Ɔ'), '$'
crlf db 0AH, 0Dh, '$'
data ends
code segment
start:
mov ax, data
mov ds, ax
mov dx, offset display
mov ah, 9
int 21h
mov dx, offset tab1
mov ah,10
int 21h
mov al, tab1+2
sub al, 30h
add al, al
sub bx, bx
mov bl, al
mov ax, table[bx]
mov tab2, ax
mov bl, 2
mov cl, 10
lp: div cl
add ah,30H
mov byte ptr dis[bx], ah
dec bl
sub ah,ah
cmp al, 0
jne lp
mov dx, offset crlf
mov ah, 9
int 21h
mov ah, 9
mov dx, offset dis
int 21h
exit: mov ax, 4c00h
int 21h
code ends
end start
PS:若有不明白的地方,可以追問
❾ 匯編語言編寫一簡單查表程序
0-9循環顯示,經驗證完全無誤。。謝謝採納。
ORG 0000H
MOV DPTR,#TAB ;DPTR此時指向0C0H,以後由於A值的不停加1會不停的往後指,在循環
MAIN:MOV R5,#0 ;給初值
MOV A,R5;A=0
LP: MOVC A,@A+DPTR ;查表
MOV P1,A; 顯示
MOV A,R5
INC A ;加1
MOV R5,A
LCALL DELAY ;延時
CJNE A,#10,LP ;是否 到9.
SJMP MAIN
DELAY:MOV R3,#255
DEL1: MOV R4,#255
DEL2: NOP
DJNZ R4,DEL2
DJNZ R3,DEL1
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共陽字元。0-9。
END 如有疑問,可以HI我。。
❿ 匯編查表怎麼寫 詳細的 最好有個例子
根據一個變數的大小,到一片順序排列的數據中,找出與其對應的一個,就是查表。
例子如下:
;-----------------------
DIS_ALL: ;共陽數碼管, P0:段, P2:反相位
MOV R2, #254 ;位選, 低電平有效
MOV R0, #D_BUF
MOV A, @R0
ADD A, #(TAB - $ - 3)
MOVC A, @A + PC ;查表指令
MOV P2, #255
MOV P0, A
MOV P2, R2
DJNZ R7, $ ;顯示1ms
DJNZ R7, $
MOV A, R2
RL A
MOV R2, A
INC R0
CJNE R0, #D_BUF + 6, $ - 19 ;顯示6位
MOV P2, #255
RET ;佔用時間約為6.2ms
;-----------------------
TAB: ;碼表
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H;0~7
DB 080H, 090H, 088H, 083H, 0C6H, 0A1H, 086H, 08EH;8~F
DB 040H, 079H, 024H, 030H, 019H, 012H, 002H, 078H
DB 000H, 010H, 0FFH ;0.~9. ' '
DB 08CH, 0BFH, 089H, 0C7H, 0A3H, 0AFH ;P,-,H,L,o,r
;=================================
參考:
http://hi..com/do_sermon/item/78693092ff197abd83d29584