xzzsj 发表于 2018-1-10 14:35:21

关于汇编语言标号的疑惑

本帖最后由 xzzsj 于 2018-1-10 14:40 编辑

我们之前学习的时候取标号偏移地址用“ offfset 标号 ”这种格式,而在学习第16章《直接定址表》时,书中说“可以将标号当作数据来定义,此时,编译器将标号所表示的地址当作数据的值”,
这个也能理解。但是我试着不在定义数据的时候直接将标号传送给寄存器(mov ax, s(s为标号))也能直接将标号的偏移地址传送给寄存器,求解为什么?既然能够直接将标号的偏移地址用标号本身来表示,那为什么还要用 offset 这个指令?(代码和debug调试如下图)

qq1242009750 发表于 2018-1-10 16:51:00

本帖最后由 qq1242009750 于 2018-1-10 17:55 编辑

{:5_110:}

xzzsj 发表于 2018-1-10 17:36:33

qq1242009750 发表于 2018-1-10 16:51


网址打不开啊{:5_92:}

qq1242009750 发表于 2018-1-10 17:56:43

offset 是获取地址   而   标号只是一个数据

qq1242009750 发表于 2018-1-10 18:03:29

就像C语言里面的变量一样   例如int t   t 是一个变量,但它不是地址
                                    如果你要获得t的地址就要加上个取地址符号 &t      

xzzsj 发表于 2018-1-10 22:57:35

十分感谢{:5_91:}
但是程序中循环的标号使用有误,和C语言中标识符的定义规则一样【标识符必须以字母a~z、 A~Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中】

0000.asm(20) : error A2008 : syntax error : integer
0000.asm(22) : fatal error A1016 : Internal Assembler Error

qq1242009750 发表于 2018-1-11 00:14:21

xzzsj 发表于 2018-1-10 22:57
十分感谢
但是程序中循环的标号使用有误,和C语言中标识符的定义规则一样【标识符必须以字母a~z、 ...

那个标号是l 不是 1 哈哈 {:5_91:}

qq1242009750 发表于 2018-1-11 00:15:08

xzzsj 发表于 2018-1-10 22:57
十分感谢
但是程序中循环的标号使用有误,和C语言中标识符的定义规则一样【标识符必须以字母a~z、 ...

对了 楼主 用的是什么编译器啊

xzzsj 发表于 2018-1-11 15:20:59

本帖最后由 xzzsj 于 2018-1-11 21:24 编辑

qq1242009750 发表于 2018-1-11 00:15
对了 楼主 用的是什么编译器啊

MASM 6.15
页: [1]
查看完整版本: 关于汇编语言标号的疑惑