鱼C论坛

 找回密码
 立即注册
查看: 2684|回复: 4

[技术交流] 课程设计1

[复制链接]
发表于 2012-3-28 13:16:41 | 显示全部楼层 |阅读模式

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

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

x
入门级的,方法比较笨,大家多指点。
  1. assume cs:code,ds:data
  2. data segment
  3. db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4. db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  5. db '1993','1994','1995'
  6. ;data:54h
  7. dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  8. dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  9. ;data:0a8h
  10. dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  11. dw 11542,14430,15257,17800
  12. data ends
  13. code segment
  14. start:
  15. call nf
  16. call sr
  17. call gy
  18. call rjsr

  19. mov ax,4c00h
  20. int 21h
  21. nf:
  22. push ax
  23. push ds
  24. push es
  25. push bx
  26. push si
  27. push cx

  28. mov ax,data
  29. mov ds,ax

  30. mov ax,0b800h
  31. mov es,ax

  32. mov bx,0
  33. mov si,0

  34. mov cx,21
  35. nf1:
  36. push cx
  37. mov cx,4
  38. nf0:
  39. mov al,[bx]
  40. mov es:[si],al
  41. mov byte ptr es:[si+1],2
  42. inc bx
  43. add si,2
  44. loop nf0

  45. add si,98h
  46. pop cx
  47. loop nf1
  48. pop cx
  49. pop si
  50. pop bx
  51. pop es
  52. pop ds
  53. pop ax
  54. ret
  55. sr:
  56. push ax
  57. push bx
  58. push cx
  59. push dx
  60. push ds
  61. push es
  62. push si
  63. push di
  64. push bp
  65. mov ax,data
  66. mov ds,ax

  67. mov ax,0b800h
  68. mov es,ax

  69. mov bx,0h
  70. mov si,54h
  71. mov di,20h
  72. mov bp,0

  73. mov cx,21
  74. sr4:
  75. push cx
  76. push di

  77. mov dx,[si+2]
  78. mov ax,[si]
  79. sr1:
  80. mov cx,10
  81. call divdw
  82. add cx,30h
  83. push cx
  84. inc bp
  85. mov cx,ax
  86. jcxz sr0
  87. jmp short sr1
  88. sr0:
  89. mov cx,dx
  90. jcxz sr2
  91. jmp short sr1
  92. sr2:
  93. mov cx,bp
  94. sr3:
  95. pop [bx]
  96. inc bx
  97. loop sr3
  98. mov bx,0
  99. mov ch,0
  100. sr6:
  101. mov cl,[bx]
  102. jcxz sr5
  103. mov es:[di],cl
  104. mov byte ptr es:[di+1],2
  105. inc bx
  106. add di,2
  107. jmp short sr6
  108. sr5:
  109. add si,4
  110. pop di
  111. add di,0a0h
  112. mov bx,0
  113. mov bp,0
  114. pop cx
  115. loop sr4
  116. pop bp
  117. pop di
  118. pop si
  119. pop es
  120. pop ds
  121. pop dx
  122. pop cx
  123. pop bx
  124. pop ax
  125. ret
  126. divdw:
  127. ;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
  128. ;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,(cx)=除数。
  129. ;返回:(dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数。
  130. push bx
  131. push ax
  132. mov ax,dx
  133. mov dx,0
  134. div cx
  135. mov bx,ax
  136. pop ax
  137. div cx
  138. mov cx,dx
  139. mov dx,bx
  140. pop bx
  141. ret
  142. gy:
  143. push ax
  144. push bx
  145. push cx
  146. push dx
  147. push ds
  148. push es
  149. push si
  150. push di
  151. push bp
  152. mov ax,data
  153. mov ds,ax

  154. mov ax,0b800h
  155. mov es,ax

  156. mov bx,0
  157. mov si,0a8h
  158. mov di,40h
  159. mov bp,0

  160. mov cx,21
  161. gy1:
  162. push cx
  163. push di

  164. mov ax,[si]
  165. mov dx,0
  166. gy0:
  167. mov cx,10
  168. call divdw
  169. add cx,30h
  170. push cx
  171. inc bp
  172. mov cx,ax
  173. jcxz gy3
  174. jmp short gy0
  175. gy3:
  176. mov cx,dx
  177. jcxz gy2
  178. jmp short gy0
  179. gy2:
  180. mov cx,bp
  181. gy4:
  182. pop [bx]
  183. inc bx
  184. loop gy4
  185. mov bx,0
  186. mov ch,0
  187. gy6:
  188. mov cl,[bx]
  189. jcxz gy5
  190. mov es:[di],cl
  191. mov byte ptr es:[di+1],2
  192. inc bx
  193. add di,2
  194. jmp short gy6
  195. gy5:
  196. add si,2
  197. pop di
  198. add di,0a0h
  199. mov bx,0
  200. mov bp,0
  201. pop cx
  202. loop gy1
  203. pop bp
  204. pop di
  205. pop si
  206. pop es
  207. pop ds
  208. pop dx
  209. pop cx
  210. pop bx
  211. pop ax
  212. ret
  213. rjsr:
  214. push ax
  215. push bx
  216. push cx
  217. push dx
  218. push ds
  219. push es
  220. push si
  221. push di
  222. push bp
  223. mov ax,data
  224. mov ds,ax

  225. mov ax,0b800h
  226. mov es,ax

  227. mov bx,0
  228. mov si,54h
  229. mov di,0a8h
  230. mov cx,21
  231. rjsr1:
  232. push cx
  233. mov ax,[si]
  234. mov dx,[si+2]
  235. mov cx,[di]
  236. call divdw
  237. mov [bx],ax
  238. mov [bx+2],dx
  239. add si,4
  240. add di,2
  241. add bx,4
  242. pop cx
  243. loop rjsr1

  244. mov bx,0
  245. mov si,0
  246. mov di,60h
  247. mov bp,0
  248. mov cx,21
  249. rjsr7:
  250. push cx
  251. push di
  252. mov ax,[si]
  253. mov dx,[si+2]
  254. rjsr0:
  255. mov cx,10
  256. call divdw
  257. add cx,30h
  258. push cx
  259. inc bp
  260. mov cx,ax
  261. jcxz rjsr3
  262. jmp short rjsr0
  263. rjsr3:
  264. mov cx,dx
  265. jcxz rjsr2
  266. jmp short rjsr0
  267. rjsr2:
  268. mov cx,bp
  269. rjsr4:
  270. pop [bx]
  271. inc bx
  272. loop rjsr4
  273. mov bx,0
  274. mov ch,0
  275. rjsr6:
  276. mov cl,[bx]
  277. jcxz rjsr5
  278. mov es:[di],cl
  279. mov byte ptr es:[di+1],2
  280. inc bx
  281. add di,2
  282. jmp short rjsr6
  283. rjsr5:
  284. add si,4
  285. pop di
  286. add di,0a0h
  287. mov bx,0
  288. mov bp,0
  289. pop cx
  290. loop rjsr7
  291. pop bp
  292. pop di
  293. pop si
  294. pop es
  295. pop ds
  296. pop dx
  297. pop cx
  298. pop bx
  299. pop ax
  300. ret
  301. code ends
  302. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-28 16:45:03 | 显示全部楼层
给个建议
每一段与段之间 增加空格行数
  至少在每一段开始或者结束的地方添加一句注释
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-29 16:08:02 | 显示全部楼层
好长的代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-31 20:41:28 | 显示全部楼层
很长啊,鱼哥,有没有短点的
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-2 12:49:09 | 显示全部楼层
本帖最后由 天长地久 于 2012-8-2 13:12 编辑

我的代码是直接在试验7的代码基础上添加的!还可以再优化一下!

  1. assume cs:code,ss:stack
  2. data segment
  3.            db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4.      db '1986','1985','1986','1987','1988','1989','1990','1991','1992'
  5.      db '1993','1994','1995'
  6.      dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  7.      dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  8.      dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  9.      dw 11542,14430,15257,17800
  10. data ends
  11. table segment
  12.            db 21 dup ('year summ ne ?? ')
  13. table ends
  14. stack segment para stack'zjsf'
  15.      dw 16 dup (0)
  16. stack ends
  17. code segment
  18.     start: mov ax,data
  19.      mov ds,ax
  20.      mov bx,0
  21.      mov ax,table
  22.      mov es,ax
  23.      mov bp,0
  24.      mov si,0
  25.      mov di,0
  26.      mov cx,21
  27. s:    mov ax,[bx]
  28.      mov es:[bp],ax
  29.      mov ax,2[bx]
  30.      mov word ptr es:2[bp],ax
  31.      mov ax,84[bx]
  32.      mov word ptr es:5[bp],ax
  33.      mov ax,86[bx]
  34.      mov word ptr es:7[bp],ax
  35.      mov ax,168[di]
  36.      mov word ptr es:10[bp],ax
  37.      mov ax,84[bx][si]
  38.      add si,2
  39.      mov dx,84[bx][si]
  40.      div word ptr 168[di]
  41.      mov word ptr es:13[bp],ax
  42.      add bx,4
  43.      mov si,0
  44.      add di,2
  45.      add bp,16
  46.      loop s
  47.      mov ax,table   ;这里开始课程设计一
  48.      mov ds,ax
  49.      mov di,0
  50.      mov ax,stack
  51.      mov ss,ax
  52.      mov sp,32
  53.      mov ax,0b800h
  54.      mov es,ax
  55.      mov bx,320
  56.      mov si,58
  57.      mov cx,21
  58. ss0:   mov bp,0
  59.      call dyl1   ;第一子程序
  60.      add si,30   ;列数增加30位
  61.      add di,5    ;数据列增加5位
  62.      call dyl2   ;第二子程序
  63.      add si,30   ;列数增加30位
  64.      add di,5    ;数据列增加5位
  65.      call dyl3   ;第三子程序,使用的是第二子程序的代码!比第二子程序少用一行代码!
  66.      add si,30   ;列数增加30位
  67.      add di,3    ;数据列增加3位
  68.      call dyl3   ;第四子程序,使用的是第三子程序的代码!
  69.      add bx,160
  70.      mov si,58
  71.      add di,3
  72.      loop ss0
  73.      mov ax,4c00h
  74.      int 21h
  75. dyl1:  push bx    ;显存写入的起始行数
  76.      push si    ;显存写入的起始列数
  77.      push di    ;被读取数据的起始位置
  78.      push cx
  79. s1:    mov dx,0    ;将dx的内容清零
  80.      mov dl,ds:[di]  ;将数据保存在dx的低位
  81.      mov cx,dx   ;将dx的值保存在cx中
  82.      sub cx,20h   ;运算cx-20h是非=0,如果cx=0 下面将跳转
  83.      jcxz dyl12   ;如果cx=0 跳转到dyl12  不=0 继续下面的循环
  84.      mov dh,7    ;将颜色保存在dx的高位
  85.      mov es:[bx+si],dx ;将数据写入显存地址
  86.      add si,2
  87.      inc di
  88.      jmp short s1
  89. dyl12: pop cx
  90.      pop di
  91.      pop si
  92.      pop bx
  93.      ret     ;第一子程序结束
  94. dyl2:  mov dx,2[di]   ;第二子程序开始
  95. dyl3:  mov ax,[di]   ;第三四子程序开始
  96.      push bx   
  97.      push si
  98.      push di
  99.      push cx
  100.      mov di,0
  101. dyl21: mov cx,dx
  102.      jcxz dyl22
  103.      push ax           ;低位保存到栈
  104.      mov ax,dx   ;高位移到AX中待除
  105.      mov dx,0    ;高位清零
  106.      mov cx,10   ;除数设置为10
  107.      div cx    ;高位除以10   开始除高位
  108.      mov bp,ax   ;除后商保存到bp中
  109.      pop ax            ;将栈中保存的数恢复到AX中
  110.      div cx    ;低位除以10 开始除低位
  111.      push dx    ;将结果余数保存到 栈  中
  112.      inc di
  113.      mov dx,bp
  114.      jmp short dyl21
  115. dyl22: mov cx,10
  116.      div cx
  117.      push dx
  118.      inc di
  119.      mov dx,0
  120.      mov cx,ax
  121.      jcxz dyl23
  122.      jmp short dyl22
  123. dyl23: mov cx,di
  124. dyl24: pop ax
  125.      add al,30h
  126.      mov ah,7
  127.      mov es:[bx+si],ax
  128.      add si,2
  129.      loop dyl24
  130.      pop cx
  131.      pop di
  132.      pop si
  133.      pop bx
  134.      ret     ;第二三四子程序结束
  135. code ends
  136. end start
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-12 13:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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