| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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
 
  复制代码 
 
 
 |   
 
 
 
 |