风神翼龙 发表于 2014-7-6 22:22:09

实验9存在的问题

以下是我的程序
assume cs:code ,ds:data ,ss:stack

datasegment

db 'Welcome to Masm !' ;17个字符

db 02h ,24h ,71h ;黑底绿字、绿底红字、白底蓝字

data ends
stacksegment
dw 9 dup (0) ;
stackends
code segment
start:mov ax ,data
   
      mov ds ,ax
      mov ax ,stack
      mov ss , ax
      mov sp , 12h
   
      mov cx ,3;用于控制3行的大循环
      movax ,0b872h;屏幕中间即第12行的段地址
      mov bx ,0 ;用于索引颜色属性
s2:   push ax
      push cx
      push bx
      moves ,ax
      movsi ,0 ;用于索引代码段偏移地址
      movdi ,0 ;用于索引目的段偏移地址
      mov cx ,11h
s1:   moval ,ds:
      moves: ,al

      moval ,ds:11h
      
      moves: ,al
      inc si
      add di ,2
      loop s1
      pop bx
      inc bx
   
      pop cx
      pop ax
   
      add ax ,0ah
      loop s2
      jmp $      如果去掉此句,运行exe文件时就会一闪而过,可是小甲鱼的程序没有此句为什么在运行时没一闪而过?
      mov ax ,4c00H
      int 21H
code   ends
end   start

为什么无法在屏幕上显示出:绿字、绿底红字、白底蓝字的三行"Welcom to Masm !"?

policewj 发表于 2014-7-7 00:07:03

风神翼龙 发表于 2014-7-7 12:42:26

policewj 发表于 2014-7-7 00:07
一个循环就可以解决。没细看,17个字符 mov cx ,11h好像不太够。
stacksegment
dw 9 dup (0) ;


'Welcome to Masm !' 是17个字符不加属性的话也就是17个字节,自然要循环17次才能取完。十进制的17对应16进制的11H。
dw 9 dup (0) ;开辟18个字节的栈空间。起初SP是指向栈底的下一个字节单元的。18个字节的空间其偏移地址是0~11h,栈底11h的下一个单元不就是12h吗?

风神翼龙 发表于 2014-7-7 22:41:59

直接运行EXE 文件,在屏幕左上角上只出现一个闪烁的点,然后就什么都没有了,直至手动关闭!但用debug调试却可以出现想要的结果:

policewj 发表于 2014-7-8 07:05:20

vkevke_3437 发表于 2014-7-8 08:28:17

风神翼龙 发表于 2014-7-7 22:41
直接运行EXE 文件,在屏幕左上角上只出现一个闪烁的点,然后就什么都没有了,直至手动关闭!但用debug调试 ...

不必纠结于这个问题 在XP下去掉JMP $这句完美运行....应该是(编绎器或win7以上操作系统)的问题   

839801569 发表于 2015-11-29 14:47:09

你这pushax 怎么还可以把 ax跟es 挂钩

孤心傲 发表于 2015-11-30 13:05:15


就是来顶 支持
页: [1]
查看完整版本: 实验9存在的问题