注册 登录
编程论坛 汇编论坛

【8086】刚学汇编语言,start标号很纠结,望学过的学长指教。

黄礼森 发布于 2011-07-17 22:03, 883 次点击
以前还没学到start标号时,将asm编译,连接,运行后用debug的u命令可以看到asm中写的代码。后来学到start标号,再编译,连接,运行,用debug的u命令查看,cs:ip指向的不是asm中的代码,而是一些随机的代码(跟asm中start处开始的代码毫无关系)。用XP的“开始-运行-command”和DOS虚拟机都是这样。我想,初学者们应该都会遇到这种情况,特别是现在很少有真正的DOS系统(不知纯DOS系统会不会出现这种问题)。希望达人指教,这是我的问题还是机器的问题,非常感谢。
附程序一个,可以直接复制黏贴编译(王爽《汇编语言(第二版)》P126):


assume cs:code

code segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    start:  mov bx,0
            mov ax,0

            mov cx,8
        s:  add ax,cs:[bx]
            add bx,2
            loop s

            mov ax,4c00h
            int 21h

code ends

end start

[ 本帖最后由 黄礼森 于 2011-7-17 22:07 编辑 ]
4 回复
#2
zklhp2011-07-17 22:30
你漏掉了一个问题 就是 你 编译出来的文件 是什么格式的呢?

DOS里面有好几种可执行文件的格式罢 是不是要先执行一些初始化的代码呢

还有 start 只是指示程序开始的位置 可没说 程序的第一句话是你指定的语句诶

类似的例子还有C的main() 你说 程序第一句话是main()么
#3
zjsxwc2011-07-18 08:07
我这正常

只有本站会员才能查看附件,请 登录
#4
yulin31922011-07-29 12:30
我是新手对这样的基础知识有点迷汒
#5
xujian314152011-07-31 17:15
我也曾有过楼主的疑惑,我是这么想的:
“dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h”这串代码编译后,程序运行时会先定义这几个数据,然后将CS:IP指向start的入口。楼主遇到的可能是在定义数据之前的指令。
多说几句,用debug加载时是3楼的情况,但是用反编译器来加载时开始一段代码根本看不懂,有的提示?指令。
1