傅青云 发表于 2012-10-25 22:10:07

这个程序为什么看不到结果

assume cs:code,ss:stack,ds:data

stack segment stack
db 02h,24h,71h             ;属性字节存放在堆栈段,方便用bp索引,本程序不用担心堆栈被覆盖
db 13 dup(0)
stack ends

data segment
db 'welcome to masm!'       ;字符串,用si索引 0~15
data ends

code segment

start: mov ax,0b800h
           mov es,ax            ;初始化ES段,位于显存空间
          
              mov ax,stack         
           mov ss,ax
           mov sp,16            ;初始化栈段
          
           mov ax,data
           mov ds,ax            ;初始化数据段
          
           mov bx,1984          ;bx的起始地址,第12行32列
           mov bp,0             ;bp初始化,指向数据段第一个属性字节
           mov cx,3             ;外层循环变量
s1:    push cx                    ;入栈保护cx
           mov si,0             ;si指向第0个字符
           mov di,0
           mov ah,          ;将属性字节暂存到ah
                     
           mov cx,16
s2:    mov al,
           mov es:,al    ;通过al,装入ascii码字节内容
           inc di               ;di+1,指向属性字节
           mov es:,ah    ;装入属性字符
           inc di               ;再次di+1,指向下一个字符的ascii码字节
           inc si               
           loop s2            ;内层循环,对一行写入16列          
          
           inc bp               ;bp+1,对应下一行属性字节
           add bx,160         ;bx指向下一行
           pop cx               ;cx出栈
           loop s1            ;外层循环
          
           mov ax,4c00h
           int 21h
code ends
end start
   

傅青云 发表于 2012-10-25 22:10:59

用debug的g命令跳到程序出口,就能看到显示结果
如果直接执行,直接返回dos,什么都看不见

why?

张国祥 发表于 2012-10-26 04:57:06

根系统有一定关系,直接运行可能系统进行了清屏操作,,我在dosbox下显示了!

傅青云 发表于 2012-10-26 13:22:38

哦 谢谢楼上的,是不是win7不适合玩汇编,
老出错,害我改程序
这个程序我改了2个小时,还是显示不出来
看了你的图,才知道我的程序没问题,真是郁闷

敉沧 发表于 2012-10-26 20:01:44

因为运行完了,运行到程序返回就退出咯。
你可以这样
mov ah,7
int 21h   ;//暂停
mov ax,4c00h
int 21h
页: [1]
查看完整版本: 这个程序为什么看不到结果