1 assume cs:code,ds:data,ss:stack
2 //①实现32位/16位非溢出②十六进制传十进制并保存显示
3 data segment
4 dd 123456h,7891011h,12131415h
5 data ends
6
7 stack segment
8 dd 16 dup(0)
9 stack ends
10
11 code segment
12 start:
13 mov ax,data
14 mov ds,ax //定位数据段
15 mov ax,0020h
16 mov es,ax //临时储存段
17 mov ax,stack
18 mov ss,ax
19 mov sp,20h //定位栈段
20 mov si,0 //遍历每个数据开始
21 mov di,0 //转化成的数字串遍历
22 mov cx,03h //需要转化3个字符
23 s:
24 push cx
25 mov dx,ds:[si+2]
26 mov ax,ds:[si]
27 mov bp,1
28 mov cx,0ah
29 s1:
30 call spi_div //非溢出除法
31 push cx //对每次运算余数压栈
32 push dx
33 push ax
34 add ax,dx //把低位与高位数相加,溢出?
35 mov cx,ax
36 jcxz s2 //判断商是否为0,为0则结束除
37 mov cx,0ah
38 inc bp
39 pop ax
40 pop dx
41 jmp short s1 //持续除10,取余
42 s2:
43 pop ax
44 pop dx
45 call dis_tra //显示字符串
46 add si,4
47 pop cx
48 loop s
49 call copy_to //复制到目的地
50 mov ax,4c00h
51 int 21h
52 spi_div:
53 push ax
54 main:
55 mov ax,dx
56 mov dx,0
57 div cx
58 mov bx,ax
59 pop ax
60 div cx
61 mov cx,dx
62 mov dx,bx
63 ok:
64 ret
65 dis_tra:
66 pop bx
67 mov cx,bp
68 main1:
69 pop ax
70 add al,30h
71 mov byte ptr es:[di],al
72 inc di
73 loop main1
74 ok1:
75 push bx
76 ret
77 copy_to:
78 mov si,0
79 mov cx,di
80 s3:
81 mov al,es:[si]
82 mov ds:[si],al
83 inc si
84 loop s3
85 ok2:
86 ret
87 code ends
88
89 end start