assume cs:codesg,ds:datasg,ss:stack
datasg segment
dw 12666,1,8,3,38
datasg ends
stack segment
dw 64 dup(0)
stack ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov si,0 ;ds:si指向字符串的首地址
mov ax,stack
mov ss,ax
mov sp,128
mov ax,12345
call dtoc ;把对应的整型的数转换为ASCII码
;初始化打印位置
mov dh,8 ;行号
mov dl,3 ;列数
mov cl,2 ;绿色
call show_str
mov ax,4c00h
int 21h
dtoc:
push ax
push bx
push cx
push dx
push si ;把要用的寄存器值保存起来
mov bx,0 ;bx用来存放位数
convert:
mov cx,10 ;
mov dx,0
div cx ;除以10
mov cx,ax ;对应的商赋值给cx
jcxz s0 ;商为0代表除到个位了
add dx,48 ;dx存放的余数加上30h转换为对应的ASCII码
push dx ;栈中存储ASCII码
inc bx
jmp short convert
s0:
add dx,48 ;这个时候是把个位转换为ASCII码,因为s0是从jcxz s0跳过来的,没有经过add dx,30h
push dx
inc bx
mov cx,bx ;总共bx个位数,所以循环bx次
mov si,0
s1:
pop ax
mov [si],al ;存放到相应内存中
inc si
loop s1
mov ax,0
mov [si],al ;在末尾填0作为打印结束符
pop si
pop dx
pop cx
pop bx
pop ax
ret ;返回
;打印dh行dl列的字符串
show_str:
push cx
push si
mov ax,0b800h
x86汇编--(九)打印整型数据
最新推荐文章于 2023-06-15 10:37:44 发布