Chinaunix首页 | 论坛 | 博客
  • 博客访问: 466887
  • 博文数量: 62
  • 博客积分: 1742
  • 博客等级: 中尉
  • 技术积分: 859
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 00:13
个人简介

这是一句很长很长而且又很啰嗦并且很无聊的废话...

文章分类

全部博文(62)

文章存档

2013年(1)

2012年(13)

2011年(48)

分类: LINUX

2011-04-25 20:07:25

  1. assume cs:codesg,ds:datasg,ss:stacksg
  2. datasg segment
  3. db 2h ;绿色 ;0h
  4. db 24h ;绿底红色 ;1h
  5. db 71h ;白底蓝色 ;2h
  6. db 'welcome to masm!',0 ;text ;3h
  7. db 16 dup(0) ;13h
  8. datasg ends
  9. stacksg segment
  10. dd 16 dup (0)
  11. stacksg ends
  12. codesg segment
  13. ;--------------------------------------------------------showStr-------------------------------------------------------------------------------
  14. showStr:push bp;(byte->height(+9h)_byte->width(+8h),byte_byte->color(+6h),word->text_addr(+4h))(无返回,已恢复栈)
  15. mov bp,sp
  16. push ax
  17. push bx
  18. push cx
  19. push dx
  20. push di
  21. push si
  22. ;计算所在行数
  23. mov al,ss:9h[bp];获取行数
  24. mov bl,160;每行160个字节
  25. mul bl;行数x每行字节数
  26. push ax;保存下结果
  27. ;计算所在列数
  28. mov al,ss:8h[bp];获取列数
  29. mov bl,2h;你懂的...
  30. mul bl;
  31. pop bx
  32. add ax,bx;定位显存位置
  33. mov si,ax;保存一下
  34. ;显示
  35. mov di,0
  36. mov bx,ss:4h[bp]
  37. mov ax,0b800h
  38. mov es,ax
  39. for1:mov cl,ds:[bx][di];循环每个字符,复制到显示缓冲区,并加上色
  40. mov ch,0
  41. jcxz return
  42. mov byte ptr es:[si],cl;复制字符
  43. inc si
  44. mov ch,ss:6h[bp];获取颜色参数
  45. mov byte ptr es:[si],ch;设置颜色
  46. inc si
  47. inc di
  48. loop for1
  49. return:pop si
  50. pop di
  51. pop dx
  52. pop cx
  53. pop bx
  54. pop ax
  55. pop bp
  56. ret 6h
  57. ;--------------------------------------------------------showStr-------------------------------------------------------------------------------
  58. ;--------------------------------------------------------divdw---------------------------------------------------------------------------------
  59. divdw:push bp;(word->dividl(+8h),word->dividh(+6h),word->divish(+4h))(有返回(pop(+4h余),pop(+6h结果高位),pop(+8h结果低位)),自行恢复栈)
  60. mov bp,sp
  61. push ax
  62. push bx
  63. push cx
  64. push dx
  65. mov dx,0
  66. mov ax,ss:6h[bp]
  67. div word ptr ss:4h[bp]
  68. mov word ptr ss:6h[bp],ax;32位结果的高位
  69. mov ax,word ptr ss:8h[bp]
  70. div word ptr ss:4h[bp];欧几里德同余公式,被搞死...郁闷
  71. mov word ptr ss:8h[bp],ax;32位结果的底位
  72. mov word ptr ss:4h[bp],dx;32位结果的余
  73. pop dx
  74. pop cx
  75. pop bx
  76. pop ax
  77. pop bp
  78. ret
  79. ;--------------------------------------------------------divdw---------------------------------------------------------------------------------
  80. ;--------------------------------------------------------dtoc----------------------------------------------------------------------------------
  81. dtoc:push bp;(word->numl(+8h),word->numh(+6h),word->txt_addr(+4h))(无返回,已恢复栈)
  82. mov bp,sp
  83. push di
  84. push ax
  85. push dx
  86. push bx
  87. push cx
  88. push si
  89. mov si,0;转换计数
  90. mov di,ss:4h[bp];获取存放字符串的地址
  91. mov ax,ss:8h[bp];获取被除数低位
  92. push ax
  93. mov ax,ss:6h[bp];获取被除数高位
  94. push ax
  95. mov ax,10;设置除数
  96. push ax
  97. call divdw
  98. pop cx
  99. pop dx
  100. pop ax
  101. jmp dtoc_go
  102. dtoc_to:push ax
  103. push dx
  104. mov ax,10
  105. push ax
  106. call divdw
  107. pop cx
  108. pop dx
  109. pop ax
  110. dtoc_go:add cx,30h;数字转字符
  111. push cx;保存结果
  112. inc si
  113. mov cx,ax;先检查结果的低位等不等于0
  114. jcxz dtoc_ch;如果等于转到dtoc_ch检查高位
  115. jmp dtoc_to;否则继续转换
  116. dtoc_ch:mov cx,dx;检查高位等不等于0
  117. jcxz dtoc_fl;高位和低位都为0,除完...你懂的
  118. jmp dtoc_to;不用看了,继续转吧...
  119. dtoc_fl:mov cx,si
  120. jcxz dtoc_f
  121. dtoc_l1:pop ax
  122. mov ds:[di],al;设置正确结果
  123. inc di
  124. loop dtoc_l1
  125. dtoc_f:pop si
  126. pop cx
  127. pop bx
  128. pop dx
  129. pop ax
  130. pop di
  131. pop bp
  132. ret 6h
  133. ;--------------------------------------------------------dtoc----------------------------------------------------------------------------------
  134. start:mov ax,datasg
  135. mov ds,ax
  136. mov ax,stacksg
  137. mov ss,ax
  138. mov sp,40h
  139. mov ah,20
  140. mov al,33
  141. push ax
  142. mov ah,0
  143. mov al,71h
  144. push ax
  145. mov ax,3h
  146. push ax
  147. call showStr
  148. mov ax,4240h
  149. push ax
  150. mov ax,000fh
  151. push ax
  152. mov ax,0ah
  153. push ax
  154. call divdw
  155. pop cx
  156. pop dx
  157. pop ax
  158. mov ax,123
  159. push ax
  160. mov ax,0
  161. push ax
  162. mov ax,13h
  163. push ax
  164. call dtoc
  165. mov ax,4c00h
  166. int 21h
  167. codesg ends
  168. end start
阅读(4159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~