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、