. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9 为什么没显示?  [待解决] 回复[ 5次 ]   点击[ 280次 ]  
assembly_shown
[帖 主]   [ 发表时间:2010-04-29 11:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-02 10:41
如题,在XP下虚拟DOS环境,请教高人,和环境有关吗?是否要在纯DOS下才行?
scuzg
[第1楼]   [ 回复时间:2010-04-29 12:10 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
在结束程序前加这两句试试:
        mov     ah,0          ;等待任意键入
        int     16h

        mov     ax,4c00h
        int     21h
assembly_shown
[第2楼]   [ 回复时间:2010-04-29 17:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-02 10:41
谢谢了! 另外我这里有加闪烁,是否和这个有关?

附上源程序:

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

data segment
     db 'welecom to masm!'
     db 02h,24h,9ch          ;3种显示属性        
data ends

stack segment
     dw 0,0,0                 
stack ends

code segment
 start:mov ax,data
       mov ds,ax
       mov ax,0b800h           ;显示区段地址
       mov es,ax
       mov ax,stack
       mov ss,ax
       mov sp,6                ;栈空,指向最高地址的下1个地址
       mov bx,780h             ;指向显示的第12行
       mov bp,0                
       mov cx,3                ;循环次数,3行显示
    s0:push cx
       mov si,0
       mov di,0
       mov cx,16
     s:mov ah,ds:[10h+bp]      ;显示属性进AH
       mov al,ds:[di]          ;要显示的字符进AL
       mov es:[bx+40h+si],ax   ;屏幕显示字符
       inc di                  ;指向下1个字符
       add si,2
       loop s

       add bx,160               ;指向下1行
       inc bp                   ;指向下1个显示属性
       pop cx
       loop s0

       mov ax,4c00h
       int 21h
code ends
end start
scuzg
[第3楼]   [ 回复时间:2010-04-29 20:47 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
修改“3种显示属性”就行了。
关于字符显示属性的设置简述于下:
   字符显示属性字节的低 4 位为前景色,即字符的颜色,一共可以有 16 种颜色;属性字节高 4 位的低 3 位为背景色,即背景可以有 7 种选择;属性字节的最高位决定指定的字符是否闪烁: 0 为正常显示,1 则闪烁显示。
assembly_shown
[第4楼]   [ 回复时间:2010-04-30 11:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-02 10:41
谢谢你的回复,好象是栈设置出问题了。把
stack segment            改为 stack segment      
     dw 0,0,0                        dw 16 dup(0)
stack ends                    stack ends 

SP=6                          sp=16 就可以了
搞不懂为什么?晕了
scuzg
[第5楼]   [ 回复时间:2010-04-30 16:10 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
原来的栈深度不够。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved