标题:还是汇编中的小问题 但是对于初学者来说是很困惑的
只看楼主
万万切克闹
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-6-10
结帖率:0
已结贴  问题点数:5 回复次数:4 
还是汇编中的小问题 但是对于初学者来说是很困惑的
data segment
     f1 db 1
     f2 db 2
data  ends
code segment
     assume cs:code,ds:data
start: mov ax,data
       mov ds,ax
       add ax,f1
       add ax,f2
       mov dx,ax
       mov ah,2
       int 21h
       mov ah,4ch
       int 21h
code ends
     end start
怎么通过f1和f2让 1和2相加 ?总感觉 有时f1 f2表示地址 有时表示 1和2这两个值?求解惑
搜索更多相关主题的帖子: start 
2015-06-11 00:24
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
得分:2 
在你的程序中,f1,f2是你定义的标号,编译时被编译成地址,但因为这个标号在data段中定义,后面不带冒号(这种标号也只能在data段中定义),在表示地址的同时,也表示后面所定义的内存单元的长度为1字节,所以这种标号代表的其实就是ds:[f1],ds:[f2],当然前面的段寄存器由你设定,也就是说,我们像下面这样编写:
mov    al,f1
mov    bl,f2
实际上就是:
mov    al,ds:[f1]
mov    bl,ds:[f2]
所以执行之后,al中的值就是1,bl中的值就是2。
所以f1,f2作为标号表示地址,但因为这2个标号同时表示了它们所定义的内存单元的长度,所以可以通过它们直接引用其中的值。
我们要让f1和f2中的1和2相加,就可以如下面这样编写:
mov    al,f1
add    al,f2
不能直接写成:
add    f1,f2
因为不允许在2个内存单元之间直接操作。
2015-06-11 16:42
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
得分:0 
我们要得到f1,f2的地址,可以这样编写:
mov    bx,offset f1
mov    bp,offset f2
2015-06-11 16:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:2 
这两天好热闹啊
2015-06-12 09:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-446458-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.979132 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved