想问一下用汇编语言写单片机程序时,怎么定义一个数组变量?

DB不行编译不通过... DB不行 编译不通过 展开
 我来答
zhxiufan
2016-01-11 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38381
国家科技进步奖

向TA提问 私信TA
展开全部

在单片机中,如果用汇编语言编程,内存的规划都需要程序员自己来组织,数组变量的定义可以通过定义首地址的方式来实现,举例说明如下:


LEDDIS EQU 30H        ;显示内容放在30H开始的内存中,相当于数组的首地址

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

    MOV TMOD,#01H


    MOV TH0,#HIGH(65536-5000)


    MOV TL0,#LOW(65536-5000)


    SETB TR0


    SETB ET0


    SETB EA


    MOV R2,#0


LOOP:

    MOV A,TL0    ;以下程序随机读取定时器的值,转换为BCD码供显示


    MOV B,#10


    DIV AB


    SWAB A,B


    MOV 30H,A


    SWAP A,B


    MOV B,#10


    DIV AB


    SWAB A,B


    MOV 31H,A


    MOV A,B


    MOV 32H,A


    MOV A,TH0


    MOV B,#10


    DIV AB


    SWAB A,B


    MOV 33H,A


    SWAP A,B


    MOV B,#10


    DIV AB


    SWAB A,B


    MOV 34H,A


    MOV A,B


    MOV 35H,A


    LCALL DELAY    ;延时约100毫秒变化一次数据


    LJMP LOOP


DELAY:

    MOV R3,#200


DLY1:

    MOV R4,#250


    DJNZ R4,$


    DJNZ R3,DLY1


    RET


T0ISR:            ;中断扫描显示

    CLR TR0


    MOV TH0,#HIGH(65536-5000)


    MOV TL0,#LOW(65536-5000)


    SETB TR0


    MOV R0,#30H


    MOV A,R2        ;根据数组下标取显示数据


    ADD A,@R0


    MOV R0,A

    MOV A,R2        ;以下程序根据数组下表确定显示位置


    JNZ T001


    MOV P2,#01H


    SJMP DIS


T001:

    DEC A


    JNZ T002


    MOV P2,#02H


    SJMP DIS


T002:

    DEC A


    JNZ T003


    MOV P2,#04H


    SJMP DIS


T003:

    DEC A


    JNZ T004


    MOV P2,#08H


    SJMP DIS


T004:

    DEC A


    JNZ T005


    MOV P2,#10H


    SJMP DIS


T005:

    MOV P2,#20H


DIS:

    MOV DPTR,#TAB


    MOV A,@R0


    MOVC A,@A+DPTR


    CPL A


    MOV P0,A


    INC R2


    CJNE R2,#6,T0E


    MOV R2,#0


T0E:

    RETI

TAB:

          DB    3FH,06H,5BH,4FH,66H ;01234


          DB    6DH,7DH,07H,7FH,6fh ;56789

    END

符桂兰析罗
2020-05-22 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:34%
帮助的人:790万
展开全部
额,数组变量是c语言里使用的,汇编语言没有这个,用equ伪指令分配变量地址即可,如果你学了更多,也可以尝试用cblock来定义一串变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
NJGQZF
推荐于2018-03-02 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3165
采纳率:0%
帮助的人:1208万
展开全部
严格的说,汇编语言不支持显式数组变量,就是说你想定义一个任意数组,然后用下标访问是不行的。但汇编语言支持隐式数组变量,其实就是对变量表间接寻址,使用间址寄存器做下标访问“数组”。举例如下:
NUMA EQU 40H
NUMB EQU 60H
MOV R0,#40H
MOV A,@R0;取NUMA数组第0个元素倒A
追问
你的意思就是先设置一个变量,在采用基址加变值寻址吗
追答
只能这样啊,隐含的也相当于数组。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式