8、王爽《汇编语言》笔记_子程序一

1、显示字符串: show_str

;名称:show_str

;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。

;参数:(dh)=行号(取值范围0~24);

;      (dl)=列号(取值范围0~79);

;      (cl)=颜色;

;      ds:si指向字符串的首地址。

;返回:无。

show_str:

     push ax		; 保护数据

     push bx

     push es

     push si

     mov ax,0b800h	; 显存基址

     mov es,ax

     mov ax,160		; 每行所占的字节数

     mul dh		; 行数偏移

     mov bx,ax		;bx=160*dh

     mov ax,2		; 每行位置偏移

     mul dl        	;ax=dl*2

     add bx,ax     	;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址

     mov al,cl     	;把颜色cl赋值al

     mov cl,0		; 清零

show0:

     mov ch,[si]	; 获取数据

     jcxz show1    	;(ds:si)=0时,转到show1执行    

     mov es:[bx],ch	; 写入显存

     mov es:[bx].1,al	; 写入颜色

     inc si        	;ds:si指向下一个字符地址

     add bx,2      	;es:bx指向下一个显存地址

     jmp show0

show1:			; 结束

     pop si		; 取出保存的数据

     pop es

     pop bx

     pop ax

     ret
2、将数据转化为字符串:dtoc

;名称:dtoc

;功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。

;参数:(ax)=word型数据;

;      ds:si指向字符串首地址。

;返回:无。

dtoc:push ax		; 保存数据

     push bx

     push cx

     push dx

     push si

     push di

     mov di,0

d10: mov dx,0      	;设置被除数高位为0

     mov bx,10     	;除数为10

     div bx

     add dx,30h    	;ax/10的余数+30h,转为字符

     push dx       	;字符入栈

     inc di       	;记录字符个数

     mov cx,ax

     jcxz d11      	;当ax/10的商=0时,转到d11执行

     jmp d10

d11: mov cx,di

d12: pop dx        	;字符出栈

     mov [si],dl

     inc si        	;ds:si指向下一单元

     loop d12

     mov dl,0

     mov [si],dl   	;设置结尾符0

     pop si

     pop di

     pop dx

     pop cx

     pop bx

     pop ax

     ret

3、将字符串小写字母变为大写

;名称:letterc

;功能:将以0结尾的字符中的小写字母转变成大写字母

;参数:ds:si指向字符串首地址

letterc:push si

let: cmp byte ptr [si],0    ;和0进行比较

     je let0                ;如果等于0则转到let0,结束

     cmp byte ptr [si],61h  ;和61h进行比较

     jb let1                ;如果低于60h则转到let1,继续循环

     cmp byte ptr [si],86h  ;和86h进行比较

     ja let1                ;如果高于86h则转到let1,继续循环

     and byte ptr [si],11011111b ;ASCII码的第5位置为0,转为大写

let1:

     inc si

     jmp let

let0:

     pop si

     ret

4、

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值