. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  SOS     做实验9出现超级白屏  [已解决] 回复[ 4次 ]   点击[ 251次 ]  
zcouyangpeng
[帖 主]   [ 发表时间:2008-10-10 22:07 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
程序如下:

assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!' ;定义要显示的字符串(共16字节)
db 2h,21h,74h         ;定义三种颜色属性
data ends

stack segment
dd 4 dup(0)
stack ends

code segment
start:        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,10h
        mov ax,0b872h   ;算出屏幕第12行中间的显存的段起始位置放入ax中
        mov di,0
        mov cx,3        ;外循环为3次,因为要显示三个字符串

s:        push cx         ;三个进栈操作为外循环s保存相关寄存器的值
        push ax
        push di                ;以防止它们的值在内循环中被破坏
        mov es,ax       ;此时es为屏幕第12行中间的显存的段起始位置 
        mov si,0
        mov di,0        
        mov cx,16       内循环为16次,因为一个字符串中含16个字节

s1:        mov al,[di]     
        mov es:[si],al
        inc di
        add si,2
        loop s1         ;此循环实现偶地址中存放字符


        pop di          ;将di的值恢复成进入内循环之前的时候的值 
           mov si,1        ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备
        mov al,16[di]   ;取颜色属性[源OP寻址方式:相对基址变址]

s2:        mov es:[si],al
        add si,2
        loop s2         ;此循环实现奇地址中存放字符的颜色属性



         ;以下4句为下一趟外循环做准备 
        pop ax
        pop cx
        add ax,16  ;将显存的段起始地址设为当前行的下一行   ;[在段地址中加0ah,相当于在偏移地址中加了0a0h(=160B)]

        inc di        
        loop s

        mov ax,4c00h        
        int 21h
code ends
end start        



各位看官帮我找找原因,在此非常感谢
zcouyangpeng
[第1楼]   [ 回复时间:2008-10-10 22:15 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
找到一处 不知道为什么还是不行


assume cs:code,ds:data,ss:stack 
data segment 
db 'welcome to masm!' ;定义要显示的字符串(共16字节) 
db 2h,21h,74h         ;定义三种颜色属性 
data ends 

stack segment 
dd 4 dup(0) 
stack ends 

code segment 
start:mov ax,data 
      mov ds,ax 
      mov ax,stack 
      mov ss,ax 
      mov sp,10h 
      mov ax,0b872h   ;算出屏幕第12行中间的显存的段起始位置放入ax中 
       mov di,0 
      mov cx,3        ;外循环为3次,因为要显示三个字符串 

s:    push cx         ;三个进栈操作为外循环s保存相关寄存器的值 
       push ax 
      push di        ;以防止它们的值在内循环中被破坏 
       mov es,ax       ;此时es为屏幕第12行中间的显存的段起始位置  
       mov si,0 
      mov di,0     
      mov cx,16       内循环为16次,因为一个字符串中含16个字节 

s1:   mov al,[di]      
      mov es:[si],al 
      inc di 
      add si,2 
      loop s1         ;此循环实现偶地址中存放字符 


       pop di          ;将di的值恢复成进入内循环之前的时候的值  
       mov si,1        ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备 
       mov al,16[di]   ;取颜色属性[源OP寻址方式:相对基址变址] 
      mov cx,16 
s2:   mov es:[si],al 
      add si,2 
      loop s2         ;此循环实现奇地址中存放字符的颜色属性 



     ;以下4句为下一趟外循环做准备  
     pop ax 
    pop cx 
    add ax,16  ;将显存的段起始地址设为当前行的下一行   ;[在段地址中加0ah,相当于在偏移地址中加了
                                                                          0a0h(=160B)] 
    inc di     
    loop s 

    mov ax,4c00h     
    int 21h 
code ends 
end start
zcouyangpeng
[第2楼]   [ 回复时间:2008-10-11 20:03 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
娃哈哈  总算成功了~~~~~~~~~~~~~~~ 弄了10多天 阿门


assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 2h,24h,71h
data ends
stack segment
dd 4 dup(0)
stack ends
code segment
start:        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,16
        mov si,0
        mov di,0        
        mov ax,0b872h
        mov cx,3
s:        mov es,ax
        
        push cx        
        push ax
        push si
        mov si,0
        mov di,0
        mov cx,16        
s1:        mov al,[si]
        mov es:[di],al
        inc si
        add di,2
        loop s1
        pop si
        mov di,1
        mov al,10[si]
        mov cx,16
        
s2:        mov es:[di],al
        add di,2
        loop s2
        inc si
        pop ax
        pop cx
        add ax,10
        loop s
        mov ax,4c00h
        int 21h
code ends
end start
zcouyangpeng
[第3楼]   [ 回复时间:2008-10-11 20:05 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
继续下一章 学完所有章节 再来精简这个程序


啊哈哈 我仰天长啸

呃  等等 还要过检测题
zcouyangpeng
[第4楼]   [ 回复时间:2008-10-11 20:29 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
此贴由 贴主 于 [ 2008-10-11 20:29 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved