电器维修 发表于 2013-12-31 00:02:43

第十章的课程设计1 个人思路

本帖最后由 电器维修 于 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:
mov ,al
mov ,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:
         mov dx,es:
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:
         inc di
         loop b
   
   pop bx

   mov dh,2
         mov di,0
         mov cx,bp
erlie:   mov dl,es:
         mov ,dl
         mov ,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:
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:
   inc di
loop yi                     ;利用记录的次数当作循环的次数,这里我投机取巧让每次出栈的数据压到上一个出栈的数据的高位 反正都是0!

pop bx

   mov dh,2
         mov di,0
         mov cx,bp
sansi:   mov dl,es:
         mov ,dl
         mov ,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


上传完代码也看太乱,又加了个附件,都是一样的!


网络学习 发表于 2013-12-31 00:35:18

好久没有回来了

页: [1]
查看完整版本: 第十章的课程设计1 个人思路