汇编查表算法
❶ 汇编语言里面的查表法是什么意思啊。在单片机里面是怎么运行的啊~~~~
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