chexi 发表于 2019-3-5 19:06:36

额,或许是逻辑错误

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,
                mov es:,al        ;将单个字符由data段,移到目标即es:0000处
               
                mov byte ptr es:,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都没问题的......{:5_100:}

jackz007 发表于 2019-3-5 19:49:12

本帖最后由 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,
                mov es:,al                           ;将单个字符由data段,移到目标即es:0000处
               
                mov byte ptr es:,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

chexi 发表于 2019-3-6 17:44:04

感谢大佬{:5_109:}
页: [1]
查看完整版本: 额,或许是逻辑错误