鱼C论坛

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

实验十 终于独立完成,对小甲鱼的答案有点疑惑

[复制链接]
发表于 2011-8-16 23:22:34 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 javanetwork 于 2011-8-17 13:27 编辑

  1. assume cs:myc,ds:mydat
  2. mydat segment
  3. db 128 dup(0)
  4. dw 123,12666,41,8,3,38
  5. mydat ends

  6. mystack segment
  7. dw 8 dup(0)
  8. mystack ends
  9. myc segment
  10. start:
  11.   mov ax,mystack
  12.   mov ss,ax
  13.   mov sp,10H
  14.   mov ax,mydat
  15.   mov ds,ax
  16.   
  17.   
  18.   mov si,128
  19.   mov di,si

  20.   mov cx,6
  21.   call getword


  22.   mov ax,4c00H;程序出口
  23.   int 21h
  24.   
  25. getword:
  26. ;从ds:[si]处获取字型整数,输出到屏幕
  27. ;参数:cx为欲获取的数据的个数
  28.   push cx
  29.   push si
  30.   push di
  31.   
  32.   mov al,ds:[si]
  33.   mov ah,ds:[si+1]
  34.   
  35.   call wtoa


  36.   push ax
  37.   push dx
  38.   mov dl,12;设置相同的行和列,前一个字符串被覆盖
  39.   mov cl,01101101B
  40.   mov ax,mydat
  41.   mov ds,ax
  42.   mov si,di
  43.   call show_str
  44.   pop dx
  45.   pop ax
  46.   
  47.   
  48.   
  49.   pop di
  50.   pop si
  51.   add si,2
  52.   pop cx
  53.   loop getword
  54.   
  55.   
  56.   ret  
  57.   
  58.   
  59.   
  60. wtoa:  
  61. ;将字型整数以十进制输出;调用divw,不断divw 10取余
  62. ;参数:ax存放整数
  63. ;结果:字符串在ds:[di]这个内存地址前面

  64.   sub di,1
  65.   mov cl,0
  66.   mov ds:[di],cl;置字符串尾为\0
  67. rea:
  68.   mov cx,ax
  69.   jcxz zero;如果ax已经为零了,返回
  70.   mov cl,10
  71.   call divw
  72.   add cl,48;数字转换成字符
  73.   dec di
  74.   mov byte ptr ds:[di],cl;从后往前
  75.   loop rea
  76.   
  77.   
  78. zero:  
  79.   
  80.   ret  
  81.   
  82.   
  83.   
  84.   
  85.   
  86.   
  87.   
  88.   
  89.   
  90. divw:  
  91. ;进行不会溢出的除法运算 16位除8位
  92. ;参数:ax被除数,cl除数
  93. ;返回:al结果的低8位,ah结果的高8位,cl余数
  94. ;如0973H除2
  95. ;ah  al  cl  ch
  96. ;09  73  02  73
  97. ;00  09  02  73
  98. ;01  04   02  73
  99. ;   dl
  100. ;01  73  02  73
  101. ;01  B9  02  73
  102. ;01  B9  01  73
  103. ;ex:
  104. ;  mov ax,9473H
  105. ;  mov cl,14H
  106. ;  call divw
  107.   mov ch,al ;暂时保存al的值
  108.   mov al,ah
  109.   mov ah,0
  110.   div cl  ;00dx /cx 0009/2
  111.   mov dl,al  ;保存低8位的结果
  112.   mov al,ch;恢复al的值
  113.   div cl  ;173/2
  114.   mov cl,ah
  115.   mov ah,dl
  116.   ret
  117.   
  118.   
  119.   
  120.   
  121.   
  122.   
  123.   
  124.   
  125.   
  126.   
  127.   
  128.    
  129. show_str:  ;显示字符串
  130. ;参数:dl行0~24  dh列0~79  cl颜色  ds:[si]字符串的首地址
  131. ;应用示例:
  132. ;  mov dl,12
  133. ;  mov dh,40
  134. ;  mov cl,01101101B
  135. ;  mov ax,mydat
  136. ;  mov ds,ax
  137. ;  mov si,0
  138. ;  call show_str
  139.   mov bx,0B800H
  140.   mov es,bx
  141.   
  142.   mov ax,0A0H
  143.   mul dl
  144.   mov bx,ax
  145.   mov ax,02H
  146.   mul dh
  147.   add bx,ax
  148.   mov dl,cl
  149. cir:  
  150.   
  151.   mov ch,0
  152.   mov cl,ds:[si]
  153.   jcxz ou
  154.   mov es:[bx],cl
  155.   mov es:[bx+1],dl
  156.   inc si
  157.   add bx,2
  158.   jmp short cir
  159. ou:
  160.   ret
  161.   
  162.   




  163.   
  164. divdw:  
  165. ;进行不会溢出的除法运算,32位除16位
  166. ;参数:ax为低16位,dx为高16位,cx除数
  167. ;返回:ax结果的低16位,dx结果的高16位,cx余数
  168. ;如0973H除2
  169. ;dx  ax  cx  bx
  170. ;09  73  02  73
  171. ;00  09  02  73
  172. ;01  04   02  73
  173. ;push ax
  174. ;01  73  02  73
  175. ;01  B9  02  73
  176. ;01  B9  01  73
  177. ;应用示例:
  178. ;  mov ax,9473H
  179. ;  mov dx,0187H
  180. ;  mov cx,3142H
  181. ;  call divdw
  182.   mov bx,ax ;暂时保存ax的值
  183.   mov ax,dx
  184.   mov dx,0
  185.   div cx  ;00dx /cx 0009/2
  186.   push ax  ;保存低16位的结果
  187.   mov ax,bx;恢复ax的值
  188.   div cx  ;173/2
  189.   mov cx,dx
  190.   pop dx
  191.   ret  
  192.   
  193. myc ends;结束段
  194. end start;结束程序,同时告诉编译器,程序入口的标号是start   
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-8-17 03:26:45 | 显示全部楼层
小甲鱼视频里面 实验十第三个子程序有没有问题?
余数保存他用push dx
但是show_str处理的是字节型数据,且遇到零就终止了
还有里面用div指令,没有防止数据溢出
题目要求转换好几个数据,他直接取了一个,偷工减料啊

以上个人看法,欢迎指正。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-8-17 07:32:44 | 显示全部楼层
大家交流交流!:lol
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-8-17 13:56:39 | 显示全部楼层
我来学习下啊
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-22 04:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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