如何运行EXE

x123456x 2006-05-23 08:03:44
用MASM5写了一个程序,在DEBUG可以正确运行,但直接点击EXE就报错,说是遇到
无效指令。系统是W2K

程序如下,是在80X25的窗口的最后一行显示welcome to masm

assume cs:code
data segment
db 'welcome to masm'
data ends

code segment

start:
mov ax,data
mov ds,ax
mov bx,0
mov si,0f00h
mov ax,0b800h
mov es,ax

mov cx,15
s:
mov al,ds:[bx]
mov es:[si],al

inc bx
add si,2

loop s

mov ax,4c00h
int 21

code ends
end start
...全文
386 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hswxf 2006-06-23
  • 打赏
  • 举报
回复
inc bx
add si,2

loop s
;*************增加判键
mov ah,1
int 21h
;****************最好寄存器保护一下,虽然WINDOWS有保护机制,但那是基于页的,不是段的

mov ax,4c00h
int 21

code ends
end start
Cody2k3 2006-06-23
  • 打赏
  • 举报
回复
多说一句, 不信的话可以在debug里面把你的code后面紧跟着的两个字节改成EB FE (Jmp $), 就是用debug 也一样死. 还是要把int 号写正确.
Cody2k3 2006-06-23
  • 打赏
  • 举报
回复
和系统内存空间无关, 1m一下的空间windows都会模拟出来, 不会真正访问物理空间.
何况windows的显卡driver根本不会访问a,b段的空间, 就那点空间根本不够.

至于debug不出错那只是运气, 你的code跑玩了之后还有一些有意义的code做了退出.因为是debug程序加载你的程序, 而你自己run的时候就是系统加载你的程序, 可能后面就没碰上能退出的指令, 所以你要么死循环要么就非法操作了.
Sopor_AeternUs 2006-06-22
  • 打赏
  • 举报
回复
应该是内存空间正在被系统使用的问题,很多这样的例子
楼猪可以自己定义一个段来获取内存空间
ttf345 2006-06-16
  • 打赏
  • 举报
回复
这段程序会显示的吗?
hswxf 2006-05-25
  • 打赏
  • 举报
回复
80X25的窗口
最好加上
mov ah,0
mov al,3
int 10h
pig4210 2006-05-24
  • 打赏
  • 举报
回复
同意一楼,debug下数值不用写h都以16进制运算。奇怪的是在开始部分有h,debug就不报错?我觉得就楼主的程序来说,debug与exe都会错的啊。
x123456x 2006-05-24
  • 打赏
  • 举报
回复
楼上的是不是发布答案的那个"莫取网名"?

热心人
paullbm 2006-05-24
  • 打赏
  • 举报
回复
最后一句int 21
改为int 21h

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧