鱼C论坛

 找回密码
 立即注册
查看: 11841|回复: 8

实验14,我写的程序达不到要求,但是我不知道错在那里了。

[复制链接]
发表于 2011-9-29 01:53:38 | 显示全部楼层 |阅读模式

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

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

x
  1. assume cs:code
  2. ds1 segment
  3. db '/',':'
  4. ds1 ends
  5. code segment
  6. start:mov si,160*12+40*2
  7. mov ax,0b800h
  8. mov es,ax
  9. mov ax,ds1
  10. mov ds,ax
  11. mov bx,0
  12. mov cx,3
  13. mov al,9
  14. call s
  15. mov al,4
  16. mov cx,3
  17. call s1
  18. mov ax,4c00h
  19. int 21h
  20. s: push cx
  21. push ax
  22. out 70h,al
  23. in al,71h
  24. mov ah,al
  25. mov cl,4
  26. shr ah,cl
  27. and al,00001111b
  28. add ah,30h
  29. add al,30h
  30. mov es:[si],ah
  31. mov es:[si+2],al
  32. pop ax
  33. add si,6
  34. dec al
  35. pop cx
  36. dec cx
  37. jcxz send
  38. jmp s
  39. send: mov ax,ds:[bx]
  40. mov es:[si-2],ax
  41. mov es:[si-6],ax
  42. ret
  43. s1: push cx
  44. push ax
  45. out 70h,al
  46. in al,71h
  47. mov ah,al
  48. mov cl,4
  49. shr ah,cl
  50. and al,00001111b
  51. add ah,30h
  52. add al,30h
  53. mov es:[si+6],ah
  54. mov es:[si+8],al
  55. pop ax
  56. add si,6
  57. sub al,2
  58. pop cx
  59. dec cx
  60. jcxz s1end
  61. jmp s1
  62. s1end: mov ax,ds:[bx+1]
  63. mov es:[si-2],ax
  64. mov es:[si-6],ax
  65. ret

  66. code ends
  67. end start
复制代码
大家帮我找找那里又问题,结果总是让我输入新的时间。而不是显示。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-29 16:55:40 | 显示全部楼层
子程序应该用  xxx  proc
                    ..........
                    xxx  endp
定义的
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-29 18:01:26 | 显示全部楼层
本帖最后由 flyue 于 2011-9-29 18:03 编辑

proc,和endp是什么指令啊,为什么要用这个定义子程序才可以
加进去编译的时候显示Operand must be type specifier,操作数必须类型说明报警。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-29 19:11:35 | 显示全部楼层
用Call说明代码不在一个段,如果不定义子程序那你就把代码定义在一个段内用JMP
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-29 20:35:59 | 显示全部楼层
CALL可以进行段内近转移啊。CALL S就是段内近转移,JMP NEAR S。这个段内转移啊。所以不应该存在你说的不在一个段的问题
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-2 23:24:13 | 显示全部楼层
在代码规范方面,你得下些功夫!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-11 21:11:49 | 显示全部楼层
  1. assume cs:code
  2.        
  3. ds1 segment
  4.         db '/',':'
  5. ds1 ends
  6.        
  7. code segment
  8. start:
  9.         mov si,160*12+40*2
  10.         mov ax,0b800h
  11.         mov es,ax
  12.        
  13.         mov ax,ds1
  14.         mov ds,ax
  15.        
  16.         mov bx,0
  17.         mov cx,3
  18.         mov al,9
  19.        
  20.         ;取日期
  21.         call s
  22.        
  23.         mov al,4
  24.        
  25.         mov cx,3
  26.        
  27.         call s1
  28.        
  29.         mov ah,1
  30.        
  31.         int 21h
  32.        
  33.         mov ax,4c00h
  34.        
  35.         int 21h
  36.        
  37. s: push cx
  38.         push ax       
  39.         out 70h,al       
  40.         in al,71h
  41.        
  42.         mov ah,al
  43.         mov cl,4
  44.         shr ah,cl
  45.         and al,00001111b
  46.        
  47.         add ah,30h
  48.         add al,30h
  49.        
  50.         mov es:[si].0,ah
  51.         mov es:[si].2,al
  52.        
  53.         pop ax
  54.         add si,6
  55.         dec al       

  56.         pop cx
  57.         dec cx
  58.        
  59.         jcxz s_end
  60.        
  61.         jmp s
  62.        
  63. s_end:
  64.         mov al,ds:[bx]
  65.        
  66.         ;因为直接写入显存中,一个字符占两个字节。
  67.         ;y  y  /  m  m  /  d  d
  68.         ;01 23 45 67 89 AB CD EF
  69.         mov es:[si-14],al
  70.         mov es:[si-8],al
  71.         ;这里用ax相当于把“/”的高位也传进显存中。“/”的颜色受ah影响
  72.         ret
  73.        
  74. s1:
  75.         push cx
  76.         push ax
  77.        
  78.         out 70h,al
  79.         in al,71h
  80.         mov ah,al
  81.        
  82.         mov cl,4
  83.         shr ah,cl
  84.         and al,00001111b
  85.         add ah,30h
  86.         add al,30h
  87.        
  88.         mov es:[si].0,ah       
  89.         mov es:[si].2,al
  90.        
  91.         pop ax       
  92.         add si,6
  93.        
  94.         sub al,2
  95.        
  96.         pop cx
  97.        
  98.         dec cx
  99.        
  100.         jcxz s1end
  101.        
  102.         jmp s1
  103.        
  104. s1end:
  105.         mov al,ds:[bx+1]       
  106.         mov es:[si-14],al
  107.         mov es:[si-10].2,al       
  108.         ret



  109. code ends

  110. end start
复制代码
修改好了,你自己对比吧!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-11 21:25:33 | 显示全部楼层
  1.         mov ah,1

  2.         int 21h
  3.         
  4.         mov ax,4c00h
  5.         
  6.         int 21h
复制代码
mov ah,1
int 21h
这是按任意键继续。和上面没关系!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-5 00:31:14 | 显示全部楼层
  1. ;实验14:编程,以“年/月/日 时:分:秒” 的格式,显示当前日期、时间
  2. assume cs:code

  3. code segment
  4. start:
  5.                 mov ax,0b800h
  6.                 mov ds,ax
  7.                 mov di,12*160+80-18                ;设置显示位置
  8.                 mov dh,2                                ;设置显示属性
  9.                
  10.                 mov al,9
  11.                 mov bl,'/'
  12.                 call readTime
  13.                
  14.                 mov al,8
  15.                 mov bl,'/'
  16.                 call readTime
  17.                
  18.                 mov al,7
  19.                 mov bl,' '
  20.                 call readTime
  21.                
  22.                 mov al,4
  23.                 mov bl,':'
  24.                 call readTime
  25.                
  26.                 mov al,2
  27.                 mov bl,':'
  28.                 call readTime
  29.                
  30.                 mov al,0
  31.                 mov bl,0
  32.                 call readTime
  33.                
  34.                 mov ax,4c00h
  35.                 int 21h
  36.                
  37. showTime:;显示数据,dl为要显示的字符;dh为显示的属性
  38.                 mov [di],dx
  39.                 add di,2
  40. ret

  41. ;参数(al:端口号;bl:附加符号) 功能:读取CMOS RAM的端口(al)的信息,并显示到屏幕上
  42. readTime:
  43.                 ;读取CMOS RAM的端口(al)的信息
  44.                 out 70h,al
  45.                 in al,71h
  46.                
  47.                 ;获取高4位二进制信息
  48.                 mov ah,al
  49.                 mov cl,4
  50.                 shr ah,cl
  51.                
  52.                 ;获取低4位二进制信息
  53.                 and al,00001111b
  54.                
  55.                 ;转换为ASCII码
  56.                 add ah,30h
  57.                 add al,30h
  58.                
  59.                 mov dl,ah
  60.                 call showTime
  61.                
  62.                 mov dl,al
  63.                 call showTime
  64.                
  65.                 mov dl,bl
  66.                 call showTime
  67. ret
  68. code ends
  69. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-3 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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