lyxxjfzx 发表于 2016-4-9 17:35:45

课程设计一

本帖最后由 lyxxjfzx 于 2016-4-9 17:39 编辑

assume cs:code

data segment
dd 1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,
   1988,1989,1990,1991,1992,1993,1994,1995
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,
   590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
dd 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,
   8226,11542,14430,15257,17800
dd 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239,260,304,333
data ends

code segment
start:mov ax,0b800h
          mov es,ax
          mov ax,data          ;es指向显示缓存区 ds指向data段数据
          mov ds,ax
          mov dx,0             ;先归零要不然后面循环会出错,死循环
          mov di,0
          mov bp,0          
               
d:          mov ax,ds:   ;先送高位数据判断是否为0 为0跳走 不为0继续执行
          mov cx,ax
          jcxz e              
          mov cx,10            ;高位数据除以10
          div cx
          push ax            ;高位的商入栈
          mov cx,ax
          jcxz e               
          mov ax,ds:       ;低位数送入AX高位的余数自动存入DX,相当于进位
d1:   pop di               ;高位的商放入di
          mov cx,10            ;【高位数除以10的余数进位10000H+低位数】/除数
          div cx               
          add dx,030h
          push dx            ;【高位数除以10的余数进位10000H+低位数】/除数 的余数+30H就是10进制的字符
          add si,1             ; 记录入栈了几个数               
          mov dx,di            ;高位的商放入DX
          mov di,ax            ;低位的商放入di
          mov ax,dx            ;高位的商放入ax
          mov dx,0
          div cx               ;高位的商除以10
          mov cx,ax
          jcxz b1
          push ax
          mov ax,di            ;低位的商送入ax
          jmp d1        
               
b1:   mov ax,di
          mov di,0
          jmp b
      
e:       mov ax,ds:
b:       mov cx,10         
          div cx
          add dx,030h
          push dx            ;高位的数除完后跳到此段继续除低位的数
          mov dx,0
          add si,1
          mov cx,ax            ;入栈后记录个数 直到除为0然后跳走
          jcxz cc
          jmp b       
                  
cc:      mov cx,si            ;记录个数送入CX用以结束循环          
cc1:    pop ax
          mov ah,7
          mov es:,ax    ;取得的字符 高位加上字符属性白色7 送入显示缓存区
          add di,2
          loop cc1             ;直到记录字符释放完毕 结束循环
          mov si,0
          mov di,0
          add bp,160         ;bp用以定位行数
          add bx,4             ;ds指向下个数的地址
          mov cx,336         ;4个数据段每段21个数 每个数占4个内存单元 24*4*4=336
          sub cx,bx            ;336用以判断是否到最后一个数据 当bx指向最后一个单元后 相减为0跳走
          jcxz g               
          mov cx,252         ;用以判断第3个数据段是否结束
          sub cx,bx
          jcxz i                
          mov cx,168         ;用以判断第2个数据段是否结束
          sub cx,bx
          jcxz h
          mov cx,84            ;用以判断第1个数据段是否结束
          sub cx,bx               
          jcxz j
          jmp d                

j:      mov bp,40         ;第一个数据段结束后 bp定位到40处开始第二段数据写入缓存
          jmp d               ;显示缓存每行160个字符 4段数据 160/4=40 平均分为4段
h:       mov bp,80         ;第三段
          jmp d
i:      mov bp,120          ;第四段
          jmp d
g:       mov ax,4c00h
          int 21h
               
code ends
end start

lyxxjfzx 发表于 2016-4-9 17:43:56

注释是完善代码前写的有些可能跟代码不一样。
写了2种一种是上面除10转换成10进制再写入显示缓存区
另一种下面是直接定义字符然后写入显示缓存区
代码贴上来老是有些对不齐。

lyxxjfzx 发表于 2016-4-9 17:47:39

assume cs:code

data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984',
   '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
db '16',0,'22',0,'382',0,'1356',0,'2390',0,'8000',0,'16000',0,'24486',0,'50065',0,
   '97479',0,'140417',0,'197514',0,'345980',0,'590827',0,'803530',0,'1183000',0,
   '1843000',0,'2759000',0,'3753000',0,'4649000',0,'5937000',0
db '3',0,'7',0,'9',0,'13',0,'28',0,'38',0,'130',0,'220',0,'476',0,'778',0,'1001',0,
   '1442',0,'2258',0,'2793',0,'4037',0,'5635',0,'8226',0,'11452',0,'14430',0,'15257',0,'17800',0
db '5',0,'3',0,'42',0,'104',0,'85',0,'210',0,'123',0,'111',0,'105',0,'125',0,'140',0,'136',0,
   '153',0,'211',0,'199',0,'209',0,'224',0,'239',0,'260',0,'304',0,'333',0
data ends

code segment
start:mov ax,0b800h
         mov es,ax
       mov ax,data
       mov ds,ax
               
b:       mov cx,4
a:       mov al,ds:
         mov ah,7
         mov es:,ax
         add bx,1
         add si,2
       loop a
       add sp,1
       mov cx,21
       sub cx,sp
       jcxz cc
       add si,152
       jmp b
               
      
cc:       mov sp,0
         mov bp,0028H
         mov si,0               
d:      mov al,ds:
         mov ah,7
       mov cl,ds:
       mov es:,ax
       add bx,1
         add si,2
       jcxz f
       jmp d
f:       mov si,0
         add sp,1
         mov cx,21
       sub cx,sp
         add bp,160
       jcxz jj
         jmp d
               
               
jj:       mov sp,0
         mov bp,0050H
         mov si,0               
h:      mov al,ds:
         mov ah,7
       mov cl,ds:
       mov es:,ax
       add bx,1
         add si,2
       jcxz i
       jmp h
i:       mov si,0
         add sp,1
         mov cx,21
       sub cx,sp
         add bp,160
       jcxz gg
         jmp h
               
gg:       mov sp,0
         mov bp,0078H
         mov si,0               
k:       mov al,ds:
         mov ah,7
       mov cl,ds:
       mov es:,ax
       add bx,1
         add si,2
       jcxz l
       jmp k
l:       mov si,0
         add sp,1
         mov cx,21
       sub cx,sp
         add bp,160
       jcxz m
         jmp k

m:      mov ax,4c00h
          int 21h
               
code ends
end start

~风介~ 发表于 2016-4-11 13:46:44

具体要实现什么功能?无图无真相啊!{:10_266:}{:10_266:}
页: [1]
查看完整版本: 课程设计一