|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code,ds:data
data segment
db 'Welcome to masm!'
data ends
code segment
start:
mov ax,data
mov ds,ax ;将ds视作数据段
mov si,0 ;索引数据'Welcome to masm!'的偏移地址设为0
mov di,0 ;数据所应该放置的位置的偏移地址设为0
mov cx,16 ;循环16次
mov ax,0b800h
mov es,ax ;将es视作目标处的段地址,并将它的值赋为b800h
r: mov al,[si]
mov es:[di],al ;将单个字符由data段,移到目标即es:0000处
mov byte ptr es:[di+1],00000010b ;将控制字符的属性也移到es:0001处
inc si ;si递增1
add di,2 ;di递增2
loop r ;循环16次
mov ax,4c00h
int 21h
code ends
end start
想询问各位大佬,为什么'Welcome to masm!'写不进es:0000处,编译链接debug都没问题的......
本帖最后由 jackz007 于 2019-3-5 20:05 编辑
代码没有问题,只要加上清屏或等待键盘输入便可以看到效果:
- assume cs:code,ds:data
- data segment
- db 'Welcome to masm!'
- data ends
- code segment
- start:
- mov ah,6h ;功能号
- mov al,0
- mov ch,0 ;左上角行号
- mov cl,0 ;左上角列号
- mov dh,24 ;右下角行号
- mov dl,79 ;右下角列号
- int 10h ;清屏
- mov ax,data
- mov ds,ax ;将ds视作数据段
-
- mov si,0 ;索引数据'Welcome to masm!'的偏移地址设为0
- mov di,0 ;数据所应该放置的位置的偏移地址设为0
-
- mov cx,16 ;循环16次
-
- mov ax,0b800h
- mov es,ax ;将es视作目标处的段地址,并将它的值赋为b800h
-
- r: mov al,[si]
- mov es:[di],al ;将单个字符由data段,移到目标即es:0000处
-
- mov byte ptr es:[di+1],00000010b ;将控制字符的属性也移到es:0001处
-
- inc si ;si递增1
- add di,2 ;di递增2
-
- loop r ;循环16次
- xor ah,ah
- int 16h ;等待键盘输入
- mov ax,4c00h
- int 21h
-
- code ends
- end start
复制代码
|
|