鱼C论坛

 找回密码
 立即注册
查看: 5623|回复: 17

王爽《汇编语言》第九章实验9

[复制链接]
发表于 2013-5-30 21:16:00 | 显示全部楼层 |阅读模式
1鱼币
第9章实验9我自己编的程序可以运行,但是没有向屏幕输出;我将习题答案的代码复制、编译之后也是屏幕没有输出,这是怎么回事啊?会不会是dos设置的原因??

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

使用道具 举报

发表于 2013-5-30 22:10:55 | 显示全部楼层

  1. assume cs:code

  2. data segment
  3.         db 'Welcome to masm!',0
  4. data ends
  5. ;(dh) = 行号 (dl) = 列号 (cl) = 颜色 ds:si指向字符串地址
  6. ;在屏幕的8行3列显示绿色的打data段中的数据

  7. stack segment
  8.         dw 0,0,0,0,0,0,0,0
  9. stack ends

  10. code segment
  11. start:
  12.         mov dh,8;
  13.         mov dl,3;
  14.         mov cl,2;
  15.         mov ax,data;
  16.         mov ds,ax;
  17.         mov si,0;
  18.         mov ax,stack;
  19.         mov ss,ax;
  20.         mov sp,16;
  21.         call show_str
  22.         
  23.         mov ax,4c00h;
  24.         int 21h;
  25. show_str:
  26.         ;首先把该压栈保存的压栈保存 ,
  27.         push dx
  28.         push ax
  29.         push si
  30.         push cx
  31.         
  32.         ;计算出dh行dl列的数据缓冲地址
  33.         ;计算行数所用的字节数
  34.         mov ax,160
  35.         mul dh
  36.         mov cx,ax;
  37.         
  38.         ;计算列数字节数
  39.         mov ax,2
  40.         mul dl
  41.         
  42.         ;计算要填充数据的缓冲区地址偏移
  43.         add ax,cx;
  44.         
  45.         
  46.         ;填充缓冲区
  47.         mov si,0;
  48.         mov di,ax;
  49.         mov ax,0b800h;
  50.         mov es,ax;
  51.         mov ch,0;
  52.         
  53.         pop ax;
  54.         s:
  55.                 mov cl,ds:[si];
  56.                 jcxz funcend;cx为0就填充颜色
  57.                 mov es:[di],cl;
  58.                
  59.                 mov es:[di+1],al;颜色属性
  60.                 add di,2
  61.                 inc si;
  62.                 jmp s;

  63.                
  64.         ;函数结束前把该出栈的全部出栈
  65.         funcend :
  66.                 pop si
  67.                 pop ax
  68.                 pop dx
  69.                
  70.                 ret
  71. code ends

  72. end start
复制代码
这段代码你跑一下看看,这段代码我验证过可以在屏幕显示文字。如果能显示,就表示是程序的问题。如果不能显示就再来分析其他原因
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-31 13:50:55 | 显示全部楼层

还是没法显示哦,也是程序运行没有显示错误,但是没有输出:'(,会不会跟dos的设置有关?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 14:06:56 | 显示全部楼层
空陌 发表于 2013-5-31 13:50
还是没法显示哦,也是程序运行没有显示错误,但是没有输出,会不会跟dos的设置有关?

那你下一个dosbox把,虚拟dos,是64位win7,就是在dos box上跑的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-31 14:55:13 | 显示全部楼层
熊文杰 发表于 2013-5-31 14:06
那你下一个dosbox把,虚拟dos,是64位win7,就是在dos box上跑的

我的机子是32位win7的,用64位的可以么??
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 15:33:34 | 显示全部楼层
你重启电脑后再运行那个文件试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 15:42:41 | 显示全部楼层
空陌 发表于 2013-5-31 14:55
我的机子是32位win7的,用64位的可以么??

我是64位win7 dosbox下是没什么问题的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-31 16:23:44 | 显示全部楼层
2548827329 发表于 2013-5-31 15:33
你重启电脑后再运行那个文件试一下

还是没看到输出,好像屏幕一闪,就没有了:(
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 16:26:47 | 显示全部楼层
我也是这样额  求解...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 16:43:28 | 显示全部楼层
真是难得给力的帖子啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 17:52:47 | 显示全部楼层
本帖最后由 2548827329 于 2013-5-31 17:53 编辑
空陌 发表于 2013-5-31 16:23
还是没看到输出,好像屏幕一闪,就没有了

试一试这段代码,你刚开电脑就编译执行这段代码试一下
  1. assume cs:code
  2. data segment
  3.      db"Beginner's All-purpose Symbolic Instruction Code.",0
  4. data ends
  5. code segment
  6. begin:
  7.      mov ax,data

  8.          mov ds,ax
  9.          mov si,0
  10.          call letterc
  11.          
  12.          mov ax,0b800h
  13.          mov es,ax
  14.          mov di,720h
  15.         
  16. s0:  
  17.      mov ch,0
  18.          mov cl,[si]
  19.          jcxz s1   
  20.          mov es:[di],cl
  21.          mov ah,01000010b
  22.          mov es:[di+1],ah
  23.          inc si
  24.          inc cx
  25.          add di,2
  26.          loop s0
  27. s1:         
  28.          mov ax,4c00h
  29.          int 21h
  30. letterc:   
  31.      push ax
  32.          push si
  33. s:
  34.      mov ch,0
  35.          mov cl,[si]
  36.          jcxz s4
  37.      cmp cl,61h
  38.          jb s3
  39.          cmp cl,7ah
  40.          ja s3
  41.          sub cl,20h
  42.          mov [si],cl
  43. s3:         inc si
  44.      inc cx
  45.      loop s
  46. s4:         
  47.      pop si
  48.          pop ax
  49.          ret
  50. code ends
  51. end begin
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-31 19:21:17 | 显示全部楼层
2548827329 发表于 2013-5-31 17:52
试一试这段代码,你刚开电脑就编译执行这段代码试一下

结果还是一样哦,闪频之后就没有反应了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 21:13:51 | 显示全部楼层
空陌 发表于 2013-5-31 19:21
结果还是一样哦,闪频之后就没有反应了

那就是电脑的问题吧,不过不要纠结这个问题了,继续向下学习吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-1 06:28:41 | 显示全部楼层
无回帖,不论坛,这才是人道。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-2 13:47:21 | 显示全部楼层
debug下单步是有显示的 是把?
在mov ax,4c00h前面加
mov ah,01h
int 21h
相当于getchar()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-3 08:07:59 | 显示全部楼层
熊文杰 发表于 2013-6-2 13:47
debug下单步是有显示的 是把?
在mov ax,4c00h前面加
mov ah,01h

终于有显示了,3Q3Q……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-3 11:57:10 | 显示全部楼层
空陌 发表于 2013-6-3 08:07
终于有显示了,3Q3Q……

有显示就好{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-18 17:14:18 | 显示全部楼层
本帖最后由 双鱼淚 于 2014-11-18 17:17 编辑

为何但不调试能够显示   直接运行却不行呢
已经加了  mov ah ,01h
                int 21h
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 20:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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