|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
经过一天的测试,修改,终于搞定实验10(3)的拓展版。现分享交流。
assume cs:code
data segment
db 10 dup(0)
data ends
code segment
start:
mov bx, data
mov ds, bx
mov dx, 65432
mov ax, 12345
mov di, 10
mov si, 0
call dtoc
mov dh, 8 ;8行
mov dl, 3 ;3列
mov cl, 2 ;字符属性
call show_str
mov ax, 4c00h
int 21h
dtoc:
mov si, 9 ; 从数据段最大偏移地址开始保存数据
mov di, 10 ; 这里使用di用于除数操作,每次除10
mov cx, dx
jcxz dx_is0 ;如果dx=0,只需考虑ax
push dx
call loopfive
pop dx
mov ax, dx
jmp unknowloop
dx_is0:
mov cx, ax
jcxz num_is0 ; 当数字为0时
jmp unknowloop
num_is0:
mov dl, 0
add dl, 30h
mov ds:[si],dl
ret
unknowloop: ;当高16位dx为0,或者把高16位dx给ax后,因此时ax位数未知,将调用此代码
mov dx,0
div di
add dl, 30h
mov ds:[si],dl
mov cx, ax
jcxz retpoint
dec si
jmp short unknowloop
loopfive: ;当高16位dx !=0 时,低16位ax必须取数字5次
mov cx, 5t
five:
mov dx,0 ;因为只是对低16位ax进行除法运算,所以循环前要把高16位置0
div di
add dl, 30h
mov ds:[si], dl
dec si
loop five
ret
show_str:
mov ax, 0b800h
mov es, ax
mov ah,0
mov al, 160
mul dh
mov di, ax
mov al, 2
mul dl
add di, ax
mov al, cl
save_str:
mov cx,10
sub cx, si
jcxz retpoint
mov dl,[si]
mov es:[di], dl
mov es:[di].1, al
inc si
add di,2
jmp short save_str
retpoint: ret
code ends
end start |
|