本帖最后由 丶忘却的年少o 于 2017-8-12 14:03 编辑 assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!';定义显示的字符
db 02h,24h,71h ;定义颜色
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov ax,stack
mov ss,ax
mov sp,10h
mov ax, 0b872h
mov cx,3
s: push cx
push ax
push bx
mov si,0
mov di,0
mov es,ax
mov cx,10h
pop bx ;bx放在循环外面,否则每次都出栈把别的数据代入了
s1: mov al,ds:[si]
mov es:[di],al
inc si
add di,1 ;此处+1,理由见注释1
mov al,ds:[bx+10h] ;此处为al,一个字节
;mov di,1 删除这条,理由见注释1
mov es:[di],al ;此处也改为al
;add bx,1 移到loop s1后面,理由见末尾注释2
add di,1 ;此处+1,前面已经把di定位到属性地址,+1就是ASCII地址
loop s1
add bx,1
pop ax
add ax,0ah ;这个ax是给es的,段地址是要×16的,所以只要给16就好了
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
;注释1:既然你上面有di,这里就不要重复定义了,直接加1到属性地址就好
;注释2:每一句是同一个颜色的;颜色就3种,要是放循环里会出界
如果你觉得没错请点"最佳答案";如有问题可以追问 |