鱼C论坛

 找回密码
 立即注册
查看: 6425|回复: 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
DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS

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

START:
    MOV AX,CS
    MOV DS,AX
    
    MOV DI,0
    LEA DX,ML
    MOV AH,9
    INT 21H
    LEA DX,HH
    MOV AH,9
    INT 21H
    MOV AX,0B800H
    MOV ES,AX
    MOV DL,0
    
A:   IN AL,60H
    CMP AL,1EH
    JNE NEXT1
    CALL CLEAR
          
NEXT1:
    CMP AL,1FH
    JNE NEXT2
    CALL CHAR1
    
NEXT2:
    CMP AL,20H
    JNE NEXT3
    CALL CHAR2
    
NEXT3:   
    CMP AL,21H
    JNE NEXT4
    CALL ROLL

NEXT4: 
    CMP AL,22H
    JE P
    
    JMP A
P:  MOV AH,4CH
    INT 21H
    
CLEAR:
    PUSH CX
    PUSH ES 
    PUSH DI
    
    
    MOV CX,2000
S1: MOV BYTE PTR ES:[DI],20H
    MOV BYTE PTR ES:[DI+1],0
    INC DI
    INC DI
    LOOP S1
    POP DI
    POP ES
    POP CX
    RET
    
CHAR1:
    PUSH CX
    PUSH ES
    PUSH DI
    INC DL
    AND DL,00000111B
    MOV DI,1
    MOV CX,2000
S2: MOV BYTE PTR ES:[DI],DL
    INC DI
    INC DI
    LOOP S2
    POP DI
    POP ES
    POP CX
    RET
    
CHAR2:
    PUSH CX
    PUSH ES
    PUSH DI
    ADD DL,00010000B
    AND DL,01110000B
    MOV DI,1
    MOV CX,2000
S3: MOV BYTE PTR ES:[DI],DL
    INC DI
    INC DI
    LOOP S3
    POP DI
    POP ES
    POP CX
    RET
    
ROLL:
    PUSH CX
    PUSH ES
    PUSH DI
    MOV AX,0B800H
    MOV DS,AX
    MOV SI,160
    MOV ES,AX
    MOV DI,0
    MOV CX,160*3
    CLD
    REP MOVSB
    MOV CX,160
    MOV DI,160
S4: MOV BYTE PTR ES:[DI],20H
    ADD DI,2
    LOOP S4


    POP DI
    POP ES
    POP CX
    RET
    

CODES ENDS
    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-11-23 03:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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