|
楼主 |
发表于 2017-5-7 15:00:49
|
显示全部楼层
assume cs:code,ds:data
data segment ;存入修改好的字符
db 10 dup(0)
data ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc ;实现将word型整数转化为ASCII字符串并存储
mov dh,8 ;屏幕上显示的位置
mov dl,3
mov cl,0cah
call show_str ;打印字符串
mov ax,4c00h
int 21h
dtoc:push dx ;数值显示的子程序定义
push cx
push ax
push si
push bx
mov bx,0 ;BX在子程序中存放位数,用栈来临时存放修改后的字符
s1:mov cx,10d
mov dx,0
div cx ;除以十
mov cx,ax ;得到的商1266赋给CX
jcxz s2 ;当商为0则跳到S2
add dx,30h ;将余数加上30H得到相应的ASCII码
push dx
inc bx
jmp short s1
s2: add dx,30h ;当商为0,余数为个位
push dx
inc bx
mov cx,bx
mov si,0
s3: pop ax ;将栈中的数据依次出栈放到指定内存中
mov [si],al
inc si
loop s3
okay: pop bx
pop si
pop ax
pop cx
pop dx
ret ;数值显示的子程序结束
show_str:
push bx
push cx
push si
mov al,0a0h
dec dh
mul dh ;每行160字节乘行数的结果放入AX
mov bx,ax
mov al,2 ;第一个字节放字符,第二个字节放属性,
mul dl ;相乘得到每个要显示字符的位置
sub ax,2 ;从第三列开始显示,减2
add bx,ax ;最后确定的位置
mov ax,0B872h
mov es,ax
mov di,0
mov al,cl
mov ch,0
s:mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
inc si
add di,2
jmp short s
ok: pop si
pop cx
pop bx
ret
code ends
end start
|
|