首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

求高手看上!

2012-12-29 
求高手看下!!急。。windows7系统下显示 绿色的字符串“welcome to masm!”assume cs:codesg ds:datasgdatasg s

求高手看下!!急。。
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上还没试过。还是用虚拟机比较好

热点排行