GZLJZ 发表于 2012-4-21 04:12:46

搞到晚上4点还没有搞定的汇编指令

本帖最后由 GZLJZ 于 2012-4-21 04:42 编辑

下面代码是成功的:
BUF   DATA    70H       

MOV        A,#100               
MOV        BUF+2,A
即将数值100存入72H寄存器里
------------------------------------------------------------------------------------------------
而我想把上面固定数值2变为变量,确不行请高手帮忙,谢了
我设想的程序如下:是不能达到,将数值100存入72H寄存器里
N      DATA    30H
BUF   DATA    70H       

MOV        N,#2
MOV        A,#100               
MOV        BUF+N,A

或者还有什么方法同样达到我的要求呀

       

guowei681 发表于 2012-4-21 04:30:30

楼主也是夜猫子呢。

GZLJZ 发表于 2012-4-21 04:34:05

guowei681 发表于 2012-4-21 04:30 static/image/common/back.gif
楼主也是夜猫子呢。

是呀,在想上面问题,不知怎样才能达到我要的要求

guowei681 发表于 2012-4-21 04:35:25

汇编我帮不了你哦。看你的逻辑是对的呀

GZLJZ 发表于 2012-4-21 04:39:08

guowei681 发表于 2012-4-21 04:35 static/image/common/back.gif
汇编我帮不了你哦。看你的逻辑是对的呀

经测试确实是不行的
加的地址不是2,而是N的地址数值了

guowei681 发表于 2012-4-21 04:47:05

程序菜菜鸟呢,用到是51么。?改换C呢,MOV      N,#2常数2放到N这个寄存器中。N 是啥?在寄存器中有么有定义冲突的。
MOV      A,#100               
MOV      BUF+N,A

GZLJZ 发表于 2012-4-21 04:52:15

本帖最后由 GZLJZ 于 2012-4-21 04:54 编辑

guowei681 发表于 2012-4-21 04:47 static/image/common/back.gif
程序菜菜鸟呢,用到是51么。?改换C呢,MOV      N,#2常数2放到N这个寄存器中。N 是啥?在寄存器中有么 ...

是51的,N是随便命名的寄存器名称,N即等于30H寄存器

guowei681 发表于 2012-4-21 04:53:36

你看下手册,换一个命名看下,是不是N和内部寄存器冲突,这个可能性比较大,本人程序很菜,能帮到你的也很有限,忘见谅先休息吧,朋友。

GZLJZ 发表于 2012-4-21 04:55:29

guowei681 发表于 2012-4-21 04:53 static/image/common/back.gif
你看下手册,换一个命名看下,是不是N和内部寄存器冲突,这个可能性比较大,本人程序很菜,能帮到你的也很 ...

呵呵,谢了,也该休息了,不然天都快亮了

hefq 发表于 2012-4-21 05:59:50

n data 30h
buf data 70h

loop:
mov n,#2
mov a,#buf
add a,n
mov r0,a
mov a,#100
mov @r0,a
ljmp loop
end

lonelyp 发表于 2012-4-21 09:19:51

BUF   DATA    70H
N      DATA    30H

即 BUF   =   70H
    N      =    30H

当执行
MOV      BUF+N,A

是将A中的值传送到地址为A0H的寄存器中,即送到端口 P2

oufuqiang 发表于 2012-4-21 09:24:42

10楼正确,变址访问,只能通过@R0

lryxr2507 发表于 2012-4-21 11:06:31

guowei681 发表于 2012-4-21 04:30 static/image/common/back.gif
楼主也是夜猫子呢。

好像搞这个的都有熬夜的习惯,对汇编就爱莫能助了,不过已经有人解决了,在这里也学习了.

GZLJZ 发表于 2012-4-21 11:40:17

本帖最后由 GZLJZ 于 2012-4-21 12:40 编辑

刚醒来,谢谢各位,
10楼代码等会我试下,谢谢,(刚试了,确实是好办法,谢了,我用了这么久汇编,还不知ADD可以加地址的,以前以为加的是数值,哦关键mov a,#buf这句   把buf的地址赋值给了A)
11楼也是对的,结果确实是BUF+的是N的地址,而不是N里面的数值,所以昨晚试验了很久。

wye11083 发表于 2012-4-21 13:03:20

所有的CPU都不能直接加变量,如果要通过变址寻址,就必须得通过寄存器间接访问或专用指令。

dz20062008 发表于 2012-4-22 03:37:48

没听说什么72寄存器的!
N   EQU 20H
BUF EQU 21H

MOV A,N
ADD A,BUF
MOV R0,A
MOV @R0,#100D

SJMP $

dz20062008 发表于 2012-4-22 03:47:00

上面n与buf对应了一个内存单元,不是常量。也可以直接对应常量。还是先看看51指令集比较好!不然提问题都困难!

dz20062008 发表于 2012-4-22 06:52:35

为什么手机看不到有些楼的发言

banyai 发表于 2012-4-22 07:38:27

MOV      BUF+2,A,这个指令中的+是预编译时就算好的,所以只能是常数。如果其中一个是变量,就里要用汇编指令运算了,比如10楼的方法。

风雨无阻88 发表于 2016-12-18 13:07:07

记号 MARK

饭桶 发表于 2016-12-18 14:00:53

汇编指令怎么可能有直接在语句中运算加法的啊?

孤独的猫 发表于 2016-12-18 14:58:40

听说4点最容易猝死         

xuyaqi 发表于 2016-12-18 15:46:00

什么单片机的汇编

lxa0 发表于 2016-12-18 16:01:10

用@R或者dptr+A指令可以实现

Firman 发表于 2016-12-18 21:22:02

lxa0 发表于 2016-12-18 16:01
用@R或者dptr+A指令可以实现

僵尸贴都花出来?
@R指向RAM,
DPTR指向XDATA(MOVX)或ROM (MOVC)

diyplayer 发表于 2016-12-18 23:28:58

本人也玩汇编的,想找工作,有没有人收留啊

lxa0 发表于 2016-12-19 19:31:11

diyplayer 发表于 2016-12-18 23:28
本人也玩汇编的,想找工作,有没有人收留啊

我也玩汇编的
不过找工作的事帮不上你
抱歉

GZLJZ 发表于 2016-12-20 11:44:42

呵呵,4年前的事了,现在已全部使用C语言了,当前使用汇编那个累呀。
页: [1]
查看完整版本: 搞到晚上4点还没有搞定的汇编指令