鱼C论坛

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

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

stack segment
        dw 0,0,0,0,0,0,0,0
stack ends

code segment
start:
        mov dh,8;
        mov dl,3;
        mov cl,2;
        mov ax,data;
        mov ds,ax;
        mov si,0;
        mov ax,stack;
        mov ss,ax;
        mov sp,16;
        call show_str
        
        mov ax,4c00h;
        int 21h;
show_str:
        ;首先把该压栈保存的压栈保存 ,
        push dx
        push ax
        push si
        push cx
        
        ;计算出dh行dl列的数据缓冲地址
        ;计算行数所用的字节数
        mov ax,160
        mul dh
        mov cx,ax;
        
        ;计算列数字节数
        mov ax,2
        mul dl
        
        ;计算要填充数据的缓冲区地址偏移
        add ax,cx;
        
        
        ;填充缓冲区
        mov si,0;
        mov di,ax;
        mov ax,0b800h;
        mov es,ax;
        mov ch,0;
        
        pop ax;
        s:
                mov cl,ds:[si];
                jcxz funcend;cx为0就填充颜色
                mov es:[di],cl;
                
                mov es:[di+1],al;颜色属性
                add di,2
                inc si;
                jmp s;

                
        ;函数结束前把该出栈的全部出栈
        funcend :
                pop si
                pop ax
                pop dx
                
                ret
code ends

end start
这段代码你跑一下看看,这段代码我验证过可以在屏幕显示文字。如果能显示,就表示是程序的问题。如果不能显示就再来分析其他原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

还是没法显示哦,也是程序运行没有显示错误,但是没有输出:'(,会不会跟dos的设置有关?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

那你下一个dosbox把,虚拟dos,是64位win7,就是在dos box上跑的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我的机子是32位win7的,用64位的可以么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 15:33:34 | 显示全部楼层
你重启电脑后再运行那个文件试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我是64位win7 dosbox下是没什么问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

还是没看到输出,好像屏幕一闪,就没有了:(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 16:26:47 | 显示全部楼层
我也是这样额  求解...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-31 16:43:28 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

         mov ds,ax
         mov si,0
         call letterc
         
         mov ax,0b800h
         mov es,ax
         mov di,720h
        
s0:  
     mov ch,0
         mov cl,[si]
         jcxz s1    
         mov es:[di],cl
         mov ah,01000010b
         mov es:[di+1],ah
         inc si
         inc cx
         add di,2
         loop s0
s1:         
         mov ax,4c00h
         int 21h
letterc:   
     push ax
         push si
s:
     mov ch,0
         mov cl,[si]
         jcxz s4
     cmp cl,61h
         jb s3
         cmp cl,7ah
         ja s3
         sub cl,20h
         mov [si],cl
s3:         inc si
     inc cx
     loop s
s4:         
     pop si
         pop ax
         ret
code ends
end begin
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

结果还是一样哦,闪频之后就没有反应了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

那就是电脑的问题吧,不过不要纠结这个问题了,继续向下学习吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-1 06:28:41 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-2 13:47:21 | 显示全部楼层
debug下单步是有显示的 是把?
在mov ax,4c00h前面加
mov ah,01h
int 21h
相当于getchar()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

终于有显示了,3Q3Q……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

有显示就好{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

为何但不调试能够显示   直接运行却不行呢
已经加了  mov ah ,01h
                int 21h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 23:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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