汇编语言实验9

assume cs:code

data segment

db 'w e l c o m e   t o   m a s m ! ';注意空格
db 02h, 24h, 71h ;属性区

data ends

 
stack segment

db 16 dup (0)

stack ends

 
code segment

start:  mov ax, data
        mov ds, ax;设置ds指向data段
        mov ax,0B800h
        mov es,ax;设置es指向显示缓冲区
        mov ax,stack
        mov ss,ax
        mov sp,10h;设置ss,sp指向栈

        mov bx,720h;自己算出来需要复制的开始偏移位置为720h,复制完一串字符串用bx+=0a0h换行1
        mov bp,20h;设置bp让data:[bp]能指向属性区
        
        mov cx,3
     s: push cx

        mov cx,16
        mov si,0

     s0:mov al,ds:[si]
        mov es:[bx+si],al;复制data中字符
        inc si
        mov al,ds:[bp]
        mov es:[bx+si],al;复制属性
        inc si
        loop s0;用s0循环复制一串字符串

        add bx,0a0h;换行复制字符串
        inc bp;指向下一个颜色属性
        pop cx
        loop s
   
        mov ax,4c00h
        int 21h

code ends

end start

重写了实验9更新代码如下

assume cs:code

data segment
	db 'welcome to masm!';注意空格
	db 02h, 24h, 71h ;属性区
data ends

 
stack segment
	db 16 dup (0)
stack ends

 
code segment

start:	mov ax, data
	mov ds, ax		;设置ds是data的段地址
	mov ax,0B800h
	mov es,ax		;设置es为显示缓冲区的段地址
	mov ax,stack
	mov ss,ax
	mov sp,16		;设置ss:sp栈底


	mov bx,11*160		;11*160使di指向第12行
	mov bp,16		;ds:bp指向属性区

	mov cx,3
s:	push cx
	mov si,0
	mov di,32*2		;32*2使di指向每行开始复制的列
	mov cx,16
s0:	mov al,[si]
	mov es:[bx+di],al		;复制data段中的字符到显存中
	inc di
	mov al,ds:[bp]
	mov es:[bx+di],al		;复制属性
	inc si
	inc di
        	loop s0			;循环复制一行字符串

	add bx,160		;显存换行
	inc bp			;ds:bp;指向下一个颜色属性
	pop cx
	loop s
   
	mov ax,4c00h
	int 21h

code ends

end start

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值