鱼C论坛

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

[汇编作业] 终于做出来了, 课程设计1

[复制链接]
发表于 2015-11-23 18:37:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 復襍 于 2016-10-18 13:08 编辑

QQ拼音截图未命名0.jpg
.
  1. ;把数值显示在屏幕上
  2. assume cs:code,ds:data
  3. data segment
  4. db 10 dup (0)
  5. data ends

  6. info segment
  7. ;每个21个数据

  8. ;年份 84字节
  9. db '1975','1976','1977','1978','1979','1980','1981','1982'
  10. db '1983','1984','1985','1986','1987','1988','1989','1990'
  11. db '1991','1992','1993','1994','1995'


  12. ;收入 84字节
  13. dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  14. dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

  15. ;雇员人数 42字节
  16. dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  17. dw 11452,14430,15257,17800

  18. info ends

  19. table segment
  20. db 21 dup('year summ ne ?? ')
  21. db 'year summ ne ?? '
  22. table ends

  23. code segment
  24. start:
  25. ;把数据存入表格
  26. mov ax,info
  27. mov ds,ax ;设置ds段 指向info

  28. mov ax,table
  29. mov es,ax ;设置es段 指向table

  30. mov bx,0 ;bx代表行
  31. mov si,0 ;si代表 年份 收入
  32. mov di,0 ;di代表 雇员 人均收入
  33. mov cx,21 ;初始化
  34. s:
  35. ;年份处理
  36. mov ax,[si] ;把data的年份放到ax中
  37. mov es:[bx],ax ;把ax中的年份放到内存
  38. mov ax,[si+2] ;把data的年份放到ax中
  39. mov es:[bx+2],ax ;把ax中的年份放到内存

  40. ;收入处理
  41. mov ax,[si+84] ;把收入保存在ax
  42. mov es:[bx+5],ax
  43. mov dx,[si+84+2] ;把收入保存在dx
  44. mov es:[bx+7],dx

  45. ;处理人均收入
  46. div word ptr [di+168] ;dx*10000H+ax/雇员数 商ax 余数dx
  47. mov es:[bx+13],ax


  48. ;雇员处理
  49. mov ax,[di+168] ;把雇员保存在ax
  50. mov es:[bx+10],ax


  51. ;置0
  52. mov byte ptr es:[bx+4],0
  53. mov byte ptr es:[bx+9],0
  54. mov byte ptr es:[bx+15],0

  55. add si,4
  56. add di,2
  57. add bx,16
  58. loop s

  59. ;------------------------------
  60. ;把数据显示出来
  61. mov ax,table
  62. mov ds,ax
  63. mov si,0 ;ds:si指向table首地址

  64. ;显示年份
  65. mov cx,21
  66. mov bl,1 ;列
  67. show:
  68. push cx

  69. mov dh,bl ;行号
  70. mov dl,30 ;列号
  71. mov ch,0
  72. mov cl,2 ;颜色
  73. call show_str

  74. ;显示收入
  75. add si,5
  76. mov ax,[si] ;收入高16位
  77. add si,2 ;收入低16位
  78. mov dx,[si]
  79. push si ;si入栈
  80. mov si,336
  81. call dtoc ;将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
  82. mov dh,bl ;行号
  83. mov dl,35 ;列号
  84. mov ch,0
  85. mov cl,2 ;颜色
  86. call show_str
  87. pop si ;si在出栈

  88. ;显示雇员
  89. add si,3 ;雇员数
  90. mov ax,[si]
  91. mov dx,0
  92. push si ;si入栈
  93. mov si,336
  94. call dtoc ;将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
  95. mov dh,bl ;行号
  96. mov dl,43 ;列号
  97. mov ch,0
  98. mov cl,2 ;颜色
  99. call show_str
  100. pop si ;si在出栈

  101. ;显示人均收入
  102. add si,3 ;人均收入
  103. mov ax,[si]
  104. mov dx,0
  105. push si ;si入栈
  106. mov si,336
  107. call dtoc ;将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
  108. mov dh,bl ;行号
  109. mov dl,49 ;列号
  110. mov ch,0
  111. mov cl,2 ;颜色
  112. call show_str
  113. pop si ;si在出栈

  114. pop cx
  115. inc bl
  116. add si,3
  117. loop show

  118. mov ax,4c00h
  119. int 21h

  120. ;名称:dtoc
  121. ;功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
  122. ;参数: (ax)=数据低16位;
  123. ; (dx)=数据高16位;
  124. ;ds:si指向字符串首地址。
  125. ;返回:无。
  126. dtoc:
  127. push ax
  128. push bx
  129. push cx
  130. push dx

  131. mov bx,0
  132. continue1:
  133. mov cx,10 ;设置除数
  134. call divdw
  135. add cl,30h ;变为ascii码
  136. mov ch,0 ;把高8为置为0,以便存入栈中和循环
  137. push cx ;保存
  138. inc bx ;增加字符数
  139. mov cx,ax
  140. inc cx ;如果商为0 加一以便退出
  141. loop continue1

  142. ;写入内存
  143. mov cx,bx ;把字符数保存到cx以便循环使用
  144. mov bx,0 ;把bx置为0 以便定位字符
  145. continue2:
  146. pop ax
  147. mov [si+bx],al
  148. inc bx
  149. loop continue2
  150. mov al,0
  151. mov [si+bx],al ;把最后一个字符置0

  152. pop dx
  153. pop cx
  154. pop bx
  155. pop ax
  156. ret


  157. ;名称:divdw
  158. ;功能:除法不会溢出
  159. ;参数:
  160. ; ax 被除数16位
  161. ; dx 被除数16位
  162. ; cx 除数
  163. ;返回: 结果
  164. ; ax商低16位
  165. ; dx商高16位
  166. ; cx余数16位
  167. divdw:
  168. push si
  169. push di

  170. mov di,ax ;di暂时存放ax

  171. mov ax,dx
  172. mov dx,0
  173. div cx
  174. mov si,ax ;si存放商
  175. mov ax,di ;di的值给回ax
  176. div cx
  177. mov cx,dx
  178. mov dx,si
  179. pop di
  180. pop si
  181. ret

  182. ;名称:show_str
  183. ;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
  184. ;参数:(dh)=行号(取值范围0~24);
  185. ; (dl)=列号(取值范围0~79);
  186. ; (cl)=颜色;
  187. ; ds:si指向字符串的首地址。
  188. ;返回:无。
  189. show_str:
  190. push ax
  191. push cx
  192. push dx
  193. push si
  194. push di
  195. push es

  196. mov ax,0b800h
  197. mov es,ax

  198. dec dh
  199. mov al,0A0h
  200. mul dh ;al*dh显存的行号
  201. mov di,ax

  202. mov al,2
  203. mul dl
  204. sub ax,2
  205. add di,ax ;di显存的行号+行号
  206. mov ah,cl
  207. write:
  208. mov cl,[si]
  209. jcxz ok
  210. mov es:[di],cl ;字符
  211. mov es:[di+1],ah ;颜色

  212. add di,2
  213. add si,1
  214. jmp write

  215. ok:
  216. pop es
  217. pop di
  218. pop si
  219. pop dx
  220. pop cx
  221. pop ax
  222. ret




  223. code ends
  224. end start

复制代码



代码: class1.zip (2.01 KB, 下载次数: 8)
有什么不对请指教.

评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +8 收起 理由
零度非安全 + 5 + 5 + 3 支持楼主!
康小泡 + 5 + 5 + 5 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-23 20:08:16 | 显示全部楼层
做的不错啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-24 11:58:52 | 显示全部楼层
结果显示在屏幕上还不会,先关注一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-24 12:26:05 | 显示全部楼层
楼主继续加油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-24 12:29:42 | 显示全部楼层
支持支持楼主
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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