|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 电器维修 于 2013-12-31 00:05 编辑
本人是个家电维修技师,白天没空学,也就每天晚上学习2~3小时,这个程序是我个人思考,个人编写的。虽然这个思路有点笨
但还是比较直观看懂的。
希望师傅们指点!!谢谢
assume cs:codesg,es:table,ss:stacksg
table segment
db 32 dup (0)
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985'
db '1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2795000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4073,5635,8226
dw 11542,14430,15257,17800
dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239
dw 260,304,333
table ends
stacksg segment
dd 40 dup (0)
stacksg ends
codesg segment
start: mov ax,table
mov es,ax
mov si,32
mov di,0 ;在这里DI只做转换好的10进制数存放的变量
mov ax,0b800h
mov ds,ax
mov bx,1f4h ;第一列显示的开始地址
call xian
add bx,18 ;定位第二列显示的开始地址
call divdw
add bx,20 ;第三列的开始地址
call div1
mov bx,230h ;第四列的开始地址
call div1
mov ax,4c00h
int 21h
xian: push bx
mov cx,21
xian2: push cx
mov cx,4
xian1: mov ah,2
mov al,es:[si]
mov [bx],al
mov [bx+1],ah
inc si
add bx,2
loop xian1
add bx,0a0h
sub bx,8 ;这里的8是应为字符占用4个字节背景也占用4个字节
pop cx
loop xian2
pop bx
ret
divdw: mov cx,21
zx: push cx
push bx
mov bp,0 ;这里只用BP记下次数
mov di,0
mov ax,es:[si]
mov dx,es:[si+2]
divdw1: push ax
mov cx,0ah
mov ax,dx
sub dx,dx
div cx
mov bx,ax
pop ax
div cx
add dx,30h
push dx
mov dx,bx
inc bp
mov cx,dx
jcxz ok0
jmp divdw1
ok0: mov cx,ax
jcxz kaishi
jmp divdw1
kaishi: mov cx,bp
b: pop es:[di]
inc di
loop b
pop bx
mov dh,2
mov di,0
mov cx,bp
erlie: mov dl,es:[di]
mov [bx],dl
mov [bx+1],dh
inc di
add bx,2
loop erlie
add si,4
add bx,0a0h
sub bx,bp
sub bx,bp
pop cx
loop zx
mov bx,208h
ret
div1: mov cx,21
e: push cx
push bx
mov bp,0
mov di,0
mov dx,0
mov ax,es:[si]
mov bx,10 ;要转化字符是十进制的
a: div bx
add dx,30h
push dx ;将得到的每个余数存入栈
inc bp ;记录除的次数
mov cx,ax
jcxz hao ; 判断商是否为0了
sub dx,dx ; 将dx清下零,跟人感觉有没有这一步都一样!
jmp a
hao:mov cx,bp
yi: pop es:[di]
inc di
loop yi ;利用记录的次数当作循环的次数,这里我投机取巧让每次出栈的数据压到上一个出栈的数据的高位 反正都是0!
pop bx
mov dh,2
mov di,0
mov cx,bp
sansi: mov dl,es:[di]
mov [bx],dl
mov [bx+1],dh
inc di
add bx,2
loop sansi
add si,2
add bx,0a0h
sub bx,bp ;这里减两次记数是因为占得字符和背景。
sub bx,bp
pop cx
loop e
ret
codesg ends
end start
a4.zip
(1.48 KB, 下载次数: 1)
上传完代码也看太乱,又加了个附件,都是一样的!
|
-
|