汇编语言编写一简单查表程序

如题所述

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我。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-02
;本程序通过编译,运行正确。
datasegment
mes1db'92,85,74,81,70,68,65,78,54,43',0ah,0dh
db'94,100,83,88,79,83,79,69,62,60',0ah,0dh,'$';定义用于显示的字符串
mes2dw92,85,74,81,70,68,65,78,54,43
dw94,100,83,88,79,83,79,69,62,60;存放20个十进制数
elementsequ($-mes2)/typemes2;元素个数
mes3db'averagesore=$'
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
leadx,mes1;第一行显示20个同学的成绩
movah,9
int21h
leadx,mes3;第二行显示averagescore=求得的平均分数。
movah,9
int21h
cld
leasi,mes2
movcx,elements
xorax,ax
adding:addax,[si];累加20个同学的分数
incsi
incsi
loopadding
movbl,elements
divbl;计算20个分数的平均值
xorah,ah
movbl,10
divbl
orax,3030h;把商和余数转换成十进制显示的ascii码
movdx,ax
movah,2;以十进制值表示将平均值十位数显示在屏幕上
int21h
movdl,dh
movah,2;以十进制值表示将平均值个位数显示在屏幕上
int21h
movah,4ch;结束程序
int21h
codeends
endstart;编译到此结束
程序运行结果如下:
92,85,74,81,70,68,65,78,54,43
94,100,83,88,79,83,79,69,62,60
averagesore=75
第2个回答  2010-05-24
表格是
TAB:DB 0FFH,0FFH
A是需要查询表格第A个的值
MOV DPTR, #TAB
MOVC A,@A+DPTR
A中的就是查表得的值
相似回答