芒果0011 发表于 2012-2-18 11:45:00

我的代码哪错了?为什么显示不出来?是不是win7的问题?

assume cs:code,ds:data

data segment
db 'HOW ARE YOU'
data ends

code segment
start:mov ax,data
      mov ds,ax
      mov ax,0b800h
      mov es,ax
      mov si,0
      mov di,0
      mov cx,0bh
      cld
      rep movsb

mov ax,4c00h
int 21h
code ends
end start

hkcx3000 发表于 2012-2-18 12:04:24

显示缓冲区中每个字符是占两个字节的,一个是用于显示字符的ASCII码,另一个是显示属性。你差考虑属性了

芒果0011 发表于 2012-2-18 12:58:22

hkcx3000 发表于 2012-2-18 12:04 static/image/common/back.gif
显示缓冲区中每个字符是占两个字节的,一个是用于显示字符的ASCII码,另一个是显示属性。你差考虑属性了

哦,对,我在改改试试

芒果0011 发表于 2012-2-18 13:40:29

hkcx3000 发表于 2012-2-18 12:04 static/image/common/back.gif
显示缓冲区中每个字符是占两个字节的,一个是用于显示字符的ASCII码,另一个是显示属性。你差考虑属性了

怎么改也显示不出来,晕了,能帮我改改吗?

hkcx3000 发表于 2012-2-18 16:39:43

本帖最后由 hkcx3000 于 2012-2-18 16:40 编辑

我也是初学,水平有限,用笨方法去搞,如果你一定要用movsb的话 assume cs:code
data1 segment
db 'HOW ARE YOU'       ;初始字符串
data1 ends
data2 segment
db 22 dup(?)          ;存放加上属性后的字符串
data2 ends
code segment
start:
      mov dh,0eh   ;属性颜色值,黄色,可改
      mov si,0
      mov di,0
      mov cx,11
s:                  ;整个循环用于给字符串添加上对应属性值
assume ds:data1       ;结果放在data2数据段中
                mov ax,data1
                mov ds,ax
                mov dl,
assume ds:data2
            mov ax,data2
                mov ds,ax
                mov ,dl
                mov ,dh
                inc si
                inc di
                inc di
                loop s
               
      mov ax,0b800h
      mov es,ax
      mov si,0
      mov di,0
      mov cx,16h
      cld
      rep movsb
               
      mov ax,4c00h
      int 21h
code ends
end start
页: [1]
查看完整版本: 我的代码哪错了?为什么显示不出来?是不是win7的问题?