|
主题 : : 数值显示 编译通过 欢迎各位朋友交流 [待解决] |
回复[ 0次 ]
点击[ 275次 ] | |
荣誉值:2
信誉值:0
注册日期:2010-03-26 18:29 |
assume cs:code
data segment
db 10 dup (0)
data ends
stack segment ;用来中转数字字符
db 16 dup (0)
stack ends
code segment
start: mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:mov bx,stack
mov ss,bx
mov bp,0
mov bl,10
s:call divdw
add dl,30h
mov byte ptr ss:[bp],dl ;传递字符
inc bp
mov cx,ax
jcxz ok
jmp short s
ok:
mov cx,bp ;设置循环次数
dec bp ;因为上面的jcxz之前,还自加了一次,这使得ss:[bp]
指向第一个字符‘1’
s1:mov al,ss:[bp] ;循环传送字符到ds:[si]中
mov ds:[si],al
dec bp
inc si
loop s1
ret
divdw:mov dl,al ;16位除法溢出处理
mov al,ah
mov ah,0
div bl
mov dh,al
mov al,dl
div bl
mov dl,ah ;余数在dl中
mov ah,dh
ret
show_str: mov ax,0b800h ;显示字符串
mov es,ax
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add ax,bx
mov bp,ax
mov di,0
mov si,0
s2: mov al,ds:[si]
mov es:[bp+di],al
mov cl,al
mov ch,0
jcxz ok1
mov cl,2
mov es:[bp+di+1],cl
inc si
add di,2
jmp short s2
ok1:ret
code ends
end start | | |