首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MOV数据,数据重置目标寄存器?

为什么MOV数据,数据重置目标寄存器?
EN

Stack Overflow用户
提问于 2015-03-10 05:29:40
回答 1查看 132关注 0票数 0

我编写了以下汇编代码(用于8052软处理器),以便在我的Altera 2的8-7段显示器上显示一个数字:

代码语言:javascript
复制
mov HEX0, #0x98 ; show 9
mov HEX1, #0xC0 ; show 0
mov HEX2, #0xF9 ; show 1
mov HEX3, #0xF8 ; show 7
mov HEX4, #0x92 ; show 5
mov HEX5, #0x92 ; show 5
mov HEX6, #0x92 ; show 5
mov HEX7, #0xA4 ; show 2

HEXns的定义如下:

代码语言:javascript
复制
HEX0   DATA  091H ; Zero turns the segment on
HEX1   DATA  092H ; 
HEX2   DATA  093H ; 
HEX3   DATA  094H ; 
HEX4   DATA  08EH ;
HEX5   DATA  08FH ;
HEX6   DATA  096H ;
HEX7   DATA  097H ;

上面的代码本身工作得很好,但是当我使用下面的代码旋转数字时,所有的7段显示输出就好像HEXn寄存器被设置为0x00一样。

代码语言:javascript
复制
M0:
    wait(2)

    mov A, HEX0 ; store HEX0 in the accumulator
    mov HEX0, HEX1
    mov HEX1, HEX2
    mov HEX2, HEX3
    mov HEX3, HEX4
    mov HEX4, HEX5
    mov HEX5, HEX6
    mov HEX6, HEX7
    mov HEX7, A

    ljmp M0
END

这里,wait(2)是一个消耗了大约2秒的时钟周期的宏。有人能告诉我(甚至推测)为什么HEXn被写到0吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 07:06:31

这是我的教授耶稣卡尔维诺-弗拉加的回答:

HEX0到HEX7是只写寄存器。它们不能被读回来。克服这一限制的传统方法是使用变量(如果可用的话使用寄存器)。首先,让我们定义八个字节变量。像这样的东西就行了:

代码语言:javascript
复制
dseg at 30H
shex0: ds 1
shex1: ds 1
shex2: ds 1
shex3: ds 1
shex4: ds 1
shex5: ds 1
shex6: ds 1
shex7: ds 1
cseg

然后用数字初始化变量:

代码语言:javascript
复制
mov shex0, #0x98 ; show 9
.
.
.
mov shex7, #0xA4 ; show 2

最后,循环,其中变量被发送到显示器并旋转:

代码语言:javascript
复制
M0:

; Send to displays
mov hex0, shex0
.
.
mov hex7, shex7

;Rotate
mov A, shex0; store HEX0 in the accumulator
mov shex0, shex1
.
.
.
mov shex6, shex7
mov shex7, A

sjmp M0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28956753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档