鱼C论坛

 找回密码
 立即注册
查看: 2035|回复: 9

请哪位帮忙回答一下关于编译成的exe文件在cmd下运行的问题

[复制链接]
发表于 2012-12-13 21:05:18 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 雪绒★~花飘 于 2012-12-18 16:03 编辑

52{S8(57V1ND{7@2HJFN[JA.jpg 之前发了一个关于这个问题,但好像是自己没表达好,大家都理解错了,现在上图来说一下,情况是我这个本本编译好一个exe文件后,就比如小甲鱼老师第十五章那里外中断那里,小甲鱼老师那个编译好的exe文件在cmd下运行会依次出现a到z的变化过程,就想第一张图那样在中间那里会出现字母。而我这个编译好的exe文件在cmd下运行却不会出现字母(跟代码没有关系,前面的所有exe文件运行都没有东西),就如下面第二章图一样 M)G[OV_LY{C)8JH35N2[O0K.jpg 只是运行了一段时间跳出就回到cmd下不会在中间显示字母,每次都看不到效果,只能debug单步跟踪(debug单步跟踪可以显示出效果)。这个会是操作系统或别的什么原因吗???

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-12-13 21:05:19 | 显示全部楼层
  1. assume cs:code
  2. stack segment
  3.       db 128 dup (0)
  4. stack ends

  5. code segment
  6. start:
  7.                         mov ax,stack

  8.                         mov ss,ax               ;mov es,ax



  9.                         mov ax,0b800h     ;这个是显存的段地址,你懂的!
  10.                         mov di,160*12+20*2
  11.                         mov es,ax


  12.                         mov ah,'a'
  13.                         mov al,02h                      ;加了个颜色上


  14. s:               mov es:[di],ah        ;加上上面的段地址定义,就可以显示了
  15.                         mov es:[di+1],al
  16.                         call delay
  17.                         inc ah
  18.                         add di,2                          ;将a到z26个字母全部显示出来
  19.           cmp ah, 'z'
  20.                         jna s

  21.                         mov ax,4c00h
  22.                         int 21h

  23. delay:                 push ax
  24.                         push dx
  25.                         mov dx,1000h
  26.                         mov ax,0


  27. s1:             sub ax,1
  28.                         sbb dx,0
  29.                         cmp ax,0
  30.                         jne s1
  31.                         cmp dx,0
  32.                         jne s1
  33.                         pop dx
  34.                         pop ax
  35.                         ret

  36. code ends
  37. end start ;以上,是我根据楼主的代码改的,你原来代码功参是在显存的同个字节位上依次显示a 到 z ,我改成将a 到 z 全部显示出来。这个例子我没有看到过,我现在才学到13章int 指令。共同学习,大牛勿喷!
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-14 08:24:40 | 显示全部楼层
怎么看不到,是不能执行吗?还是一闪而过。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-14 22:11:35 | 显示全部楼层
start:
   mov ax,stack
   mov es,ax
你这边是不是错了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-15 08:57:41 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-15 08:58:24 | 显示全部楼层
ycg 发表于 2012-12-14 22:11
start:
   mov ax,stack
   mov es,ax

没错啊我重书上抄下来的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-15 09:00:47 | 显示全部楼层
雪绒★~花飘 发表于 2012-12-15 08:57
恩一闪而过没有重 a到z的过程

在cmd下运行了一段时间但看不到运行的结果,没有显示任何东西,然后又返回了cmd
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-17 15:51:16 | 显示全部楼层
雪绒★~花飘 发表于 2012-12-15 08:58
没错啊我重书上抄下来的

应该这样吧:
mov ax,stack
mov ss,ax
mov ax,0b800h
mov es,ax
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-17 23:27:49 | 显示全部楼层
楼主,你指定是把代码打错了。鱼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:[160*12+40*2],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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-18 17:41:06 | 显示全部楼层
可能跟CPU寻址方式和内存分配有关吧,不清楚,只有请大牛帮忙解释一下了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 20:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表