鱼C论坛

 找回密码
 立即注册
查看: 3308|回复: 3

[汇编作业] 课程设计一

[复制链接]
发表于 2016-4-9 17:35:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lyxxjfzx 于 2016-4-9 17:39 编辑
  1. assume cs:code

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

  11. code segment
  12. start:  mov ax,0b800h
  13.           mov es,ax
  14.           mov ax,data          ;es指向显示缓存区 ds指向data段数据
  15.           mov ds,ax  
  16.           mov dx,0             ;先归零要不然后面循环会出错,死循环
  17.           mov di,0
  18.           mov bp,0            
  19.                
  20. d:          mov ax,ds:[bx+2]     ;先送高位数据判断是否为0 为0跳走 不为0继续执行
  21.           mov cx,ax
  22.           jcxz e              
  23.           mov cx,10            ;高位数据除以10
  24.           div cx
  25.           push ax              ;高位的商入栈  
  26.           mov cx,ax
  27.           jcxz e               
  28.           mov ax,ds:[bx]       ;低位数送入AX  高位的余数自动存入DX,相当于进位
  29. d1:     pop di               ;高位的商放入di
  30.           mov cx,10            ;【高位数除以10的余数进位10000H+低位数】/除数
  31.           div cx               
  32.           add dx,030h
  33.           push dx              ;【高位数除以10的余数进位10000H+低位数】/除数 的余数+30H就是10进制的字符
  34.           add si,1             ; 记录入栈了几个数               
  35.           mov dx,di            ;高位的商放入DX
  36.           mov di,ax            ;低位的商放入di
  37.           mov ax,dx            ;高位的商放入ax
  38.           mov dx,0
  39.           div cx               ;高位的商除以10
  40.           mov cx,ax
  41.           jcxz b1
  42.           push ax
  43.           mov ax,di            ;低位的商送入ax
  44.           jmp d1        
  45.                
  46. b1:     mov ax,di
  47.           mov di,0
  48.           jmp b
  49.       
  50. e:       mov ax,ds:[bx]
  51. b:       mov cx,10         
  52.           div cx
  53.           add dx,030h
  54.           push dx              ;高位的数除完后跳到此段继续除低位的数
  55.           mov dx,0
  56.           add si,1
  57.           mov cx,ax            ;入栈后记录个数 直到除为0然后跳走
  58.           jcxz cc
  59.           jmp b       
  60.                   
  61. cc:      mov cx,si            ;记录个数送入CX用以结束循环          
  62. cc1:    pop ax
  63.           mov ah,7
  64.           mov es:[di+bp],ax    ;取得的字符 高位加上字符属性白色7 送入显示缓存区
  65.           add di,2
  66.           loop cc1             ;直到记录字符释放完毕 结束循环
  67.           mov si,0
  68.           mov di,0
  69.           add bp,160           ;bp用以定位行数
  70.           add bx,4             ;ds指向下个数的地址
  71.           mov cx,336           ;4个数据段每段21个数 每个数占4个内存单元 24*4*4=336
  72.           sub cx,bx            ;336用以判断是否到最后一个数据 当bx指向最后一个单元后 相减为0跳走
  73.           jcxz g               
  74.           mov cx,252           ;用以判断第3个数据段是否结束
  75.           sub cx,bx
  76.           jcxz i                
  77.           mov cx,168           ;用以判断第2个数据段是否结束
  78.           sub cx,bx
  79.           jcxz h
  80.           mov cx,84            ;用以判断第1个数据段是否结束
  81.           sub cx,bx               
  82.           jcxz j
  83.           jmp d                

  84. j:        mov bp,40           ;第一个数据段结束后 bp定位到40处开始第二段数据写入缓存
  85.           jmp d               ;显示缓存每行160个字符 4段数据 160/4=40 平均分为4段
  86. h:       mov bp,80           ;第三段
  87.           jmp d
  88. i:        mov bp,120          ;第四段
  89.           jmp d
  90. g:       mov ax,4c00h
  91.           int 21h
  92.                
  93. code ends
  94. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-9 17:43:56 | 显示全部楼层
注释是完善代码前写的有些可能跟代码不一样。
写了2种一种是上面除10转换成10进制再写入显示缓存区
另一种下面是直接定义字符然后写入显示缓存区
代码贴上来老是有些对不齐。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-9 17:47:39 | 显示全部楼层
  1. assume cs:code

  2. data segment
  3. db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984',
  4.    '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
  5. db '16',0,'22',0,'382',0,'1356',0,'2390',0,'8000',0,'16000',0,'24486',0,'50065',0,
  6.    '97479',0,'140417',0,'197514',0,'345980',0,'590827',0,'803530',0,'1183000',0,
  7.    '1843000',0,'2759000',0,'3753000',0,'4649000',0,'5937000',0
  8. db '3',0,'7',0,'9',0,'13',0,'28',0,'38',0,'130',0,'220',0,'476',0,'778',0,'1001',0,
  9.    '1442',0,'2258',0,'2793',0,'4037',0,'5635',0,'8226',0,'11452',0,'14430',0,'15257',0,'17800',0
  10. 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,
  11.    '153',0,'211',0,'199',0,'209',0,'224',0,'239',0,'260',0,'304',0,'333',0
  12. data ends

  13. code segment
  14. start:  mov ax,0b800h
  15.          mov es,ax
  16.          mov ax,data
  17.          mov ds,ax
  18.                
  19. b:         mov cx,4
  20. a:         mov al,ds:[bx]
  21.          mov ah,7
  22.          mov es:[si],ax
  23.          add bx,1
  24.          add si,2
  25.          loop a
  26.          add sp,1
  27.          mov cx,21
  28.          sub cx,sp
  29.          jcxz cc
  30.          add si,152
  31.          jmp b
  32.                
  33.         
  34. cc:         mov sp,0
  35.          mov bp,0028H
  36.          mov si,0               
  37. d:      mov al,ds:[bx]
  38.          mov ah,7
  39.          mov cl,ds:[bx]
  40.          mov es:[si+bp],ax
  41.          add bx,1
  42.          add si,2
  43.          jcxz f
  44.          jmp d
  45. f:         mov si,0
  46.          add sp,1
  47.          mov cx,21
  48.          sub cx,sp
  49.          add bp,160
  50.          jcxz jj
  51.          jmp d
  52.                
  53.                
  54. jj:         mov sp,0
  55.          mov bp,0050H
  56.          mov si,0               
  57. h:      mov al,ds:[bx]
  58.          mov ah,7
  59.          mov cl,ds:[bx]
  60.          mov es:[si+bp],ax
  61.          add bx,1
  62.          add si,2
  63.          jcxz i
  64.          jmp h
  65. i:         mov si,0
  66.          add sp,1
  67.          mov cx,21
  68.          sub cx,sp
  69.          add bp,160
  70.          jcxz gg
  71.          jmp h  
  72.                
  73. gg:         mov sp,0
  74.          mov bp,0078H
  75.          mov si,0               
  76. k:       mov al,ds:[bx]
  77.          mov ah,7
  78.          mov cl,ds:[bx]
  79.          mov es:[si+bp],ax
  80.          add bx,1
  81.          add si,2
  82.          jcxz l
  83.          jmp k
  84. l:         mov si,0
  85.          add sp,1
  86.          mov cx,21
  87.          sub cx,sp
  88.          add bp,160
  89.          jcxz m
  90.          jmp k

  91. m:      mov ax,4c00h
  92.           int 21h
  93.                
  94. code ends
  95. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-11 13:46:44 | 显示全部楼层
具体要实现什么功能?无图无真相啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表