
-------------------下面是R2R3乘以2
MOV A, R3
CLR C
RLC A
MOV R3, A
XCH A, R2
RLC A
XCH R2, A
------------------下面是表首地址加上R2R3
MOV DPTR, #TAB2
ADD A, DPL (R2R3)+(DPTR)→(DPTR)
MOV DPL, A
MOV A, DPH
ADDC A, R2
MOV DPH, A
------------------下面是查表,查出两个字节
CLR A
MOVC A, @A + DPTR
MOV R2,A
CLR A
INC DPTR
MOVC A, @A + DPTR
MOV R3,A
RET
----
这个程序,是根据两个字节的数据来查表,查出的,也是两个字节。
如果先弄懂了一个字节的查表程序,看这个程序,也就没有什么难的了。
生成多项式:G(X)=X^8+X^2+X+1转化为100000111 =0x1070#define POLY(0x1070U <<3)
u8 crc8(u16 data)
{
int i
for(i = 0i <8i++) {
if (data &0x8000)
data = data ^ POLY
data = data <<1
}
return (u8)(data >>8)
}
是否可以解决您的问题?
查表对号输出品名DATAS SEGMENT运行准确
MESS1 db 0dh,0ah,'Input the stock number: $'
TABLE db '05','. Excavators'
db '08','. . .Lifters'
db '09','. . .Presses'
db '12','. . . Valves'
db '23','. Processors'
db '27','. . . .Pumps'
MESS2 DB 0dh,0ah,'Not in table!$'
mess3 db 0dh,0ah,'Continue (Enter to end)? $'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
begin:lea dx,MESS1
mov ah,09输出提示信息
int 21h
call input
mov bl,al
call input
mov ah,al
mov al,bl
lea si,table
mov cx,6
comp:cmp ax,[si]
jz found
add si,14
loop comp
lea dx,MESS2未找到!
mov ah,09
int 21h
jmp exit
found:cld
mov cx,12
inc si
inc si
here:lodsb
mov ah,0eh
int 10h显示相应品名
loop here
lea dx,mess3是否继续?
mov ah,09
int 21h
mov ah,0
int 16h
cmp al,0dh
jnz begin
exit:
mov ah,4ch
int 21h
input:mov ah,0
int 16h
cmp al,'0'
jb input
cmp al,'9'
ja input
mov ah,0eh
int 10h
ret
CODES ENDS
END START
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)