求高手看下!!急。。
windows7系统下显示
绿色的字符串“welcome to masm!”
assume cs:codesg ds:datasg
datasg segment
db 'welcome to masm!'
datasg ends
codesg segment
start:
mov ax,0b800h
mov es,ax
mov ax,datasg
mov ds,ax
mov cx,10h
mov di,0h
mov bx,0h
s:
mov dl,[bx]
mov byte ptr es:[di],dl
mov byte ptr es:[di+1], 02h
inc bx
add di,2h
loop s
mov ax,4c00h
int 21h
codesg ends
end start
求解是程序错了还是windows7下显示不出来啊!
求解答。。
[解决办法]
;你的程序我大致看懂了,不过我不会masm的语法,下面写的都是nasm的语法。
;程序:
org 0100h;定位到COM文件起始位置.别问我为什么要这样,我也不知道.
mov ah,00h
mov al,03h
int 10h;调用显示模式设置中断
mov ax,0b800h
mov es,ax;定位到文本显存段.一定要有这句,否则下面的字符会看不到的,因为计算机在不
写段地址的情况下默认的是ds段,而我们的显存是在es段.
mov cx,10h;循环计数用,你懂的.
mov bx,0h;显存偏移位置
mov di,datasg;字符位置
s:
mov ah,[di];将字符串中第di个位置的字符存入ah
mov [es:bx],ah;将字符送入显存地址
inc bx
inc bx;这两句是bx=bx+2,也就是将bx指向显存的下一个字符位置.文本下显存的字符是存在偶数
行的,奇数行放的是这个奇数的前面一个的偶数所代表的字符的属性.这个你懂了的额
inc di;指向下一个字符
loop s
jmp $
datasg db "welcome to masm!"
;值得注意的是,org 0100h一定要有,不然显示出来的是一堆乱码(masm 中需不需要我不清楚,刚去
百度了下,貌似需要的额)
;一定要设置显示模式,不然什么也不显示.按理说,程序默认的就是文本模式,但不知道为什么不设
置它就是不显示.
;你的程序中:mov dl,[bx]应该是想让下一个字符存入dl中,但是,悲剧的是你的字符首地址是存入
ax里面去了(mov ax,datasg).你把mov ax,datasg删掉,并且把:mov bx,0h改成:mov bx,datasg就好
了(不知道masm里面是不是这样将地址存入寄存器中,你自己看着办吧)
;我写的这个程序用nasm编译运行成功了,也是在window7下哦.
[解决办法]
这个程序的目的是直接修改现存显示字符
在实际操作中与硬件是相关的
教材中的显卡都老掉牙了
新的硬件结构有些变化,所以显示不出来
调这种程序就是经常碰到这个问题,不好验证
楼主找到好办法可以一起讨论
[解决办法]
win7上还没试过。还是用虚拟机比较好