|
发表于 2017-8-12 14:00:11
|
显示全部楼层
本帖最后由 丶忘却的年少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种,要是放循环里会出界
复制代码
如果你觉得没错请点"最佳答案" ;如有问题可以追问 |
|