汇编语言 第三版 王爽 实验10-1 编写子程序 之 显示字符串

题目:



注意事项:

1.计算偏移地址的时候,以bx作为偏移量,ax不行

例如 es:[bx+si]  而不是 es:[ax+si]

2.子程序开始的时候把所有的寄存器入栈,方便接下来使用,结束的时候出栈

3.计算数组偏移地址的时候,用mul

4.参考博客

代码:

assume cs:code,ds:data,ss:stack

data segment
	db 'welcome to masm!',0
data ends

stack segment
	dw 8 dup (0)
stack ends

code segment
start:  mov dh,8
	mov dl,3      ;第八行,第三列

	mov cl,2      ;颜色

	mov ax,data
	mov ds,ax     ;ds指向数据段

	mov si,0
	call show_str

	mov ax,4c00h
	int 21h

show_str:
	push dx
	push cx
	push ax
	push ss
	push si    ;子程序开始所有寄存器入栈

	mov ax,0B800h
	mov es,ax    ;es指向显示的起始地址

;计算行偏移量
	mov al,0a0h ;160个字节一行
	dec dh	    ;行号减一,00 - dh-1  共dh行
	mul dh      ;相乘  结果放在ax里
	mov bx,ax   ;偏移量
	
	mov al,2   ;一列两个字符
	dec dl      ;列号减一,00 -dl-1 共dl列
	mul al
	add bx,ax  ;偏移地址计算完成

	mov di,0     ;di字符读取时候每次的偏移 每次加1
	mov si,0
	
	mov al,cl   ;颜色暂时保存在al里 线面cx需要用到
s1:	
	mov ch,0    ;置0
	mov cl,ds:[di]  ;字符放在cl里
	jcxz ok
	mov ch,al   
	mov es:[bx+si],cx  	;字符颜色一起放入显示位置

	add si,2
	inc di
jmp short s1
ok: 
	pop si    ;子程序开始所有寄存器入栈
	pop ss
	pop ax
	pop cx
	pop dx
	ret

code ends
end start

结果:

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值