鱼C论坛

 找回密码
 立即注册
查看: 5495|回复: 13

[汇编作业] 实验16,我的改版,由于各种原因……编了个娱乐版!

[复制链接]
发表于 2016-12-12 08:05:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zealstar 于 2016-12-12 08:07 编辑

原版的实验16是要求替换7ch中断,但是,他妹的dosbox总是不行。我怀疑就是dosbox本身的问题,很可能安全内存区有其他内容,所以造成了无法实现调用7ch中断例程的结果。

索性,改版来玩。改成,运行程序后,可以通过A,S,D,F,G来操作屏幕。A是清屏,S是改前景,D改背景,F是滚动一行,G是退出。
执行结果如下:
2.png
3.png


代码分享:
游客,如果您要查看本帖隐藏内容请回复


但是目前感觉还不太完善,按键一下就变N个颜色……嗯,考虑如何改良中……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-12-12 08:17:29 | 显示全部楼层
哇哈哈哈,改良成功!原理是这样啊,大家自行体会吧。

代码:
游客,如果您要查看本帖隐藏内容请回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 01:34:44 | 显示全部楼层
过来学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-11 15:07:37 | 显示全部楼层
have a look
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-11 18:44:37 | 显示全部楼层
本帖最后由 auyhin丶 于 2017-1-11 18:57 编辑

我回头写了下这个.要跟你作用一样的。 但是为什么我写到往上滚动那行代码的时候却实现不了。
一按F就成这样了。
它不会向上滚动...
1111.png
  1. DATAS SEGMENT
  2.     ;此处输入数据段代码  
  3. DATAS ENDS

  4. STACKS SEGMENT
  5.     ;此处输入堆栈段代码
  6. STACKS ENDS

  7. CODES SEGMENT
  8.     ASSUME CS:CODES,DS:DATAS,SS:STACKS

  9.     ML DB 160 DUP(?),'Please enter a command',58 DUP (?),'  ;后面有$
  10.     HH DB 'A=clear,S=char color,D=char background color,F=roll a line,G=exit','   ;后面有$,这个显示不出来..
  11. ;A=1E,S=1F,D=20H,F=21H,G=22H扫描码, A是清屏。S设置前景色。D设置背景色。F滚动一行。按G退出。

  12. START:
  13.     MOV AX,CS
  14.     MOV DS,AX
  15.    
  16.     MOV DI,0
  17.     LEA DX,ML
  18.     MOV AH,9
  19.     INT 21H
  20.     LEA DX,HH
  21.     MOV AH,9
  22.     INT 21H
  23.     MOV AX,0B800H
  24.     MOV ES,AX
  25.     MOV DL,0
  26.    
  27. A:   IN AL,60H
  28.     CMP AL,1EH
  29.     JNE NEXT1
  30.     CALL CLEAR
  31.          
  32. NEXT1:
  33.     CMP AL,1FH
  34.     JNE NEXT2
  35.     CALL CHAR1
  36.    
  37. NEXT2:
  38.     CMP AL,20H
  39.     JNE NEXT3
  40.     CALL CHAR2
  41.    
  42. NEXT3:   
  43.     CMP AL,21H
  44.     JNE NEXT4
  45.     CALL ROLL

  46. NEXT4:
  47.     CMP AL,22H
  48.     JE P
  49.    
  50.     JMP A
  51. P:  MOV AH,4CH
  52.     INT 21H
  53.    
  54. CLEAR:
  55.     PUSH CX
  56.     PUSH ES
  57.     PUSH DI
  58.    
  59.    
  60.     MOV CX,2000
  61. S1: MOV BYTE PTR ES:[DI],20H
  62.     MOV BYTE PTR ES:[DI+1],0
  63.     INC DI
  64.     INC DI
  65.     LOOP S1
  66.     POP DI
  67.     POP ES
  68.     POP CX
  69.     RET
  70.    
  71. CHAR1:
  72.     PUSH CX
  73.     PUSH ES
  74.     PUSH DI
  75.     INC DL
  76.     AND DL,00000111B
  77.     MOV DI,1
  78.     MOV CX,2000
  79. S2: MOV BYTE PTR ES:[DI],DL
  80.     INC DI
  81.     INC DI
  82.     LOOP S2
  83.     POP DI
  84.     POP ES
  85.     POP CX
  86.     RET
  87.    
  88. CHAR2:
  89.     PUSH CX
  90.     PUSH ES
  91.     PUSH DI
  92.     ADD DL,00010000B
  93.     AND DL,01110000B
  94.     MOV DI,1
  95.     MOV CX,2000
  96. S3: MOV BYTE PTR ES:[DI],DL
  97.     INC DI
  98.     INC DI
  99.     LOOP S3
  100.     POP DI
  101.     POP ES
  102.     POP CX
  103.     RET
  104.    
  105. ROLL:
  106.     PUSH CX
  107.     PUSH ES
  108.     PUSH DI
  109.     MOV AX,0B800H
  110.     MOV DS,AX
  111.     MOV SI,160
  112.     MOV ES,AX
  113.     MOV DI,0
  114.     MOV CX,160*3
  115.     CLD
  116.     REP MOVSB
  117.     MOV CX,160
  118.     MOV DI,160
  119. S4: MOV BYTE PTR ES:[DI],20H
  120.     ADD DI,2
  121.     LOOP S4


  122.     POP DI
  123.     POP ES
  124.     POP CX
  125.     RET
  126.    

  127. CODES ENDS
  128.     END START
复制代码
123.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-11 19:01:18 | 显示全部楼层
本帖最后由 zealstar 于 2017-1-11 19:03 编辑
auyhin丶 发表于 2017-1-11 18:44
我回头写了下这个.要跟你作用一样的。 但是为什么我写到往上滚动那行代码的时候却实现不了。
一按F就成这 ...


函数内:
119行:MOV CX,160*4
应该是:MOV CX, 160*24
你这样只拷贝了4行……

另外:
你发现了么,如果只是对比通码而不对比断码,就会连续发送命令。所以会上卷n行,哪怕你是拷贝的4行,也会一下滚n行(键盘连发啊)自然只有黑屏了……所以我自己改良后就是先对比通码(键按下)再对比断码(键弹起)才call功能函数。


再补一下:
这个论坛里引用代码里面,单引号加$是一个特殊格式,所以如果要显示$,改成双引号就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-11 19:20:36 | 显示全部楼层
果然还是要考虑断码..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-14 09:12:27 | 显示全部楼层
过来看一看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-8 01:17:47 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-22 14:27:43 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-22 15:07:13 | 显示全部楼层
可能是在dosbox中中断系统会出问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 08:28:23 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 12:48:01 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-13 15:38:01 | 显示全部楼层
我也来学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 03:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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