cantian 发表于 2012-5-26 05:53:58

对实验九的修改

麻烦小甲鱼老师看下我对实验九的修改可行否!
程序如下:

assume cs:code,ds:data,ss:stack   
    data segment         
       db 'welcome to masm!'    ;定义要显示的字符串(共16字节)         
       db 02h,24h,71h         ;定义三种颜色属性   
    data ends   
    stack segment         
       dw 8 dup(0)
    stack ends
code segment   
start: mov ax,data         
       mov ds,ax         
       mov ax,stack      
       mov ss,ax         
       mov sp,10h      
       xor bx,bx                ;bx清零,用来索引颜色      
       mov ax,0b872h            ;算出屏幕第12行中间的显存的段起始位置放入ax中               
       mov cx,3               ;S3循环控制行数,外循环为3次,因为要显示三个字符串
s2:push cx                  ;三个进栈操作为外循环s3保存相关寄存器的值      
       push ax                  ;以防止它们的值在内循环中被破坏      
                        
       mov es,ax                ;此时es为屏幕第12行中间的显存的段起始位置                  
       mov si,0               ;si用来索引代码列的字符         
       mov di,0               ;di用来定位目标列         
       mov cx,10h               ;S1循环控制存放的字符,内循环为10h次,因为一个字符串中含10h个字节
         
s1:mov al,ds:      ;取字符   
       mov ah,ds:10h   ;取颜色属性
       mov es:,ax      ;显示字符
       inc si         
       add di,2
       loop s1                              
      
         ;以下5句为下一趟外循环做准备         
       inc bx                           
       pop ax         
       add ax,0ah               ;将显存的段起始地址设为当前行的下一行                                 
                              ;[在段地址中加0ah,相当于在偏移地址中加了0a0h(=160d)]         
       pop cx      
       loop s2
                     
       mov ax,4c00h         
       int 21h
code ends
end start   

乘风追日 发表于 2012-5-26 12:42:20

目测和我写的一样,http://bbs.fishc.com/thread-17892-1-1.html没问题啊!

信徒 发表于 2012-6-5 10:32:31

我最开始试了下,会报指令出错,怎么搞都不行,后来重启下电脑,就ok了。还有,如果运行看不到结果,最好下个dosbox吧。
页: [1]
查看完整版本: 对实验九的修改