lm2wq 发表于 2014-4-23 22:10:18

实验9求解!!!求助!!!

看小甲鱼的视频到实验9那里,有点不懂,于是按视频上小甲鱼的源码一点一点打了出来。。。结果编译出来效果不一样,不能实现视频里那样彩色的字。。。而是一闪而过。。是不是哪里打错了?实在找不到错在哪里了。。。求解,代码放在1楼!

lm2wq 发表于 2014-4-23 22:11:35

            ASSUME    CS:CODE,DS:DATA,SS:STACK
      DATASEGMENT
            DB      'wlcome to masm!'
            DB      02H,24H,71H
      DATAENDS
       STACKSEGMENT
            DW      8 DUP(0)
       STACKENDS
      CODESEGMENT
      START:
            MOV       AX,DATA
            MOV       DS,AX
            MOV       AX,STACK
            MOV       SS,AX
            MOV       SP,10H

            XOR       BX,BX       ;相当于mov bx,0BX清零 用来索引颜色
            MOV       AX,0B872H   ;算出屏幕第12行中间的显存的段起始位置放入ax中

            MOV       CX,3
         S3:                        ;S3循环控制行数,外循环为3次,因为要显示三个字符串
            PUSH      CX          ;三个进栈操作为外循环S3保存相关寄存器的值
            PUSH      AX          ;以防止它人的值在内循环中被破坏
            PUSH      BX
            
            MOV       ES,AX       ;此时ex为屏幕第12行中间的显存的段的起始位置

            MOV       SI,0      ;si用来索引代码列的字符
            MOV       DI,0      ;di用来定位目标列

            MOV       CX,10H
            ;S1循环控制存放的字符,内循环为10次,因为一个字符串中含有10H个字
         S1:
            MOV       AL,DS:
            MOV       CS:,AL
            INC       SI
            ADD       DI,2      ;此循环实现偶地址中存放字符

            MOV       DI,1      ;di的值设为1,从而为在显存奇地址中存放字符颜色做准备
            POP       BX
            MOV       AL,DS:10            ;取颜色属性
            INC       BX


            MOV       CX,10H      ;第二个内循环也为10H次
         S2:
            MOV       ES:,AL
            ADD       DI,2
            LOOP      S2          ;此循环实现奇地址中存放字符的颜色属性

                                    ;以下4句为下一趟外循环做准备
            POP       AX
            ADD       AX,0AH      ;将显存的段起始地址设为当前行的下一行
                                    ;[在段地址中加0ah,相当于在偏移地址中加了0a0h=160d]
            POP       CX
            LOOP      S3

            MOV       AX,4C00H
            INT       21H
      CODEENDS
            END       START
                  
               
                           
            
                  

lurning 发表于 2014-4-24 14:16:18

我也遇到了这个问题,我用debug然后用g命令就可以显示出来。但是我也不知道直接运行部显示是什么原因
页: [1]
查看完整版本: 实验9求解!!!求助!!!