鱼C论坛

 找回密码
 立即注册
查看: 1725|回复: 1

实验10-3 请问一下我这程序有问题吗?

[复制链接]
发表于 2013-9-27 12:14:35 | 显示全部楼层 |阅读模式

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

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

x
  1. assume cs:code,ds:data

  2. data segment

  3. db 10 dup (0)

  4. data ends

  5. code segment

  6. start: mov ax,12666
  7. mov bx,data
  8. mov ds,bx
  9. mov si,0 ;ds:si指向data首地址
  10. call dtoc

  11. mov dh,8
  12. mov dl,3
  13. mov cl,2
  14. call show_str

  15. mov ah,7
  16. int 21h

  17. mov ax,4c00h
  18. int 21h

  19. dtoc:
  20. push dx
  21. push cx

  22. ret

  23. show_str:

  24. mov dx,0
  25. mov bl,10
  26. div bl
  27. add dl,30h ;余数+30h
  28. mov ds:[si],dl
  29. mov cx,ax
  30. inc si
  31. jcxz ok

  32. jmp short show_str

  33. ok: pop cx
  34. pop dx

  35. mov ax,0
  36. mov al,dh
  37. mov bl,80h
  38. mov dx,0
  39. mul bl ;ax的值在第八行了
  40. mov dx,0b800h
  41. add ax,dx ;第八行
  42. push ax


  43. mov ax,0
  44. mov dx,0
  45. mov al,dl
  46. mov bl,25h
  47. mul bl ; AX的值在第三列
  48. mov dx,ax
  49. pop ax
  50. add ax,dx ;AX在第八行3列
  51. mov cx,10

  52. s: mov es,ax
  53. mov dx,0
  54. mov si,0
  55. mov dl,ds:[si]
  56. mov es:[si],dl
  57. mov al,02h
  58. mov es:[si+1],al
  59. inc si
  60. loop s

  61. ret

  62. code ends
  63. end start
复制代码

请问一下,这程序错在哪里?求大神批评。菜鸟勿喷
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-27 22:33:48 | 显示全部楼层
可参考下这个:
  1. ;应用举例:将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。

  2. ;在显示时调用子程序show_str。

  3. assume cs:code,ds:data

  4. data segment

  5.      db 10 dup (0)

  6. data ends

  7. code segment

  8. start:   mov ax,12666

  9.      mov bx,data

  10.      mov ds,bx

  11.      mov si,0 ;ds:si指向data首地址

  12.      call dtoc1



  13.      mov dh,8

  14.      mov dl,3

  15.      mov cl,2

  16.      call show_str



  17.      mov ax,4c00h

  18.      int 21h



  19. ;名称:dtoc1

  20. ;功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。

  21. ;参数:(ax)=word型数据;

  22. ;      ds:si指向字符串首地址。

  23. ;返回:无。

  24. dtoc1:   push ax

  25.      push bx

  26.      push cx

  27.      push dx

  28.      push si

  29.      push di

  30.      mov di,0

  31. d10: mov dx,0      ;设置被除数高位为0

  32.      mov bx,10     ;除数为10

  33.      div bx

  34.      add dx,30h    ;ax/10的余数+30h,转为字符

  35.      push dx       ;字符入栈

  36.      inc di        ;记录字符个数

  37.      mov cx,ax

  38.      jcxz d11      ;当ax/10的商=0时,转到d11执行

  39.      jmp d10

  40. d11: mov cx,di

  41. d12: pop dx        ;字符出栈

  42.      mov [si],dl

  43.      inc si        ;ds:si指向下一单元

  44.      loop d12

  45.      mov dl,0

  46.      mov [si],dl   ;设置结尾符0

  47.      pop si

  48.      pop di

  49.      pop dx

  50.      pop cx

  51.      pop bx

  52.      pop ax

  53.      ret



  54. ;名称:show_str

  55. ;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。

  56. ;参数:(dh)=行号(取值范围0~24);

  57. ;      (dl)=列号(取值范围0~79);

  58. ;      (cl)=颜色;

  59. ;      ds:si指向字符串的首地址。

  60. ;返回:无。

  61. show_str:

  62.      push ax

  63.      push bx

  64.      mov ax,0b800h

  65.      mov es,ax

  66.      mov ax,160

  67.      mul dh

  68.      mov bx,ax     ;bx=160*dh

  69.      mov ax,2

  70.      mul dl        ;ax=dl*2

  71.      add bx,ax     ;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址

  72.      mov al,cl     ;把颜色cl赋值al

  73.      mov cl,0

  74. show0:

  75.      mov ch,[si]

  76.      jcxz show1    ;(ds:si)=0时,转到show1执行   

  77.      mov es:[bx],ch

  78.      mov es:[bx].1,al

  79.      inc si        ;ds:si指向下一个字符地址

  80.      add bx,2      ;es:bx指向下一个显存地址

  81.      jmp show0

  82. show1:

  83.      pop bx

  84.      pop ax

  85.      ret



  86. code ends

  87. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 00:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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