| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7700 人关注过本帖
标题:大家来写写汇编小玩意
只看楼主 加入收藏
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 9楼 Valenciax
细致,有钻劲!
写汇编是好久好久以前的事了,我已经忘了格式,好像什么code segement 等开头,写com程序还要加个org 100h吧!都忘了,只会用debug写些简单的,向你学习!

能编个毛线衣吗?
2016-06-10 17:41
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:340
专家分:2482
注 册:2016-5-15
收藏
得分:0 
回复 11楼 wmf2014
班竹不必客气,看过你写的C和JAVA的游戏,都挺不错,汇编在快和短占有优势,但写起大程式很费劲,还是高阶语言方便些
2016-06-10 18:39
AXRZ
Rank: 2
等 级:论坛游民
威 望:5
帖 子:48
专家分:84
注 册:2016-3-23
收藏
得分:10 
观察了下,根据你提供的截图,CH初始为0
MOV CX,3
可以变为:
MOV CL,3
CODE segment
    assume  cs:CODE,ds:CODE,es:CODE,ss:CODE
    org 100h
start:
     mov si,offset buff
     mov cx,3    ;可改为MOV CL,3
S10:
     push cx
     lodsw ;读入DS:SI一个word入AX,并且SI自动加1,al=字节,ah=回圈长度
mov cl,ah ;取回圈长度,这里ch已经=0
S20:
     int 29h
     inc al
     loop S20 ;内回圈
    pop cx  ;外回圈三次
    loop S10
     ret

buff db '0',10,'a',26,'A',26

CODE ENDS
END START


不过在16位下也就节省了1字节
2016-06-11 14:07
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:340
专家分:2482
注 册:2016-5-15
收藏
得分:0 
回复 13楼 AXRZ
AXRZ班竹观察是对的,但24bytes版没利用这个特性,毕竟有冒险成份,万一有dos版不把ch设0,会出现错误


下面是24 bytes版
内回圈只减ah,进一步缩到24bytes,若是加上AXRZ班竹的修改
mov ch,3,那么就是23bytes !

CODE segment
assume  cs:CODE,ds:CODE,es:CODE,ss:CODE
  org 100h
start:
 mov si,offset buff
 mov cx,3
next:
 lodsw
next1:
 int 29h
 inc al
 dec ah
 jnz next1
 loop next
next2:
 ret
buff db '0',10,'a',26,'A',26
;-------------------------------------------
CODE ENDS
END START
2016-06-11 16:31
AXRZ
Rank: 2
等 级:论坛游民
威 望:5
帖 子:48
专家分:84
注 册:2016-3-23
收藏
得分:0 
回复 14楼 Valenciax
这和你第一题的做法一个道理,如果搬到其他DOS版本下一些微小的系统调用程序时的改动都可以使这一特性失效

[此贴子已经被作者于2016-6-12 01:17编辑过]

2016-06-12 01:08
AXRZ
Rank: 2
等 级:论坛游民
威 望:5
帖 子:48
专家分:84
注 册:2016-3-23
收藏
得分:0 
最后你出来的代码还可以省个字节:

CODE segment
assume  cs:CODE,ds:CODE,es:CODE,ss:CODE
  org 100h
start:
 mov si,offset buff
 mov cl,3
next:
 lodsw
next1:
 int 29h
 inc al    ;用inc ax,省个字节
 dec ah
 jnz next1
 loop next
next2:
 ret
buff db '0',10,'a',26,'A',26
;-------------------------------------------
CODE ENDS
END START


这样就22字节了
2016-06-12 01:37
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:340
专家分:2482
注 册:2016-5-15
收藏
得分:0 
回复 16楼 AXRZ
哈..对的,一直被直觉左右,想不起inc al和inc ax差一个bytes
2016-06-12 07:04
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
精益求精啊

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-06-12 07:22
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
就如同当年我在16K内存的袖珍计算机上用BASIC编程,对每行语句都“斤斤计较”一样。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-06-12 07:24
快速回复:大家来写写汇编小玩意
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042580 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved