关于汇编语言标号的疑惑
本帖最后由 xzzsj 于 2018-1-10 14:40 编辑我们之前学习的时候取标号偏移地址用“ offfset 标号 ”这种格式,而在学习第16章《直接定址表》时,书中说“可以将标号当作数据来定义,此时,编译器将标号所表示的地址当作数据的值”,
这个也能理解。但是我试着不在定义数据的时候直接将标号传送给寄存器(mov ax, s(s为标号))也能直接将标号的偏移地址传送给寄存器,求解为什么?既然能够直接将标号的偏移地址用标号本身来表示,那为什么还要用 offset 这个指令?(代码和debug调试如下图) 本帖最后由 qq1242009750 于 2018-1-10 17:55 编辑
{:5_110:} qq1242009750 发表于 2018-1-10 16:51
网址打不开啊{:5_92:} offset 是获取地址 而 标号只是一个数据 就像C语言里面的变量一样 例如int t t 是一个变量,但它不是地址
如果你要获得t的地址就要加上个取地址符号 &t 十分感谢{: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 xzzsj 发表于 2018-1-10 22:57
十分感谢
但是程序中循环的标号使用有误,和C语言中标识符的定义规则一样【标识符必须以字母a~z、 ...
那个标号是l 不是 1 哈哈 {:5_91:} xzzsj 发表于 2018-1-10 22:57
十分感谢
但是程序中循环的标号使用有误,和C语言中标识符的定义规则一样【标识符必须以字母a~z、 ...
对了 楼主 用的是什么编译器啊 本帖最后由 xzzsj 于 2018-1-11 21:24 编辑
qq1242009750 发表于 2018-1-11 00:15
对了 楼主 用的是什么编译器啊
MASM 6.15
页:
[1]