|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- ;目的;将welcome to masm复制到段地址0B800h
- assume cs:code,ds:data
- data segment;数据段
- db 'welcome to masm'
- data ends
-
- code segment
- start:
- mov ax, 0B800h
- mov ds, ax
-
- mov ax, SEG data
- mov es,ax
-
- mov cx,15
-
- mov bx, 0
- s:mov al,es:[bx]
- mov ds:[bx],al
- inc bx
- loop s
-
- mov ax,4c00h
- int 21h
-
-
- code ends
- end start
复制代码
我的问题:执行之后,b800h的数据不对啊 ?不是welcome to masm
你的代码试图将字符串 "welcome to masm" 复制到段地址 0B800h,但是出现了数据不正确的问题。这可能是因为你没有正确地处理视频内存。
在 IBM PC 兼容的计算机中,B800:0000 是文本模式的视频内存的起始地址。每个字符占用两个字节,一个字节用于字符的 ASCII 码,另一个字节用于字符的属性(如颜色和亮度等)。
在你的代码中,你试图将数据段(其中包含字符串 "welcome to masm")的内容复制到段地址 0B800h,但是你没有处理字符的属性字节。因此,你的字符串的每个字符会被解释为一个字符和其属性,这可能导致显示的结果不是你期望的 "welcome to masm"。
你可以尝试以下修改后的代码:- assume cs:code,ds:data
- data segment
- db 'welcome to masm', 0
- 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, 15
- s:
- mov al, ds:[si]
- mov ah, 07h ; 设置属性,例如,白色字符黑色背景
- mov es:[di], ax
- inc si
- add di, 2 ; 因为每个字符占两个字节,所以这里是加2
- loop s
- mov ax, 4c00h
- int 21h
- code ends
- end start
复制代码 这个代码将字符串 "welcome to masm" 复制到段地址 0B800h,并为每个字符设置了属性(白色字符,黑色背景)。
楼主给个最佳答案呗
|
-
|