请哪位帮忙回答一下关于编译成的exe文件在cmd下运行的问题
本帖最后由 雪绒★~花飘 于 2012-12-18 16:03 编辑之前发了一个关于这个问题,但好像是自己没表达好,大家都理解错了,现在上图来说一下,情况是我这个本本编译好一个exe文件后,就比如小甲鱼老师第十五章那里外中断那里,小甲鱼老师那个编译好的exe文件在cmd下运行会依次出现a到z的变化过程,就想第一张图那样在中间那里会出现字母。而我这个编译好的exe文件在cmd下运行却不会出现字母(跟代码没有关系,前面的所有exe文件运行都没有东西),就如下面第二章图一样只是运行了一段时间跳出就回到cmd下不会在中间显示字母,每次都看不到效果,只能debug单步跟踪(debug单步跟踪可以显示出效果)。这个会是操作系统或别的什么原因吗??? assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax ;mov es,ax
mov ax,0b800h ;这个是显存的段地址,你懂的!
mov di,160*12+20*2
mov es,ax
mov ah,'a'
mov al,02h ;加了个颜色上
s: mov es:,ah ;加上上面的段地址定义,就可以显示了
mov es:,al
call delay
inc ah
add di,2 ;将a到z26个字母全部显示出来
cmp ah, 'z'
jna s
mov ax,4c00h
int 21h
delay: push ax
push dx
mov dx,1000h
mov ax,0
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
code ends
end start ;以上,是我根据楼主的代码改的,你原来代码功参是在显存的同个字节位上依次显示a 到 z ,我改成将a 到 z 全部显示出来。这个例子我没有看到过,我现在才学到13章int 指令。共同学习,大牛勿喷!
怎么看不到,是不能执行吗?还是一闪而过。。。 start:
mov ax,stack
mov es,ax
你这边是不是错了啊 username_badboy 发表于 2012-12-14 08:24 static/image/common/back.gif
怎么看不到,是不能执行吗?还是一闪而过。。。
恩一闪而过没有重 a到z的过程 ycg 发表于 2012-12-14 22:11 static/image/common/back.gif
start:
mov ax,stack
mov es,ax
没错啊我重书上抄下来的 雪绒★~花飘 发表于 2012-12-15 08:57 static/image/common/back.gif
恩一闪而过没有重 a到z的过程
在cmd下运行了一段时间但看不到运行的结果,没有显示任何东西,然后又返回了cmd 雪绒★~花飘 发表于 2012-12-15 08:58 static/image/common/back.gif
没错啊我重书上抄下来的
应该这样吧:
mov ax,stack
mov ss,ax
mov ax,0b800h
mov es,ax 楼主,你指定是把代码打错了。鱼C的教程中没有这个。那个stack应该是栈段,是传送给SS段的,不是ES段吧。
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax ;mov es,ax
mov ax,0b800h ;这个是显存的段地址,你懂的!有了它,才会在显示器上依次显示a到z
;我的也是本本,跟楼主一样,不会显示,可能跟显卡有关吧,我装了虚拟机跑XP,测试通过。
mov es,ax
mov ah,'a'
s: mov es:,ah ;加上上面的段地址定义,就可以显示了
call delay
inc ah
cmp ah, 'z'
jna s
mov ax,4c00h
int 21h
delay:push ax
push dx
mov dx,1000h
mov ax,0
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
code ends
end start
可能跟CPU寻址方式和内存分配有关吧,不清楚,只有请大牛帮忙解释一下了
页:
[1]