汇编语言实验十

这篇博客介绍了汇编语言实验中遇到的两个问题:一是如何在显示字符串时处理寄存器限制,二是如何解决除法溢出问题。针对溢出问题,提出了将32位数据的dx或16位ah通过除法运算削减数值的解决方案。实验三讨论了如何将十进制数转换为ASCII码串,并提出了利用除法和余数判断循环结束的方法。

实验一:显示字符串 在指定的位置,用指定的颜色,显示一个用0 结束的字符串

参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79)

返回:无

思路: 计算显示字符开始处的 位置  第几行第几列  加上基础地址   然后逐个字符进行赋值

问题一:

出现了 must be index or base register       因为使用寄存器相对寻址,只能采用bx,bp,si或di

不能使用dx

assume cs:code
;显示字符串
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79)  (cl)=颜色 ds:si指向字符串的首地址
;返回: 无
;应用举例:在屏幕的8行3列,用绿色显示data段的字符串
data segment
	db 'Welcome to masm!',0
data ends

code segment
start:  mov dh,8
	mov dl,3
	mov cl,2
	mov ax,data
	mov ds,ax
	mov di,0
	call show_str

	mov ax,4c00h
	int 21h
show_str:push dx
	push cx
	push di

	mov ax,0b800h
	mov es,ax
	mov al,160
	dec dh	      ;从前一行末尾算起
	mul dh        ;将乘积结果保存在ax中
	add dl,dl						;修改了dx
	add al,dl     ;因为es中的地址是从双地址内存开始的
	mov bx,ax     ;地址参数赋值给bx                    
	mov al,cl     ;颜色参数赋值给al

s:	mov cl,ds:[di]   	;开始进行字母赋值           修改了cx
	mov ch,0
	jcxz ok
	mov
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值