鱼C论坛

 找回密码
 立即注册
查看: 2257|回复: 5

求调教,汇编17章,白送鱼币!!!!

[复制链接]
发表于 2012-7-26 17:37:43 | 显示全部楼层 |阅读模式
5鱼币
  1. ;最基本的字符串输入程序,需要具备下面的功能:
  2. ;(1) 在输入的同时需要显示这个字符串;
  3. ;(2)一般在输入回车符后,字符串输入结束;
  4. ;(3)能够删除已经输入的字符。

  5. ;编写一个接收字符串的输入子程序,实现上面三个基本功能。
  6. ;因为在输入的过程中需要显示,子程序的参数如下:
  7. ; (dh)、(dl)=字符串在屏幕上显示的行、列位置;
  8. ; ds:si 指向字符串的存储空间,字符串以O 为结尾符。


  9. assume cs:code

  10. code segment
  11. start:
  12. call getstr

  13. return:
  14. mov ax,4c00h
  15. int 21h

  16. ;完整的接收字符串输入的子程序

  17. getstr:
  18. push ax

  19. getstrs:
  20. mov ah,0
  21. int 16h

  22. cmp al,20h
  23. jb nochar ;判断的是ASCII码小于0,说明不是字符
  24. mov ah,0;
  25. call charstack ;字符入栈
  26. mov ah,2
  27. call charstack ;显示栈中的字符
  28. jmp getstrs


  29. nochar:
  30. cmp ah,0eh ;退格键的扫描码
  31. je backspace
  32. cmp ah,1ch ;回车键的扫描码
  33. je enter
  34. jmp getstrs


  35. backspace: ;退格
  36. mov ah,1
  37. call charstack ;字符出栈
  38. mov ah,2
  39. call charstack ;显示栈中的字符
  40. jmp getstrs

  41. enter: ;回车
  42. mov al,0
  43. mov ah,0
  44. call charstack ;0入栈
  45. mov ah,2
  46. call charstack ;显示栈中的字符

  47. pop ax
  48. ret ;getstr ends


  49. ;功能子程序实现

  50. charstack:
  51. jmp short charstart

  52. table dw charpush,charpop,charshow
  53. top dw 0 ;栈顶

  54. charstart:
  55. push bx
  56. push dx
  57. push di
  58. push es

  59. cmp ah,2
  60. ja sret
  61. mov bl,ah
  62. mov bh,0
  63. add bx,bx
  64. jmp word ptr table[bx]

  65. charpush:
  66. mov bx,top
  67. mov [si][bx],al
  68. inc top
  69. jmp sret

  70. charpop:
  71. cmp top,0
  72. je sret
  73. dec top
  74. mov bx,top
  75. mov al,[si][bx]
  76. jmp sret

  77. charshow:
  78. mov bx,0b800h
  79. mov es,bx
  80. mov al,160
  81. mov ah,0
  82. mul dh
  83. mov di,ax
  84. add dl,dl
  85. mov dh,0
  86. add di,dx

  87. mov bx,0

  88. charshows:
  89. cmp bx,top
  90. jne noempty
  91. mov byte ptr es:[di],' '
  92. jmp sret

  93. noempty:
  94. mov al,[si][bx]
  95. mov es:[di],al
  96. mov byte ptr es:[di+2],' '
  97. inc bx
  98. add di,2
  99. jmp charshows

  100. sret:
  101. pop es
  102. pop di
  103. pop dx
  104. pop bx
  105. ret

  106. code ends

  107. end start
复制代码

17章了,着急了心糟了了,来个大侠帮忙解惑!
top怎么就是栈顶?没栈段设置就默认他是栈顶了吗?我运行这段代码无效果,要实模式才可以吗?

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-26 21:40:39 | 显示全部楼层
我觉得这个代码太繁琐了,我自己编写出了一个,照样也可以实现上面所说的功能,最后也算是明白了甲鱼这代码的意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-26 21:41:37 | 显示全部楼层
我几天晚上喝了点酒 脑袋是混的...  你要是要源码我下次可以给你哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-27 12:06:16 | 显示全部楼层

我现在好像明白了top是模拟的栈,但是[si][bx]这个指令,没有初始化si,默认在ds段,那么ds,si默认的是基地址是哪?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-30 22:50:39 | 显示全部楼层
没人看了,我自己拿分,问新问题了,鱼币少的可怜
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-3 03:49:41 | 显示全部楼层
代码太多;了....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 14:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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