实验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
一个循环就可以解决。没细看,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吗?
直接运行EXE 文件,在屏幕左上角上只出现一个闪烁的点,然后就什么都没有了,直至手动关闭!但用debug调试却可以出现想要的结果:
风神翼龙 发表于 2014-7-7 22:41
直接运行EXE 文件,在屏幕左上角上只出现一个闪烁的点,然后就什么都没有了,直至手动关闭!但用debug调试 ...
不必纠结于这个问题 在XP下去掉JMP $这句完美运行....应该是(编绎器或win7以上操作系统)的问题 你这pushax 怎么还可以把 ax跟es 挂钩
就是来顶 支持
页:
[1]